自动填充缺口
约 532 字大约 2 分钟
2025-03-29
至此,除了我们明确定位过的项目,其他项目一般都会被网格自动处理并且保持它们在 DOM 中的顺序,这正是一般情况下我们想要的结果。比如你设计了一个表单,当然不想让标签和别的表单元素因为要填充缺口而使表单变得前后错乱。不过有时候要布局的项目并没有逻辑顺序,所以我们希望能够创建一种没有缺口的布局。
实现这个效果的方法是在网格容器的 grid-auto-flow
属性值中加入 dense
关键字。这和此前把网格流向改为列优先时设置值为 column
的是同一个属性,所以在列优先流向时,要设置 2 个值 grid-auto-flow: column dense
。
经过以上设置,网格就会回填缺口,以前网格会遗留下缺口,而现在它会为此前的缺口找到适合它的项目,然后把项目从 DOM 中拿出来再放到缺口中去。对于已经重新指定过顺序的网格,这样做不会改变项目之间原有的逻辑顺序,比如对于 Tab 键的顺序仍然与文档的顺序相同。在后面的文章中我们会讨论网格布局潜在的可用性问题,此外你应该意识到,使用这个功能会让 DOM 中看到的顺序与实际显示的顺序不一致,它们两者之间的联系会被打破。
<template>
<div class="wrapper">
<div>One</div>
<div>Two</div>
<div>Three</div>
<div>Four</div>
<div>Five</div>
<div>Six</div>
<div>Seven</div>
<div>Eight</div>
<div>Nine</div>
<div>Ten</div>
<div>Eleven</div>
<div>Twelve</div>
</div>
</template>
<style scoped>
div {
text-align: center;
}
.wrapper div {
background-color: #ffd8a8;
}
.wrapper div:nth-child(4n + 1) {
grid-column-end: span 2;
grid-row-end: span 2;
background-color: #ffa94d;
}
.wrapper div:nth-child(2) {
grid-column: 3;
grid-row: 2 / 4;
}
.wrapper div:nth-child(5) {
grid-column: 1 / 3;
grid-row: 1 / 3;
}
.wrapper {
display: grid;
grid-template-columns: repeat(4, 1fr);
grid-auto-rows: 100px;
gap: 10px;
grid-auto-flow: dense;
background: #f0f0f0;
}
</style>
更新日志
2025/8/24 08:17
查看所有更新日志
e7112
-1于