CSS - 粘性网格 header
CSS - sticky grid header
我正在尝试从网格中的一组单元格创建粘性 header。
这是代码:
.grid {
display: grid;
grid-template-columns: repeat(4, 1fr);
grid-auto-rows: 50px;
height: 150px;
overflow: scroll;
position: relative;
}
.cell {
border: 1px solid black;
}
.header {
display: contents;
position: sticky;
top: 0;
}
.header > .cell {
background-color: red;
}
<div class="grid">
<div class="header">
<div class="cell"></div>
<div class="cell"></div>
<div class="cell"></div>
<div class="cell"></div>
</div>
<div class="cell"></div>
<div class="cell"></div>
<div class="cell"></div>
<div class="cell"></div>
<div class="cell"></div>
<div class="cell"></div>
<div class="cell"></div>
<div class="cell"></div>
<div class="cell"></div>
<div class="cell"></div>
<div class="cell"></div>
<div class="cell"></div>
<div class="cell"></div>
<div class="cell"></div>
<div class="cell"></div>
<div class="cell"></div>
<div class="cell"></div>
<div class="cell"></div>
<div class="cell"></div>
<div class="cell"></div>
<div class="cell"></div>
<div class="cell"></div>
<div class="cell"></div>
<div class="cell"></div>
<div class="cell"></div>
<div class="cell"></div>
<div class="cell"></div>
<div class="cell"></div>
<div class="cell"></div>
<div class="cell"></div>
<div class="cell"></div>
<div class="cell"></div>
</div>
我在这里做错了什么?我怎样才能使红细胞"stick"?
这是解决此类问题的正确方法,还是我应该将 header 分开为不同的组件?
谢谢
实际上,将 sticky
放入单元格,而不是 header
.grid {
display: grid;
grid-template-columns: repeat(4, 1fr);
grid-auto-rows: 50px;
height: 150px;
overflow: scroll;
position: relative;
}
.cell {
border: 1px solid black;
}
.header {
display: contents;
}
.header > .cell {
background-color: red;
position: sticky;
top: 0;
}
<div class="grid">
<div class="header">
<div class="cell"></div>
<div class="cell"></div>
<div class="cell"></div>
<div class="cell"></div>
</div>
<div class="cell"></div>
<div class="cell"></div>
<div class="cell"></div>
<div class="cell"></div>
<div class="cell"></div>
<div class="cell"></div>
<div class="cell"></div>
<div class="cell"></div>
<div class="cell"></div>
<div class="cell"></div>
<div class="cell"></div>
<div class="cell"></div>
<div class="cell"></div>
<div class="cell"></div>
<div class="cell"></div>
<div class="cell"></div>
<div class="cell"></div>
<div class="cell"></div>
<div class="cell"></div>
<div class="cell"></div>
<div class="cell"></div>
<div class="cell"></div>
<div class="cell"></div>
<div class="cell"></div>
<div class="cell"></div>
<div class="cell"></div>
<div class="cell"></div>
<div class="cell"></div>
<div class="cell"></div>
<div class="cell"></div>
<div class="cell"></div>
<div class="cell"></div>
</div>
删除 header div 并为之前位于其中的 div 提供适当的位置。
display:contents
只是让容器 div 表现得好像它不存在一样,所以包装器是不必要的。
.grid {
display: grid;
grid-template-columns: repeat(4, 1fr);
grid-auto-rows: 50px;
height: 100vh;
overflow: scroll;
position: relative;
}
.cell {
border: 1px solid black;
}
.header {
position: sticky;
top: 0;
background-color: red;
}
<div class="grid">
<div class="cell header"></div>
<div class="cell header"></div>
<div class="cell header"></div>
<div class="cell header"></div>
<div class="cell"></div>
<div class="cell"></div>
<div class="cell"></div>
<div class="cell"></div>
<div class="cell"></div>
<div class="cell"></div>
<div class="cell"></div>
<div class="cell"></div>
<div class="cell"></div>
<div class="cell"></div>
<div class="cell"></div>
<div class="cell"></div>
<div class="cell"></div>
<div class="cell"></div>
<div class="cell"></div>
<div class="cell"></div>
<div class="cell"></div>
<div class="cell"></div>
<div class="cell"></div>
<div class="cell"></div>
<div class="cell"></div>
<div class="cell"></div>
<div class="cell"></div>
<div class="cell"></div>
<div class="cell"></div>
<div class="cell"></div>
<div class="cell"></div>
<div class="cell"></div>
<div class="cell"></div>
<div class="cell"></div>
<div class="cell"></div>
<div class="cell"></div>
</div>
我正在尝试从网格中的一组单元格创建粘性 header。
这是代码:
.grid {
display: grid;
grid-template-columns: repeat(4, 1fr);
grid-auto-rows: 50px;
height: 150px;
overflow: scroll;
position: relative;
}
.cell {
border: 1px solid black;
}
.header {
display: contents;
position: sticky;
top: 0;
}
.header > .cell {
background-color: red;
}
<div class="grid">
<div class="header">
<div class="cell"></div>
<div class="cell"></div>
<div class="cell"></div>
<div class="cell"></div>
</div>
<div class="cell"></div>
<div class="cell"></div>
<div class="cell"></div>
<div class="cell"></div>
<div class="cell"></div>
<div class="cell"></div>
<div class="cell"></div>
<div class="cell"></div>
<div class="cell"></div>
<div class="cell"></div>
<div class="cell"></div>
<div class="cell"></div>
<div class="cell"></div>
<div class="cell"></div>
<div class="cell"></div>
<div class="cell"></div>
<div class="cell"></div>
<div class="cell"></div>
<div class="cell"></div>
<div class="cell"></div>
<div class="cell"></div>
<div class="cell"></div>
<div class="cell"></div>
<div class="cell"></div>
<div class="cell"></div>
<div class="cell"></div>
<div class="cell"></div>
<div class="cell"></div>
<div class="cell"></div>
<div class="cell"></div>
<div class="cell"></div>
<div class="cell"></div>
</div>
我在这里做错了什么?我怎样才能使红细胞"stick"? 这是解决此类问题的正确方法,还是我应该将 header 分开为不同的组件? 谢谢
实际上,将 sticky
放入单元格,而不是 header
.grid {
display: grid;
grid-template-columns: repeat(4, 1fr);
grid-auto-rows: 50px;
height: 150px;
overflow: scroll;
position: relative;
}
.cell {
border: 1px solid black;
}
.header {
display: contents;
}
.header > .cell {
background-color: red;
position: sticky;
top: 0;
}
<div class="grid">
<div class="header">
<div class="cell"></div>
<div class="cell"></div>
<div class="cell"></div>
<div class="cell"></div>
</div>
<div class="cell"></div>
<div class="cell"></div>
<div class="cell"></div>
<div class="cell"></div>
<div class="cell"></div>
<div class="cell"></div>
<div class="cell"></div>
<div class="cell"></div>
<div class="cell"></div>
<div class="cell"></div>
<div class="cell"></div>
<div class="cell"></div>
<div class="cell"></div>
<div class="cell"></div>
<div class="cell"></div>
<div class="cell"></div>
<div class="cell"></div>
<div class="cell"></div>
<div class="cell"></div>
<div class="cell"></div>
<div class="cell"></div>
<div class="cell"></div>
<div class="cell"></div>
<div class="cell"></div>
<div class="cell"></div>
<div class="cell"></div>
<div class="cell"></div>
<div class="cell"></div>
<div class="cell"></div>
<div class="cell"></div>
<div class="cell"></div>
<div class="cell"></div>
</div>
删除 header div 并为之前位于其中的 div 提供适当的位置。
display:contents
只是让容器 div 表现得好像它不存在一样,所以包装器是不必要的。
.grid {
display: grid;
grid-template-columns: repeat(4, 1fr);
grid-auto-rows: 50px;
height: 100vh;
overflow: scroll;
position: relative;
}
.cell {
border: 1px solid black;
}
.header {
position: sticky;
top: 0;
background-color: red;
}
<div class="grid">
<div class="cell header"></div>
<div class="cell header"></div>
<div class="cell header"></div>
<div class="cell header"></div>
<div class="cell"></div>
<div class="cell"></div>
<div class="cell"></div>
<div class="cell"></div>
<div class="cell"></div>
<div class="cell"></div>
<div class="cell"></div>
<div class="cell"></div>
<div class="cell"></div>
<div class="cell"></div>
<div class="cell"></div>
<div class="cell"></div>
<div class="cell"></div>
<div class="cell"></div>
<div class="cell"></div>
<div class="cell"></div>
<div class="cell"></div>
<div class="cell"></div>
<div class="cell"></div>
<div class="cell"></div>
<div class="cell"></div>
<div class="cell"></div>
<div class="cell"></div>
<div class="cell"></div>
<div class="cell"></div>
<div class="cell"></div>
<div class="cell"></div>
<div class="cell"></div>
<div class="cell"></div>
<div class="cell"></div>
<div class="cell"></div>
<div class="cell"></div>
</div>