【发布时间】:2018-04-15 09:04:57
【问题描述】:
使用repeat() 和auto-fit / auto-fill 函数,当列或行有定义的长度模式时,很容易让网格项换行。
在下面的示例中,所有列的最小宽度为 100px,最大宽度为 1fr。
#grid {
display: grid;
grid-template-columns: repeat(auto-fit, minmax(100px, 1fr));
grid-gap: 1em;
}
#grid > div {
background-color: #ccddaa;
padding: 10px;
}
<div id="grid">
<div></div>
<div></div>
<div></div>
<div></div>
<div></div>
<div></div>
<div></div>
<div></div>
<div></div>
</div>
但是当轨道没有长度模式(即长度随机变化)时,如何使网格项进行换行?
在下面的示例中,第一列的宽度为 60%。第二列是最小/最大 250px/1fr。如何让第二列在较小的屏幕上换行?
#grid {
display: grid;
grid-template-columns: 60% minmax(250px, 1fr);
grid-gap: 1em;
}
#grid > div {
background-color: #ccddaa;
padding: 10px;
}
<div id="grid">
<div></div>
<div></div>
</div>
我知道 flexbox 和媒体查询提供了解决方案,但我想知道网格布局是否可以做到这一点。我搜索了spec,但没有找到任何东西。也许我错过了这个部分。感谢您的帮助。
【问题讨论】:
-
grid 通过列和行构建网格,这使得每行和列的大小相同,就像 HTML 表格一样。像表格一样,元素可以跨越几行或几列,.. 但它需要通过类/id 或伪类在每个容器的 css 中设置。自动填充可以使项目的数量发生变化,但列宽和行高将采用它包含的最宽元素。请参阅:w3.org/TR/css-grid-1/#auto-repeat auto-fit 可能是您正在寻找的内容
-
谢谢。我熟悉规范中的布局概念和部分 (I've written about it before)。我想知道 Grid 是否有不同的方法来包装轨道,或者通过我还没有发现的方法,或者通过创建一个比方说 12 列的网格,然后使用基于行的放置来使项目跨列和最终包裹。 @G-Cyr
-
oups,不幸的是,据我所知,事实并非如此,不幸的是,您最终可能会遇到孩子相互重叠的情况:(您的问题和期望似乎与内联元素 101 行为非常相似......如果它包含内联内容。这确实是一个不错的智能功能。
-
是的,grid(table 2.0 显示版本)与表格显示非常相似,但从一开始就缺少 col 和 row span。 Flex 绝对是目前最灵活的网格系统