我如何使它响应?
How do I make this responsive?
好的。所以,我正在创建一个聊天 site/application 并且我对 CSS.
几乎一无所知
但是我一个人在开发这个东西,所以我得试试。
我在 Photoshop 中设计了该网站,然后我开始使用 HTML & CSS 实际创建它,它看起来很棒,但并非所有部分都是响应式的。
更具体地说,消息容器的事情,有人可以帮助我学习如何做响应,或者只是用勺子喂整个网站但对我有响应吗?
到目前为止,这是我的代码:
HTML(结合EJS):
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Home - <%= name %></title>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<link rel="stylesheet" href="/global.css">
<link rel="stylesheet" href="/index.css">
</head>
<body>
<div class="content">
<div class="nav">
<h1 class="navTitle">Atlas Chat</h1>
<h2 class="navUsername"><%= user ? user.username : "Not logged in" %></h2>
<% if(user !== null) { %>
<a class="navitem logoutbtn" href="/logout">Logout</a>
<% } else { %>
<a class="navitem loginbtn" href="/login">Login</a>
<a class="navitem" href="/register">Register</a>
<% } %>
</div>
<div class="main">
<div class="roomInfo">
<span class="hashtag">#</span><input type="text" class="roomname" pattern="^[a-z0-9\-]{0,16}$" required placeholder="channel-name"><button class="roomnamebtn">Join</button>
</div>
<hr>
<div class="room">
<ul class="messages">
<li class="message"><span class="user">Atlas</span>: <span class="msgContent">This is a message.</span></li>
<li class="message"><span class="user">Atlas</span>: <span class="msgContent">This is another message.</span></li>
<li class="message"><span class="user">Atlas</span>: <span class="msgContent">This is another message.</span></li>
<li class="message"><span class="user">Atlas</span>: <span class="msgContent">This is another message.</span></li>
<li class="message"><span class="user">Atlas</span>: <span class="msgContent">This is another message.</span></li>
<li class="message"><span class="user">Atlas</span>: <span class="msgContent">This is another message.</span></li>
<li class="message"><span class="user">Atlas</span>: <span class="msgContent">This is another message.</span></li>
<li class="message"><span class="user">Atlas</span>: <span class="msgContent">This is another message.</span></li>
<li class="message"><span class="user">Atlas</span>: <span class="msgContent">This is another message.</span></li>
<li class="message"><span class="user">Atlas</span>: <span class="msgContent">This is another message.</span></li>
<li class="message"><span class="user">Atlas</span>: <span class="msgContent">This is another message.</span></li>
<li class="message"><span class="user">Atlas</span>: <span class="msgContent">This is another message.</span></li>
<li class="message"><span class="user">Atlas</span>: <span class="msgContent">This is another message.</span></li>
<li class="message"><span class="user">Atlas</span>: <span class="msgContent">This is another message.</span></li>
<li class="message"><span class="user">Atlas</span>: <span class="msgContent">This is another message.</span></li>
<li class="message"><span class="user">Atlas</span>: <span class="msgContent">This is another message.</span></li>
<li class="message"><span class="user">Atlas</span>: <span class="msgContent">This is another message.</span></li>
<li class="message"><span class="user">Atlas</span>: <span class="msgContent">This is another message.</span></li>
<li class="message"><span class="user">Atlas</span>: <span class="msgContent">This is another message.</span></li>
<li class="message"><span class="user">Atlas</span>: <span class="msgContent">This is another message.</span></li>
<li class="message"><span class="user">Atlas</span>: <span class="msgContent">This is another message.</span></li>
<li class="message"><span class="user">Atlas</span>: <span class="msgContent">This is another message.</span></li>
<li class="message"><span class="user">Atlas</span>: <span class="msgContent">This is another message.</span></li>
<li class="message"><span class="user">Atlas</span>: <span class="msgContent">This is another message.</span></li>
<li class="message"><span class="user">Atlas</span>: <span class="msgContent">This is another message.</span></li>
<li class="message"><span class="user">Atlas</span>: <span class="msgContent">This is another message.</span></li>
<li class="message"><span class="user">Atlas</span>: <span class="msgContent">This is another message.</span></li>
<li class="message"><span class="user">Atlas</span>: <span class="msgContent">This is another message.</span></li>
<li class="message"><span class="user">Atlas</span>: <span class="msgContent">This is another message.</span></li>
<li class="message"><span class="user">Atlas</span>: <span class="msgContent">This is another message.</span></li>
<li class="message"><span class="user">Atlas</span>: <span class="msgContent">This is another message.</span></li>
</ul>
<div class="inputarea">
<hr class="inputhr">
<input type="text" class="roominput" placeholder="<%= user ? "Send a message." : "Log in to join the conversation!" %>" <%= user ? "" : "disabled" %> required><button class="roomsendbtn" <%= user ? "" : "disabled" %>>Send</button>
</div>
</div>
</div>
<div class="users">
<h1 class="usersTitle">Online Users</h1>
<ul class="usersList">
<li class="usersUser">Atlas</li>
<li class="usersUser">SomeOtherGuy</li>
<li class="usersUser">SomeThirdGuy</li>
</ul>
</div>
</div>
</body>
</html>
CSS:
* {
box-sizing: border-box;
margin: 0;
padding: 0;
}
:root {
--bg1: #131318;
--bg2: #1E1E26;
--link1: #2991E9;
--link2: #1B83DA;
--btn1: #9638E5;
--btn2: #8933D1;
--text1: #ffffff;
--text2: #626262;
--border: #252525;
--success: #28D328;
--danger: #EA2828;
}
:focus {
outline: initial;
}
html {
font-family: "Open Sans";
font-size: 14px;
background-color: var(--bg1);
color: white;
}
body {
height: 100vh;
width: 100vw;
}
h1 {
font-family: "Poppins";
font-weight: 500;
}
ul {
list-style-type: none;
}
a {
text-decoration: none;
color: #35A7FF;
}
a:hover {
color: #2887D7;
text-decoration: underline;
}
.content {
display: flex;
height: 100%;
width: 100%;
}
.nav {
display: flex;
flex-direction: column;
height: 100%;
width: 15%;
overflow: auto;
list-style: none;
background-color: var(--btn1);
text-align: center;
}
.navitem {
background-color: var(--btn1);
padding: 10px 15px;
text-decoration: none;
cursor: pointer;
text-align: center;
color: white !important;
text-decoration: none;
}
.navitem:hover {
background-color: var(--btn2);
color: white !important;
text-decoration: none !important;
}
.main {
display: flex;
height: 100%;
width: 70%;
flex-direction: column;
}
.users {
display: flex;
flex-direction: column;
background-color: var(--btn1);
height: 100%;
width: 15%;
text-align: center;
}
.logoutbtn, .loginbtn {
margin-top: auto;
}
.navTitle, .usersTitle {
margin-top: 8px;
}
.roomInfo {
margin-top: 14px;
margin-bottom: 14px;
}
.hashtag {
font-size: 3rem;
vertical-align: middle;
line-height: 0;
font-family: "Poppins";
font-weight: 500;
margin-left: 16px;
color: var(--text2);
}
input.roomname {
width: 14%;
padding: 10px 8px;
font-size: 16px;
color: var(--text2);
margin-left: 12px;
margin-right: 12px;
background-color: var(--bg2);
display: inline-block;
border: 1px solid var(--border);
border-radius: 4px;
}
input.roomname:focus {
border: 1px solid var(--btn2);
}
input.roominput {
width: 85%;
padding: 10px 8px;
font-size: 16px;
color: var(--text1);
margin-left: 15px;
margin-right: 25px;
background-color: var(--bg2);
display: inline-block;
border: 1px solid var(--border);
border-radius: 4px;
}
input.roominput:focus {
border: 1px solid var(--btn2);
}
input.roominput:disabled {
cursor: not-allowed;
}
hr {
border: 0;
margin-inline-start: 15px;
margin-inline-end: 15px;
border-bottom: 2px solid var(--bg2);
}
ul.messages {
max-height: 800px;
width: 100%;
overflow-y: scroll;
padding-left: 25px;
padding-right: 25px;
padding-top: 10px;
padding-bottom: 10px;
}
li.message {
max-height: 20px;
}
li.message:not(:last-child) {
margin-bottom: 8px;
}
button.roomnamebtn {
width: 7%;
font-size: 1.3rem;
background-color: var(--btn1);
color: white;
padding: 10px 8px;
border: none;
border-radius: 4px;
cursor: pointer;
}
button.roomsendbtn {
width: 10%;
font-size: 1.3rem;
background-color: var(--btn1);
color: white;
margin-top: 14px;
padding: 10px 8px;
border: none;
border-radius: 4px;
cursor: pointer;
}
button.roomsendbtn:disabled {
cursor: not-allowed;
}
button:hover {
background-color: var(--btn2);
}
响应式设计意味着它会随着屏幕的大小和形状而变化。
例如,移动设计和布局在桌面上看起来很傻,而桌面设计太杂乱而不适合移动。
前段时间我正在制作一个聊天应用程序的模型,如果您不介意的话,我想用它作为示例,因为我已经在线查看了代码。
https://replit.com/@DillonBurnett/VapidDeficientTitles#index.html
当您使用移动设备时,该应用程序将如下所示:
这里很好,也很容易查看,你可以聊天,你可以点击右上角的按钮查看房间、用户和设置...但是在桌面,所以我使用一些 css 来专门在屏幕很大时将其更改为如下所示:
每个“屏幕”都是一个长div。把它想象成 4 个屏幕宽度,每个屏幕宽度为 100%,但它们只是隐藏起来,因为它们离开了屏幕。当您 select 一个不同的“屏幕”时,它会立即滚动到那里,使其看起来像一个新页面。
#screens{
width: 100%; height: 100%;
background: #2a2a2a;
overflow: hidden;
}
#screens #viewport{
width: calc(100% * 4); height: 100%;
overflow: none;
}
#screens #viewport > *{
width: calc(100% / 4); height: 100%;
float: left;
}
但是,当用户在桌面上并且我想同时显示“房间”和“聊天”时,我只是将它们调整为适合 1 个屏幕。
@media only screen and (min-width: 800px){
#screens #viewport #rooms{width: 200px!important}
#screens #viewport #chat{width: calc(100% / 4 - 200px)!important;}
}
如您所见,@media 标签是唯一的,并且只允许其中的 css 在屏幕至少 800 宽时 运行 .否则,它会被忽略。这为 css 开辟了很大的潜力。您可以针对纵向或横向调整布局、宽度、高度以针对许多不同的设备...甚至是电视。
我使用那个例子是因为 css 通常简单易懂......虽然它有点长(css 声明),但我希望它能帮助你设计响应式聊天应用程序。如果您对该示例有任何具体问题,请在下方告诉我。
好的。所以,我正在创建一个聊天 site/application 并且我对 CSS.
几乎一无所知
但是我一个人在开发这个东西,所以我得试试。
我在 Photoshop 中设计了该网站,然后我开始使用 HTML & CSS 实际创建它,它看起来很棒,但并非所有部分都是响应式的。
更具体地说,消息容器的事情,有人可以帮助我学习如何做响应,或者只是用勺子喂整个网站但对我有响应吗?
到目前为止,这是我的代码:
HTML(结合EJS):
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Home - <%= name %></title>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<link rel="stylesheet" href="/global.css">
<link rel="stylesheet" href="/index.css">
</head>
<body>
<div class="content">
<div class="nav">
<h1 class="navTitle">Atlas Chat</h1>
<h2 class="navUsername"><%= user ? user.username : "Not logged in" %></h2>
<% if(user !== null) { %>
<a class="navitem logoutbtn" href="/logout">Logout</a>
<% } else { %>
<a class="navitem loginbtn" href="/login">Login</a>
<a class="navitem" href="/register">Register</a>
<% } %>
</div>
<div class="main">
<div class="roomInfo">
<span class="hashtag">#</span><input type="text" class="roomname" pattern="^[a-z0-9\-]{0,16}$" required placeholder="channel-name"><button class="roomnamebtn">Join</button>
</div>
<hr>
<div class="room">
<ul class="messages">
<li class="message"><span class="user">Atlas</span>: <span class="msgContent">This is a message.</span></li>
<li class="message"><span class="user">Atlas</span>: <span class="msgContent">This is another message.</span></li>
<li class="message"><span class="user">Atlas</span>: <span class="msgContent">This is another message.</span></li>
<li class="message"><span class="user">Atlas</span>: <span class="msgContent">This is another message.</span></li>
<li class="message"><span class="user">Atlas</span>: <span class="msgContent">This is another message.</span></li>
<li class="message"><span class="user">Atlas</span>: <span class="msgContent">This is another message.</span></li>
<li class="message"><span class="user">Atlas</span>: <span class="msgContent">This is another message.</span></li>
<li class="message"><span class="user">Atlas</span>: <span class="msgContent">This is another message.</span></li>
<li class="message"><span class="user">Atlas</span>: <span class="msgContent">This is another message.</span></li>
<li class="message"><span class="user">Atlas</span>: <span class="msgContent">This is another message.</span></li>
<li class="message"><span class="user">Atlas</span>: <span class="msgContent">This is another message.</span></li>
<li class="message"><span class="user">Atlas</span>: <span class="msgContent">This is another message.</span></li>
<li class="message"><span class="user">Atlas</span>: <span class="msgContent">This is another message.</span></li>
<li class="message"><span class="user">Atlas</span>: <span class="msgContent">This is another message.</span></li>
<li class="message"><span class="user">Atlas</span>: <span class="msgContent">This is another message.</span></li>
<li class="message"><span class="user">Atlas</span>: <span class="msgContent">This is another message.</span></li>
<li class="message"><span class="user">Atlas</span>: <span class="msgContent">This is another message.</span></li>
<li class="message"><span class="user">Atlas</span>: <span class="msgContent">This is another message.</span></li>
<li class="message"><span class="user">Atlas</span>: <span class="msgContent">This is another message.</span></li>
<li class="message"><span class="user">Atlas</span>: <span class="msgContent">This is another message.</span></li>
<li class="message"><span class="user">Atlas</span>: <span class="msgContent">This is another message.</span></li>
<li class="message"><span class="user">Atlas</span>: <span class="msgContent">This is another message.</span></li>
<li class="message"><span class="user">Atlas</span>: <span class="msgContent">This is another message.</span></li>
<li class="message"><span class="user">Atlas</span>: <span class="msgContent">This is another message.</span></li>
<li class="message"><span class="user">Atlas</span>: <span class="msgContent">This is another message.</span></li>
<li class="message"><span class="user">Atlas</span>: <span class="msgContent">This is another message.</span></li>
<li class="message"><span class="user">Atlas</span>: <span class="msgContent">This is another message.</span></li>
<li class="message"><span class="user">Atlas</span>: <span class="msgContent">This is another message.</span></li>
<li class="message"><span class="user">Atlas</span>: <span class="msgContent">This is another message.</span></li>
<li class="message"><span class="user">Atlas</span>: <span class="msgContent">This is another message.</span></li>
<li class="message"><span class="user">Atlas</span>: <span class="msgContent">This is another message.</span></li>
</ul>
<div class="inputarea">
<hr class="inputhr">
<input type="text" class="roominput" placeholder="<%= user ? "Send a message." : "Log in to join the conversation!" %>" <%= user ? "" : "disabled" %> required><button class="roomsendbtn" <%= user ? "" : "disabled" %>>Send</button>
</div>
</div>
</div>
<div class="users">
<h1 class="usersTitle">Online Users</h1>
<ul class="usersList">
<li class="usersUser">Atlas</li>
<li class="usersUser">SomeOtherGuy</li>
<li class="usersUser">SomeThirdGuy</li>
</ul>
</div>
</div>
</body>
</html>
CSS:
* {
box-sizing: border-box;
margin: 0;
padding: 0;
}
:root {
--bg1: #131318;
--bg2: #1E1E26;
--link1: #2991E9;
--link2: #1B83DA;
--btn1: #9638E5;
--btn2: #8933D1;
--text1: #ffffff;
--text2: #626262;
--border: #252525;
--success: #28D328;
--danger: #EA2828;
}
:focus {
outline: initial;
}
html {
font-family: "Open Sans";
font-size: 14px;
background-color: var(--bg1);
color: white;
}
body {
height: 100vh;
width: 100vw;
}
h1 {
font-family: "Poppins";
font-weight: 500;
}
ul {
list-style-type: none;
}
a {
text-decoration: none;
color: #35A7FF;
}
a:hover {
color: #2887D7;
text-decoration: underline;
}
.content {
display: flex;
height: 100%;
width: 100%;
}
.nav {
display: flex;
flex-direction: column;
height: 100%;
width: 15%;
overflow: auto;
list-style: none;
background-color: var(--btn1);
text-align: center;
}
.navitem {
background-color: var(--btn1);
padding: 10px 15px;
text-decoration: none;
cursor: pointer;
text-align: center;
color: white !important;
text-decoration: none;
}
.navitem:hover {
background-color: var(--btn2);
color: white !important;
text-decoration: none !important;
}
.main {
display: flex;
height: 100%;
width: 70%;
flex-direction: column;
}
.users {
display: flex;
flex-direction: column;
background-color: var(--btn1);
height: 100%;
width: 15%;
text-align: center;
}
.logoutbtn, .loginbtn {
margin-top: auto;
}
.navTitle, .usersTitle {
margin-top: 8px;
}
.roomInfo {
margin-top: 14px;
margin-bottom: 14px;
}
.hashtag {
font-size: 3rem;
vertical-align: middle;
line-height: 0;
font-family: "Poppins";
font-weight: 500;
margin-left: 16px;
color: var(--text2);
}
input.roomname {
width: 14%;
padding: 10px 8px;
font-size: 16px;
color: var(--text2);
margin-left: 12px;
margin-right: 12px;
background-color: var(--bg2);
display: inline-block;
border: 1px solid var(--border);
border-radius: 4px;
}
input.roomname:focus {
border: 1px solid var(--btn2);
}
input.roominput {
width: 85%;
padding: 10px 8px;
font-size: 16px;
color: var(--text1);
margin-left: 15px;
margin-right: 25px;
background-color: var(--bg2);
display: inline-block;
border: 1px solid var(--border);
border-radius: 4px;
}
input.roominput:focus {
border: 1px solid var(--btn2);
}
input.roominput:disabled {
cursor: not-allowed;
}
hr {
border: 0;
margin-inline-start: 15px;
margin-inline-end: 15px;
border-bottom: 2px solid var(--bg2);
}
ul.messages {
max-height: 800px;
width: 100%;
overflow-y: scroll;
padding-left: 25px;
padding-right: 25px;
padding-top: 10px;
padding-bottom: 10px;
}
li.message {
max-height: 20px;
}
li.message:not(:last-child) {
margin-bottom: 8px;
}
button.roomnamebtn {
width: 7%;
font-size: 1.3rem;
background-color: var(--btn1);
color: white;
padding: 10px 8px;
border: none;
border-radius: 4px;
cursor: pointer;
}
button.roomsendbtn {
width: 10%;
font-size: 1.3rem;
background-color: var(--btn1);
color: white;
margin-top: 14px;
padding: 10px 8px;
border: none;
border-radius: 4px;
cursor: pointer;
}
button.roomsendbtn:disabled {
cursor: not-allowed;
}
button:hover {
background-color: var(--btn2);
}
响应式设计意味着它会随着屏幕的大小和形状而变化。 例如,移动设计和布局在桌面上看起来很傻,而桌面设计太杂乱而不适合移动。
前段时间我正在制作一个聊天应用程序的模型,如果您不介意的话,我想用它作为示例,因为我已经在线查看了代码。
https://replit.com/@DillonBurnett/VapidDeficientTitles#index.html
当您使用移动设备时,该应用程序将如下所示:
这里很好,也很容易查看,你可以聊天,你可以点击右上角的按钮查看房间、用户和设置...但是在桌面,所以我使用一些 css 来专门在屏幕很大时将其更改为如下所示:
每个“屏幕”都是一个长div。把它想象成 4 个屏幕宽度,每个屏幕宽度为 100%,但它们只是隐藏起来,因为它们离开了屏幕。当您 select 一个不同的“屏幕”时,它会立即滚动到那里,使其看起来像一个新页面。
#screens{
width: 100%; height: 100%;
background: #2a2a2a;
overflow: hidden;
}
#screens #viewport{
width: calc(100% * 4); height: 100%;
overflow: none;
}
#screens #viewport > *{
width: calc(100% / 4); height: 100%;
float: left;
}
但是,当用户在桌面上并且我想同时显示“房间”和“聊天”时,我只是将它们调整为适合 1 个屏幕。
@media only screen and (min-width: 800px){
#screens #viewport #rooms{width: 200px!important}
#screens #viewport #chat{width: calc(100% / 4 - 200px)!important;}
}
如您所见,@media 标签是唯一的,并且只允许其中的 css 在屏幕至少 800 宽时 运行 .否则,它会被忽略。这为 css 开辟了很大的潜力。您可以针对纵向或横向调整布局、宽度、高度以针对许多不同的设备...甚至是电视。
我使用那个例子是因为 css 通常简单易懂......虽然它有点长(css 声明),但我希望它能帮助你设计响应式聊天应用程序。如果您对该示例有任何具体问题,请在下方告诉我。