填充网格容器,以便始终填充最后一个网格项目区域
Fill grid container so that last grid item area is always filled
现在我有一个包含 1 行 和 5 列 的网格,我将把它用于导航链接,但有可能在某些页面上网格容器可能没有 5 children.
问题是网格从第一个可用区域开始填充。
有什么方法可以用网格项目填充网格容器,以便始终填充最后一个区域?
例如...
[a][b][c][d][ ]
应该是 [ ][a][b][c][d]
[a][b][c][ ][ ]
应该 [ ][ ][a][b][c]
值得注意的是,我不想反转元素的方向,而是始终保持元素的顺序相同。
是否有简单方法来做到这一点而不修改列数?
因为它只有 5 列,您可以使用 nth-last-child()
为每个元素明确定义它
.grid {
display:grid;
grid-template-columns:repeat(5,1fr);
grid-gap:5px;
margin:5px;
}
.grid > span {
padding:10px;
background:yellow;
}
.grid > span:nth-last-child(1) { grid-column:5; }
.grid > span:nth-last-child(2) { grid-column:4; }
.grid > span:nth-last-child(3) { grid-column:3; }
.grid > span:nth-last-child(4) { grid-column:2; }
/*.grid > span:nth-last-child(5) { grid-column:1; } this one is not needed*/
<div class="grid">
<span>a</span>
<span>b</span>
<span>c</span>
<span>d</span>
</div>
<div class="grid">
<span>a</span>
<span>b</span>
</div>
<div class="grid">
<span>a</span>
<span>b</span>
<span>c</span>
<span>d</span>
<span>e</span>
</div>
或者考虑使用 flexbox 会更容易:
.grid {
display:flex;
margin:5px;
justify-content:flex-end;
}
.grid > span {
padding:10px;
background:yellow;
width:calc(20% - 10px);
margin:5px;
box-sizing:border-box;
}
<div class="grid">
<span>a</span>
<span>b</span>
<span>c</span>
<span>d</span>
</div>
<div class="grid">
<span>a</span>
<span>b</span>
</div>
<div class="grid">
<span>a</span>
<span>b</span>
<span>c</span>
<span>d</span>
<span>e</span>
</div>
关于 CSS 网格的另一个想法,其中的语法可以更直观且更容易扩展到任意数量的列:
.grid {
display:grid;
grid-template-columns:repeat(var(--n,5),1fr);
grid-gap:5px;
margin:5px;
}
.grid > span {
padding:10px;
background:yellow;
}
.grid > span:nth-last-child(1) { grid-column-end:-1; }
.grid > span:nth-last-child(2) { grid-column-end:-2; }
.grid > span:nth-last-child(3) { grid-column-end:-3; }
.grid > span:nth-last-child(4) { grid-column-end:-4; }
.grid > span:nth-last-child(5) { grid-column-end:-5; }
.grid > span:nth-last-child(6) { grid-column-end:-6; }
/*.grid > span:nth-last-child(n) { grid-column-end:-n; }
and so on ...
*/
<div class="grid">
<span>a</span>
<span>b</span>
<span>c</span>
</div>
<div class="grid" style="--n:4">
<span>a</span>
<span>b</span>
<span>c</span>
</div>
<div class="grid" style="--n:3">
<span>a</span>
<span>b</span>
</div>
<div class="grid" style="--n:6">
<span>a</span>
<span>b</span>
<span>c</span>
<span>d</span>
<span>e</span>
</div>
现在我有一个包含 1 行 和 5 列 的网格,我将把它用于导航链接,但有可能在某些页面上网格容器可能没有 5 children.
问题是网格从第一个可用区域开始填充。
有什么方法可以用网格项目填充网格容器,以便始终填充最后一个区域?
例如...
[a][b][c][d][ ]
应该是 [ ][a][b][c][d]
[a][b][c][ ][ ]
应该 [ ][ ][a][b][c]
值得注意的是,我不想反转元素的方向,而是始终保持元素的顺序相同。
是否有简单方法来做到这一点而不修改列数?
因为它只有 5 列,您可以使用 nth-last-child()
.grid {
display:grid;
grid-template-columns:repeat(5,1fr);
grid-gap:5px;
margin:5px;
}
.grid > span {
padding:10px;
background:yellow;
}
.grid > span:nth-last-child(1) { grid-column:5; }
.grid > span:nth-last-child(2) { grid-column:4; }
.grid > span:nth-last-child(3) { grid-column:3; }
.grid > span:nth-last-child(4) { grid-column:2; }
/*.grid > span:nth-last-child(5) { grid-column:1; } this one is not needed*/
<div class="grid">
<span>a</span>
<span>b</span>
<span>c</span>
<span>d</span>
</div>
<div class="grid">
<span>a</span>
<span>b</span>
</div>
<div class="grid">
<span>a</span>
<span>b</span>
<span>c</span>
<span>d</span>
<span>e</span>
</div>
或者考虑使用 flexbox 会更容易:
.grid {
display:flex;
margin:5px;
justify-content:flex-end;
}
.grid > span {
padding:10px;
background:yellow;
width:calc(20% - 10px);
margin:5px;
box-sizing:border-box;
}
<div class="grid">
<span>a</span>
<span>b</span>
<span>c</span>
<span>d</span>
</div>
<div class="grid">
<span>a</span>
<span>b</span>
</div>
<div class="grid">
<span>a</span>
<span>b</span>
<span>c</span>
<span>d</span>
<span>e</span>
</div>
关于 CSS 网格的另一个想法,其中的语法可以更直观且更容易扩展到任意数量的列:
.grid {
display:grid;
grid-template-columns:repeat(var(--n,5),1fr);
grid-gap:5px;
margin:5px;
}
.grid > span {
padding:10px;
background:yellow;
}
.grid > span:nth-last-child(1) { grid-column-end:-1; }
.grid > span:nth-last-child(2) { grid-column-end:-2; }
.grid > span:nth-last-child(3) { grid-column-end:-3; }
.grid > span:nth-last-child(4) { grid-column-end:-4; }
.grid > span:nth-last-child(5) { grid-column-end:-5; }
.grid > span:nth-last-child(6) { grid-column-end:-6; }
/*.grid > span:nth-last-child(n) { grid-column-end:-n; }
and so on ...
*/
<div class="grid">
<span>a</span>
<span>b</span>
<span>c</span>
</div>
<div class="grid" style="--n:4">
<span>a</span>
<span>b</span>
<span>c</span>
</div>
<div class="grid" style="--n:3">
<span>a</span>
<span>b</span>
</div>
<div class="grid" style="--n:6">
<span>a</span>
<span>b</span>
<span>c</span>
<span>d</span>
<span>e</span>
</div>