html - 当网格项目在移动视图中折叠时避免双重网格间隙
问题描述
我正在使用 CSS 网格创建一个站点布局,我几乎完全按照我的意愿得到了它,但是我遇到了一个问题:
我的桌面视图是我想要的,但是当它折叠到移动大小的视图(所有元素在单独的行中)时,myleftPad
和rightPad
div 会导致双倍 grid-gap
,如下所示:
代码可以在这里看到:https ://codepen.io/nickmask/pen/BbxNoE
.container {
display: grid;
grid-template-areas:
"nav nav nav nav nav"
"header header header header header"
"leftPad leftSidebar content rightSidebar rightPad"
"footer footer footer footer footer";
grid-template-columns: auto 200px minmax(auto, 600px) 200px auto;
grid-template-rows: auto auto 1fr auto;
grid-gap: 10px;
height: 100vh;
}
body {
margin: 0;
}
@media (max-width: 768px) {
.container {
grid-template-areas:
"nav"
"header"
"leftPad"
"leftSidebar"
"content"
"rightSidebar"
"rightPad"
"footer";
grid-template-columns: 1fr;
grid-template-rows:
auto /* Nav */
auto /* Header */
auto /* Left Pad */
minmax(75px, auto) /* Left Sidebar */
1fr /* Content */
minmax(75px, auto) /* Right Sidebar */
auto /* Right Pad */
auto; /* Footer */
}
nav,
aside {
margin: 0;
}
}
header {
grid-area: header;
background-color: aqua;
}
nav {
grid-area: nav;
background-color: lightblue;
}
main {
grid-area: content;
}
.leftSidebar {
background-color: aliceblue;
grid-area: leftSidebar;
}
.rightSidebar {
background-color: aliceblue;
grid-area: rightSidebar;
}
footer {
grid-area: footer;
height: 100px;
background-color: lightcoral;
}
<div class="container">
<nav>
<!-- Navigation -->
Nav
</nav>
<header>
Header
</header>
<div class="leftPad"></div>
<aside class="leftSidebar">
<!-- Sidebar / Ads -->
Side bar
</aside>
<main>
<!-- Main content -->
Main content
</main>
<aside class="rightSidebar">
<!-- Sidebar / Ads -->
Side bar
</aside>
<div class="rightPad"></div>
<footer>
Footer
<!-- Footer content -->
</footer>
</div>
>
有什么解决方法,或者关于我如何以不同的方式构建这个布局的建议?干杯!
解决方案
问题是你的leftPad
-rightPad
你可以删除它们,然后改变你的grid-template-areas
:
grid-template-areas:
"nav nav nav nav nav"
"header header header header header"
". leftSidebar content rightSidebar ."
"footer footer footer footer footer";
注意上面定义中的点。在移动视图中,只需省略它们即可。
但是,您可以使用这种布局方法将网格单元格留空。要将单元格留空,请使用句号“.”。
请参阅下面的演示:
.container {
display: grid;
grid-template-areas:
"nav nav nav nav nav"
"header header header header header"
". leftSidebar content rightSidebar ."
"footer footer footer footer footer"; /* CHANGED */
grid-template-columns: auto 200px minmax(auto, 600px) 200px auto;
grid-template-rows: auto auto 1fr auto;
grid-gap: 10px;
height: 100vh;
}
body {
margin: 0;
}
@media (max-width: 768px) {
.container {
grid-template-areas:
"nav"
"header"
"leftSidebar"
"content"
"rightSidebar"
"footer"; /* CHANGED */
grid-template-columns: 1fr;
grid-template-rows:
auto /* Nav */
auto /* Header */
minmax(75px, auto) /* Left Sidebar */
1fr /* Content */
minmax(75px, auto) /* Right Sidebar */
auto; /* Footer */
} /* CHANGED */
nav,
aside {
margin: 0;
}
}
header {
grid-area: header;
background-color: aqua;
}
nav {
grid-area: nav;
background-color: lightblue;
}
main {
grid-area: content;
}
.leftSidebar {
background-color: aliceblue;
grid-area: leftSidebar;
}
.rightSidebar {
background-color: aliceblue;
grid-area: rightSidebar;
}
footer {
grid-area: footer;
height: 100px;
background-color: lightcoral;
}
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
<title>Page Title</title>
<meta name="viewport" content="width=device-width, initial-scale=1" />
<link rel="stylesheet" type="text/css" media="screen" href="main.css" />
<script src="main.js"></script>
</head>
<body>
<div class="container">
<nav>
<!-- Navigation -->
Nav
</nav>
<header>
Header
</header>
<aside class="leftSidebar">
<!-- Sidebar / Ads -->
Side bar
</aside>
<main>
<!-- Main content -->
Main content
</main>
<aside class="rightSidebar">
<!-- Sidebar / Ads -->
Side bar
</aside>
<footer>
Footer
<!-- Footer content -->
</footer>
</div>
</body>
</html>
推荐阅读
- react-native - Panresponder 可以继承 Touchable 触摸事件吗?
- javascript - 为什么传单地图没有在反应应用程序上呈现
- php - XML 中的 Woocommerce Live PHP 订单提要
- python - 使用 matplotlib 显示所有图像
- drupal - 将视图上下文过滤器设置为 request_path()
- node.js - 如何在mongodb查询中使用变量作为字段值?
- nextcloud - Onlyoffice Nextcloud 连接器无法获取文件:HTTP 403 访问被拒绝
- ionic-framework - 自定义离子可搜索组件
- flask - 如何在 Sentry 中忽略烧瓶 http 400 异常
- sql - 使用 REGEXP 将数据库中的 Urls (iframe) 更新到新路径