【发布时间】:2019-12-15 11:28:49
【问题描述】:
我有一个简单的三列 CSS 网格布局。我需要让第一行的背景延伸到整个轨道,但将子元素对齐内部网格线,就像标准导航栏与它后面的内容对齐一样。我正在使用以下代码,但一次只能完成我的一个要求(要么让背景颜色伸展,将子元素向左移动,要么让子元素位于正确的位置,但未能背景颜色穿过):
body {
display: grid;
grid-template:
"nav nav nav"
" . content . "
}
nav {
background-color: lightblue;
grid-area: nav;
}
nav ul {
display: flex;
list-style: none;
}
main {
grid-area: content;
}
<nav>
<ul>
<li>item 1</li>
<li>item 2</li>
</ul>
</nav>
<main>
<h1>content</h1>
</main>
据我了解,在使用 CSS 网格布局时,我只能放置网格容器的直接子元素。换句话说,我可以放置nav,但不能放置nav ul。想必,CSS Grid Layout Module Level 2 会解除这个限制,让这件事变得微不足道。但我需要一个适用于今天的解决方案。
鉴于以下限制,我将如何处理:
- 解决方案必须是纯 CSS(无 JavaScript 或框架)。
- 它必须是可维护的,例如如果我决定更改第一列的宽度,我不想更改两段(或更多段)代码。
- 解决方案不必是通用的;我真的只需要在一行中使用一种纯色,以防万一。
更新:
阅读我意识到的答案,我的措辞太草率了。我问的和我想问的不一致。我正在寻找一个基于 CSS 网格布局的解决方案,复制以下“传统”实现:
nav {
background-color: lightblue;
}
.container {
margin: auto;
width: 80vw;
}
<nav>
<div class="container">
<a>item</a>
<a>item</a>
</div>
</nav>
<main>
<div class="container">
<p>content</p>
</div>
</main>
我需要导航栏的背景颜色覆盖父元素的整个宽度,但<nav>和<main>的实际内容在同一水平位置左对齐。
【问题讨论】:
-
类似这样的东西:stackoverflow.com/a/53554204/8620333?
-
@tem:这似乎总是覆盖整个视口宽度,所以这只有在布局也用完整个视口宽度时才有效。我现在将使用它,但它并没有完全涵盖我的用例。