如果我有一个自动流列的网格
display: grid;
grid-auto-flow: column;所以我不知道我有多少列
我如何说“我希望所有列都是内容的最小大小,最后一列填充所有可用的空间”?
我知道,在简单的情况下,这是可以通过flexbox实现的,我正试图具体地增强我的网格知识。
发布于 2019-10-20 19:53:28
如果是关于第一列,您可以轻松地将一个模板(显式网格)定义为1fr,将隐式网格定义为min-content
.box {
display: grid;
grid-auto-flow: column;
grid-template-columns:1fr;
grid-auto-columns:min-content;
margin:5px;
}
span {
border: 1px solid;
padding: 5px;
}<div class="box">
<span>aa</span>
<span>b</span>
<span>ccc</span>
<span>d</span>
<span>eeee</span>
</div>
<div class="box">
<span>aa</span>
<span>b</span>
<span>eeee</span>
</div>
对于最后一列,您可能需要更多的黑客,在其中我们考虑相同的配置,但我们将所有元素移到隐式网格之前,以保持最后一个1fr。我们需要使用负数与随机区域相结合来实现这一点。(more details about this trick here)
唯一的缺点是您需要定义所有的网格列,但是您不需要知道列的数量,只需要知道最大的列数(您可能会考虑SASS来生成规则)。
.box {
display: grid;
grid-auto-flow: column;
grid-template-columns:1fr;
grid-auto-columns:min-content;
margin:5px;
}
span {
border: 1px solid;
padding: 5px;
}
span:nth-last-child(2) { grid-column:random -1; }
span:nth-last-child(3) { grid-column:random -2; }
span:nth-last-child(4) { grid-column:random -3; }
span:nth-last-child(5) { grid-column:random -4; }
span:nth-last-child(6) { grid-column:random -5; }
span:nth-last-child(7) { grid-column:random -6; }
span:nth-last-child(8) { grid-column:random -7; }
span:nth-last-child(9) { grid-column:random -8; }
/* and so on
span:nth-last-child(n) { grid-column:random -(n-1); }
*/<div class="box">
<span>aa</span>
<span>b</span>
<span>ccc</span>
<span>d</span>
<span>eeee</span>
</div>
<div class="box">
<span>aa</span>
<span>b</span>
<span>eeee</span>
</div>
发布于 2019-10-20 21:19:29
另一种意想不到的方法可能是在最后一个元素上设置跨越列的数量,并且只使用grid-auto-columns: auto,而不使用网格模板列。
.box {
display: grid;
grid-auto-flow: column;
/* grid-auto-columns: auto; useless here */
margin: 5px;
}
span {
border: 1px solid;
padding: 5px;
margin: 1px
}
span:last-child {
grid-column: span 100;
background: tomato
}<div class="box">
<span>aa</span>
<span>b</span>
<span>ccc</span>
<span>d</span>
<span>eeee</span>
</div>
<div class="box">
<span>aa</span>
<span>b</span>
<span>eeee</span>
</div>
<div class="box">
<span>aa</span>
<span>b</span>
<span>aa</span>
<span>b</span>
<span>aa</span>
<span>b</span>
<span>aa</span>
<span>b</span>
<span>aa</span>
<span>b</span>
<span>aa</span>
<span>b</span>
<span>aa</span>
<span>b</span>
<span>aa</span>
<span>b</span>
<span>aa</span>
<span>b</span>
<span>aa</span>
<span>b</span>
<span>aa</span>
<span>b</span>
<span>aa</span>
<span>b</span>
<span>aa</span>
<span>b</span>
<span>aa</span>
<span>b</span>
<span>aa</span>
<span>b</span>
<span>aa</span>
<span>b</span>
<span>aa</span>
<span>b</span>
<span>aa</span>
<span>b</span>
<span>aa</span>
<span>b</span>
<span>aa</span>
<span>b</span>
<span>aa</span>
<span>b</span>
<span>aa</span>
<span>b</span>
<span>break me with so many</span>
<span>b</span>
<span>aa</span>
<span>b</span>
<span>aa</span>
<span>b</span>
<span>eeee</span>
</div>
但不太确定它是否反映了你的现实。
另一种非常类似的选择是:
span {
border: solid;
padding: 1em;
margin: 1px;
min-width: min-content;
}
.box {
display: grid;
grid-auto-flow: column;
}
span:last-child,b {
color: tomato;
grid-column: span 70;
width: auto;
}<div class="box">
<span>aa</span> <span>bbbbb bbbbbbbb bbbbbbbb bbbbbbbb bbbbbbb bbbbbbbb bbbbbbbbb</span>
<span><b>To be tested in fullpage mode too.</b></span>
<span>desd</span>
<span>/</span>
</div>
让我们再做一个没有跨越的,但是在最后一个孩子上有一个伪的
span {
border: solid;
padding: 1em;
margin: 1px;
}
.box {
display: grid;
grid-auto-flow: column;
}
span:last-child {
color: tomato;
/* trick start */
overflow: hidden;
}
span:last-child:after {
content: "";
display: block;
width: 100vw;
}
/* trick end */<div class="box">
<span>aa</span> <span>bbbbb bbbbbbbb bbbbbbbb bbbbbbbb bbbbbbb bbbbbbbb bbbbbbbbb</span>
<span>cccc ccc ccccccc ccc cccccc cccccccccc</span>
<span>desd</span>
<span>last child</span>
</div>
https://stackoverflow.com/questions/58476475
复制相似问题