【发布时间】:2021-04-14 09:35:03
【问题描述】:
我在简单的网格布局中遇到了一些样式问题,其中包含边栏 (aside) 和一些 main 内容。
<body>
<header>Header</header>
<nav>Navigation Links</nav>
<aside>Sidebar</aside>
<main>Some main content</main>
<footer>Footer</footer>
</body>
在某些页面上,我的 html 中没有 aside:
<body>
<header>Header</header>
<nav>Navigation Links</nav>
<main>Some main content</main>
<footer>Footer</footer>
</body>
这是我的代码
body {
height: 100%;
display: grid;
/* mobile layout */
grid-template: auto auto auto 1fr auto / 1fr;
grid-template-areas:
"header"
"nav"
"aside"
"main"
"footer";
}
header {
background-color: blue;
grid-area: header;
}
nav {
background-color: aquamarine;
grid-area: nav;
}
aside {
background-color: green;
grid-area: aside;
}
main {
background-color: yellow;
grid-area: main;
}
footer {
background-color: orange;
grid-area: footer;
}
/* desktop layout */
@media (min-width: 768px) {
body {
grid-template: auto auto 1fr auto / minmax(300px, 25%) 1fr;
grid-template-areas:
"header header"
"nav nav"
"aside main"
"footer footer";
}
}
<body>
<header>Header</header>
<nav>Navigation Links</nav>
<!-- if aside is deleted main should strech whole space-->
<aside>Sidebar</aside>
<main>Some main content</main>
<footer>Footer</footer>
</body>
如果显示侧边栏,它的最小宽度应为 300 像素。如果侧边栏没有显示,主要内容应该占据整个宽度。然而这是不可能的,它仍然只占宽度的 75%(aside 最大为 25%)。
我想到的一些解决方案:
- 如果没有显示
aside,我可以调整grid-template以仅使用一个网格列:
但是,我不知道如何使用 CSS 完成此操作。grid-template: auto auto auto 1fr auto / 1fr;:has选择器仍在草稿中。 - 将第一个网格列的宽度设置为 0。
但是,如果显示了一边,我该如何覆盖此设置?grid-template: auto auto 1fr auto / 0 1fr;
感谢您的帮助!
【问题讨论】:
-
我也认为这可能是解决方案,但它不起作用。
grid-template: auto auto 1fr auto / minmax(0px, 25%) 1fr;可能是因为声明了 2 个网格列?