是否可以完全自由漫游/将我的 DOM 元素放置在 CSS 网格中?
Is it possible to completely freely roam / place my DOM elements with CSS grid?
前提
CSS 网格的优点之一是可以像这样在网格上自由放置 DOM 元素:
<body>
<nav>navigation</nav>
<main>main content</main>
<aside>sidebar</aside>
<footer>footer</footer>
</main>
body {
display: grid;
grid-template-columns: 7fr 1fr;
grid-auto-rows: 100px;
grid-gap: 10px;
grid-template-areas: "nav nav"
"content sidebar"
"meta sidebar"
"footer footer";
}
nav { grid-area: nav; }
main { grid-area: content; }
aside { grid-area: sidebar; }
footer { grid-area: footer; }
问题
到目前为止一切顺利。但是如果我在根元素中有一个元素我想放在网格上怎么办:
<body>
<nav>navigation</nav>
<main>
<h1>content</h1>
<!-- New! -->
<article>some data</article>
</main>
<aside>sidebar</aside>
<footer>copyright 2020</footer>
</main>
article { grid-area: meta; }
那是行不通的。本文不涉及元网格区域。 我想构建语义正确的 DOM 结构,在我的现实生活中,我将元素放入其他嵌套元素中。但我想根据视觉呈现(甚至响应能力)在页面上自由漫游它们。
这是可以实现的吗?
不行,需要提前声明网格内容。网格布局专为在这方面 'fixed' 的内容而设计。如果您希望在不同 layouts/screen 大小的网格中显示不同的内容,请使用媒体查询在这些分辨率下定义新的网格布局。
来自文档开头的W3C spec摘要:
This CSS module defines a two-dimensional grid-based layout system, optimized for user interface design. In the grid layout model, the children of a grid container can be positioned into arbitrary slots in a predefined flexible or fixed-size layout grid.
(强调我的)
这里的关键是“预定义”布局网格。您可以动态地将内容插入网格 只要您提前考虑为该内容提供空的网格轨道、行、单元格等 。否则,你就倒霉了。
前提
CSS 网格的优点之一是可以像这样在网格上自由放置 DOM 元素:
<body>
<nav>navigation</nav>
<main>main content</main>
<aside>sidebar</aside>
<footer>footer</footer>
</main>
body {
display: grid;
grid-template-columns: 7fr 1fr;
grid-auto-rows: 100px;
grid-gap: 10px;
grid-template-areas: "nav nav"
"content sidebar"
"meta sidebar"
"footer footer";
}
nav { grid-area: nav; }
main { grid-area: content; }
aside { grid-area: sidebar; }
footer { grid-area: footer; }
问题
到目前为止一切顺利。但是如果我在根元素中有一个元素我想放在网格上怎么办:
<body>
<nav>navigation</nav>
<main>
<h1>content</h1>
<!-- New! -->
<article>some data</article>
</main>
<aside>sidebar</aside>
<footer>copyright 2020</footer>
</main>
article { grid-area: meta; }
那是行不通的。本文不涉及元网格区域。 我想构建语义正确的 DOM 结构,在我的现实生活中,我将元素放入其他嵌套元素中。但我想根据视觉呈现(甚至响应能力)在页面上自由漫游它们。
这是可以实现的吗?
不行,需要提前声明网格内容。网格布局专为在这方面 'fixed' 的内容而设计。如果您希望在不同 layouts/screen 大小的网格中显示不同的内容,请使用媒体查询在这些分辨率下定义新的网格布局。
来自文档开头的W3C spec摘要:
This CSS module defines a two-dimensional grid-based layout system, optimized for user interface design. In the grid layout model, the children of a grid container can be positioned into arbitrary slots in a predefined flexible or fixed-size layout grid.
(强调我的)
这里的关键是“预定义”布局网格。您可以动态地将内容插入网格 只要您提前考虑为该内容提供空的网格轨道、行、单元格等 。否则,你就倒霉了。