max-width 带有 css 网格

max-width with css grid

我想知道 css 网格如何利用 max-widths。以旧的方式,您将使用带有包装器 class 的容器来设置边距。

使用 CSS 网格,根据您创建它们的方式,您不再需要使用容器,有时您无处添加容器。

我希望 header 是全宽的,但我希望其中的导航栏的最大宽度为屏幕分辨率的 80% 并自动设置边距,此代码与第一种方式类似本来可以用包装容器来做的。问题是,我如何对 aside 和 main 做同样的事情,因为它们不在 parent 内以设置最大宽度?

body {
    display: grid;
    grid-template-areas: 
    "header header"
    "aside main";
    grid-template-columns: 275px 1fr;
    grid-template-rows: 1fr 1fr;
}

header {
    grid-area: header;
    border: solid 1px black;
}

header > nav {
    max-width: 80%;
    margin: auto;
    border: solid 1px blue;
}

aside {
    grid-area: aside;
}

main {
    grid-area: main;
}

HTML

<html>
    <body>
        <header>
            <nav>nav</nav>
        </header>
        <aside>aside</aside>
        <main>main</main>
    </body>
</html>

如果我必须将它们包裹在容器内,这将如何影响网格?如果我在 html 或 body 标签上设置最大宽度,那么我将如何获得一个延伸整个浏览器宽度的 header?

https://jsfiddle.net/6zd3o088/6/

将其视为

的四列网格
grid-template-columns: 10% 275px 1fr 10%;

然后根据修改后的 grid-areas

分配元素
grid-template-areas: 
"header header header header"
". aside main .";

body {
  display: grid;
  grid-template-areas: "header header header header" ". aside main .";
  grid-template-columns: 10% 275px 1fr 10%;
  grid-template-rows: 1fr 1fr;
  margin: 0;
  padding: 0;
  background: lightgrey;
}

header {
  grid-area: header;
  background:rebeccapurple;
}

header>nav {
  max-width: 80%;
  margin: auto;
  background: lightblue;
}

aside {
  grid-area: aside;
  background: lightgreen;
}

main {
  grid-area: main;
  background: pink;
}
<header>
  <nav>nav</nav>
</header>
<aside>aside</aside>
<main>main</main>

要将 max-widthnav 一起使用,我们必须从 header 中取出 nav,使其成为 grid-item .然后我们可以在 over 和 header.

网格上对齐它

对内部列使用 minmax 我们可以达到预期的结果

body {
  display: grid;
  grid-template-columns: 1fr minmax(auto, 100px) minmax(auto, 300px) 1fr;
  grid-template-rows: 1fr 1fr;
  margin: 0;
  padding: 0;
  background: lightgrey;
}

header {
  grid-column: 1/-1;
  grid-row: 1;
  background: rebeccapurple;
}

nav {
  grid-column: 2 / 4;
  grid-row: 1;
  background: lightblue;
}

aside {
  grid-column: 2;
  background: lightgreen;
}

main {
  grid-column: 3;
  background: pink;
}
<header></header>
<nav>nav</nav>
<aside>aside</aside>
<main>main</main>

此处使用较小的列宽进行演示,仅供参考。根据需要修改最大数字。

Codepen