position:sticky 无法让 top 和 left 都起作用
position:sticky can't get both top and left to work
我正在尝试创建一个具有水平和垂直、粘性 header 和第一列的网格。
我用它来获得 header 粘性
.thead {
position: sticky;
top: 0px;
}
我用它来让第一列变粘。
div.tbody>div.tr>div:nth-child(1) {
position: sticky;
left: 0;
}
.thead>div>div:nth-child(1){
left:0;
top:0;
position: sticky;
}
但是我得到一个奇怪的滚动行为,即第一列标题粘在左侧而不是顶部。
这是我使用的代码。我怎样才能让它工作,以便第一列 header 既粘在左边又粘在顶部?
.fixed_header {
width: 300px;
height: 300px;
overflow: scroll;
}
.td,
.th {
background-color: antiquewhite;
width: 100px;
float: left;
}
.thead {
position: sticky;
top: 0px;
}
.th {
font-weight: bold;
}
.tr {
display: block;
clear: both;
width: 500px;
}
.thead>div>div:nth-child(1) {
left: 0;
top: 0;
position: sticky;
}
div.tbody>div.tr>div:nth-child(1) {
position: sticky;
left: 0;
}
<div class="fixed_header">
<div class="thead">
<div class="tr">
<div class="th">Col 1</div>
<div class="th">Col 2</div>
<div class="th">Col 3</div>
<div class="th">Col 4</div>
<div class="th">Col 5</div>
</div>
</div>
<div class="tbody">
<div class="tr">
<div class="td">row 1-0</div>
<div class="td">row 1-1</div>
<div class="td">row 1-2</div>
<div class="td">row 1-3</div>
<div class="td">row 1-4</div>
</div>
<div class="tr">
<div class="td">row 2-0</div>
<div class="td">row 2-1</div>
<div class="td">row 2-2</div>
<div class="td">row 2-3</div>
<div class="td">row 2-4</div>
</div>
<div class="tr">
<div class="td">row 3-0</div>
<div class="td">row 3-1</div>
<div class="td">row 3-2</div>
<div class="td">row 3-3</div>
<div class="td">row 3-4</div>
</div>
<div class="tr">
<div class="td">row 4-0</div>
<div class="td">row 4-1</div>
<div class="td">row 4-2</div>
<div class="td">row 4-3</div>
<div class="td">row 4-4</div>
</div>
<div class="tr">
<div class="td">row 5-0</div>
<div class="td">row 5-1</div>
<div class="td">row 5-2</div>
<div class="td">row 5-3</div>
<div class="td">row 5-4</div>
</div>
<div class="tr">
<div class="td">row 6-0</div>
<div class="td">row 6-1</div>
<div class="td">row 6-2</div>
<div class="td">row 6-3</div>
<div class="td">row 6-4</div>
</div>
<div class="tr">
<div class="td">row 7-0</div>
<div class="td">row 7-1</div>
<div class="td">row 7-2</div>
<div class="td">row 7-3</div>
<div class="td">row 7-4</div>
</div>
<div class="tr">
<div class="td">row 1-0</div>
<div class="td">row 1-1</div>
<div class="td">row 1-2</div>
<div class="td">row 1-3</div>
<div class="td">row 1-4</div>
</div>
<div class="tr">
<div class="td">row 2-0</div>
<div class="td">row 2-1</div>
<div class="td">row 2-2</div>
<div class="td">row 2-3</div>
<div class="td">row 2-4</div>
</div>
<div class="tr">
<div class="td">row 3-0</div>
<div class="td">row 3-1</div>
<div class="td">row 3-2</div>
<div class="td">row 3-3</div>
<div class="td">row 3-4</div>
</div>
<div class="tr">
<div class="td">row 4-0</div>
<div class="td">row 4-1</div>
<div class="td">row 4-2</div>
<div class="td">row 4-3</div>
<div class="td">row 4-4</div>
</div>
<div class="tr">
<div class="td">row 5-0</div>
<div class="td">row 5-1</div>
<div class="td">row 5-2</div>
<div class="td">row 5-3</div>
<div class="td">row 5-4</div>
</div>
<div class="tr">
<div class="td">row 6-0</div>
<div class="td">row 6-1</div>
<div class="td">row 6-2</div>
<div class="td">row 6-3</div>
<div class="td">row 6-4</div>
</div>
<div class="tr">
<div class="td">row 7-0</div>
<div class="td">row 7-1</div>
<div class="td">row 7-2</div>
<div class="td">row 7-3</div>
<div class="td">row 7-4</div>
</div>
<div class="tr">
<div class="td">row 1-0</div>
<div class="td">row 1-1</div>
<div class="td">row 1-2</div>
<div class="td">row 1-3</div>
<div class="td">row 1-4</div>
</div>
<div class="tr">
<div class="td">row 2-0</div>
<div class="td">row 2-1</div>
<div class="td">row 2-2</div>
<div class="td">row 2-3</div>
<div class="td">row 2-4</div>
</div>
<div class="tr">
<div class="td">row 3-0</div>
<div class="td">row 3-1</div>
<div class="td">row 3-2</div>
<div class="td">row 3-3</div>
<div class="td">row 3-4</div>
</div>
<div class="tr">
<div class="td">row 4-0</div>
<div class="td">row 4-1</div>
<div class="td">row 4-2</div>
<div class="td">row 4-3</div>
<div class="td">row 4-4</div>
</div>
<div class="tr">
<div class="td">row 5-0</div>
<div class="td">row 5-1</div>
<div class="td">row 5-2</div>
<div class="td">row 5-3</div>
<div class="td">row 5-4</div>
</div>
<div class="tr">
<div class="td">row 6-0</div>
<div class="td">row 6-1</div>
<div class="td">row 6-2</div>
<div class="td">row 6-3</div>
<div class="td">row 6-4</div>
</div>
<div class="tr">
<div class="td">row 7-0</div>
<div class="td">row 7-1</div>
<div class="td">row 7-2</div>
<div class="td">row 7-3</div>
<div class="td">row 7-4</div>
</div>
</div>
</div>
删除这两个地方的"position: sticky;",现在可以正常使用了。
.thead>div>div:nth-child(1) {
left: 0;
top: 0;
}
div.tbody>div.tr>div:nth-child(1) {
left: 0;
此处修改代码 -
.fixed_header {
width: 300px;
height: 300px;
overflow: scroll;
}
.td,
.th {
background-color: antiquewhite;
width: 100px;
float: left;
}
.thead {
position: sticky;
top: 0px;
}
.th {
font-weight: bold;
}
.tr {
display: block;
clear: both;
width: 500px;
}
.thead>div>div:nth-child(1) {
left: 0;
top: 0;
}
div.tbody>div.tr>div:nth-child(1) {
left: 0;
<div class="fixed_header">
<div class="thead">
<div class="tr">
<div class="th">Col 1</div>
<div class="th">Col 2</div>
<div class="th">Col 3</div>
<div class="th">Col 4</div>
<div class="th">Col 5</div>
</div>
</div>
<div class="tbody">
<div class="tr">
<div class="td">row 1-0</div>
<div class="td">row 1-1</div>
<div class="td">row 1-2</div>
<div class="td">row 1-3</div>
<div class="td">row 1-4</div>
</div>
<div class="tr">
<div class="td">row 2-0</div>
<div class="td">row 2-1</div>
<div class="td">row 2-2</div>
<div class="td">row 2-3</div>
<div class="td">row 2-4</div>
</div>
<div class="tr">
<div class="td">row 3-0</div>
<div class="td">row 3-1</div>
<div class="td">row 3-2</div>
<div class="td">row 3-3</div>
<div class="td">row 3-4</div>
</div>
<div class="tr">
<div class="td">row 4-0</div>
<div class="td">row 4-1</div>
<div class="td">row 4-2</div>
<div class="td">row 4-3</div>
<div class="td">row 4-4</div>
</div>
<div class="tr">
<div class="td">row 5-0</div>
<div class="td">row 5-1</div>
<div class="td">row 5-2</div>
<div class="td">row 5-3</div>
<div class="td">row 5-4</div>
</div>
<div class="tr">
<div class="td">row 6-0</div>
<div class="td">row 6-1</div>
<div class="td">row 6-2</div>
<div class="td">row 6-3</div>
<div class="td">row 6-4</div>
</div>
<div class="tr">
<div class="td">row 7-0</div>
<div class="td">row 7-1</div>
<div class="td">row 7-2</div>
<div class="td">row 7-3</div>
<div class="td">row 7-4</div>
</div>
<div class="tr">
<div class="td">row 1-0</div>
<div class="td">row 1-1</div>
<div class="td">row 1-2</div>
<div class="td">row 1-3</div>
<div class="td">row 1-4</div>
</div>
<div class="tr">
<div class="td">row 2-0</div>
<div class="td">row 2-1</div>
<div class="td">row 2-2</div>
<div class="td">row 2-3</div>
<div class="td">row 2-4</div>
</div>
<div class="tr">
<div class="td">row 3-0</div>
<div class="td">row 3-1</div>
<div class="td">row 3-2</div>
<div class="td">row 3-3</div>
<div class="td">row 3-4</div>
</div>
<div class="tr">
<div class="td">row 4-0</div>
<div class="td">row 4-1</div>
<div class="td">row 4-2</div>
<div class="td">row 4-3</div>
<div class="td">row 4-4</div>
</div>
<div class="tr">
<div class="td">row 5-0</div>
<div class="td">row 5-1</div>
<div class="td">row 5-2</div>
<div class="td">row 5-3</div>
<div class="td">row 5-4</div>
</div>
<div class="tr">
<div class="td">row 6-0</div>
<div class="td">row 6-1</div>
<div class="td">row 6-2</div>
<div class="td">row 6-3</div>
<div class="td">row 6-4</div>
</div>
<div class="tr">
<div class="td">row 7-0</div>
<div class="td">row 7-1</div>
<div class="td">row 7-2</div>
<div class="td">row 7-3</div>
<div class="td">row 7-4</div>
</div>
<div class="tr">
<div class="td">row 1-0</div>
<div class="td">row 1-1</div>
<div class="td">row 1-2</div>
<div class="td">row 1-3</div>
<div class="td">row 1-4</div>
</div>
<div class="tr">
<div class="td">row 2-0</div>
<div class="td">row 2-1</div>
<div class="td">row 2-2</div>
<div class="td">row 2-3</div>
<div class="td">row 2-4</div>
</div>
<div class="tr">
<div class="td">row 3-0</div>
<div class="td">row 3-1</div>
<div class="td">row 3-2</div>
<div class="td">row 3-3</div>
<div class="td">row 3-4</div>
</div>
<div class="tr">
<div class="td">row 4-0</div>
<div class="td">row 4-1</div>
<div class="td">row 4-2</div>
<div class="td">row 4-3</div>
<div class="td">row 4-4</div>
</div>
<div class="tr">
<div class="td">row 5-0</div>
<div class="td">row 5-1</div>
<div class="td">row 5-2</div>
<div class="td">row 5-3</div>
<div class="td">row 5-4</div>
</div>
<div class="tr">
<div class="td">row 6-0</div>
<div class="td">row 6-1</div>
<div class="td">row 6-2</div>
<div class="td">row 6-3</div>
<div class="td">row 6-4</div>
</div>
<div class="tr">
<div class="td">row 7-0</div>
<div class="td">row 7-1</div>
<div class="td">row 7-2</div>
<div class="td">row 7-3</div>
<div class="td">row 7-4</div>
</div>
</div>
</div>
也许使用不同的结构并只滚动内部 rows/columns。
添加了 JQuery 脚本以使其工作。
$( ".fixed_header" ).scroll(function() {
var fixedHeader = $( ".fixed_header" );
$( ".aaa" ).scrollTop(fixedHeader.scrollTop());
});
.fixed_header {
width: 300px;
height: 300px;
overflow: scroll;
display: flex;
flex-direction: column;
}
.td,
.th {
background-color: antiquewhite;
width: 100px;
float: left;
}
.thead {
position: sticky;
top: 0px;
}
.th {
font-weight: bold;
}
.tr {
display: block;
clear: both;
width: 500px;
}
.thead>div>div:nth-child(1) {
left: 0;
top: 0;
}
.content{
position: relative;
}
.sticky-column{
width: 100px;
height: 280px;
position: absolute;
top: 0px;
left: 0px;
display: flex;
flex-direction: column;
}
.data{
margin-left: 100px;
}
.aaa{
overflow: hidden;
height: 2800px;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div class="content">
<div class="sticky-column">
<div>
<div class="th">Col 1</div>
</div>
<div class="aaa">
<div class="td">row 1-0</div>
<div class="td">row 2-0</div>
<div class="td">row 3-0</div>
<div class="td">row 4-0</div>
<div class="td">row 5-0</div>
<div class="td">row 6-0</div>
<div class="td">row 7-0</div>
<div class="td">row 1-0</div>
<div class="td">row 2-0</div>
<div class="td">row 3-0</div>
<div class="td">row 4-0</div>
<div class="td">row 5-0</div>
<div class="td">row 6-0</div>
<div class="td">row 7-0</div>
<div class="td">row 1-0</div>
<div class="td">row 2-0</div>
<div class="td">row 3-0</div>
<div class="td">row 4-0</div>
<div class="td">row 5-0</div>
<div class="td">row 6-0</div>
<div class="td">row 7-0</div>
</div>
</div>
<div class="data">
<div class="fixed_header">
<div class="thead">
<div class="tr">
<div class="th">Col 2</div>
<div class="th">Col 3</div>
<div class="th">Col 4</div>
<div class="th">Col 5</div>
</div>
</div>
<div class="tbody">
<div class="tr">
<div class="td">row 1-1</div>
<div class="td">row 1-2</div>
<div class="td">row 1-3</div>
<div class="td">row 1-4</div>
</div>
<div class="tr">
<div class="td">row 2-1</div>
<div class="td">row 2-2</div>
<div class="td">row 2-3</div>
<div class="td">row 2-4</div>
</div>
<div class="tr">
<div class="td">row 3-1</div>
<div class="td">row 3-2</div>
<div class="td">row 3-3</div>
<div class="td">row 3-4</div>
</div>
<div class="tr">
<div class="td">row 4-1</div>
<div class="td">row 4-2</div>
<div class="td">row 4-3</div>
<div class="td">row 4-4</div>
</div>
<div class="tr">
<div class="td">row 5-1</div>
<div class="td">row 5-2</div>
<div class="td">row 5-3</div>
<div class="td">row 5-4</div>
</div>
<div class="tr">
<div class="td">row 6-1</div>
<div class="td">row 6-2</div>
<div class="td">row 6-3</div>
<div class="td">row 6-4</div>
</div>
<div class="tr">
<div class="td">row 7-1</div>
<div class="td">row 7-2</div>
<div class="td">row 7-3</div>
<div class="td">row 7-4</div>
</div>
<div class="tr">
<div class="td">row 1-1</div>
<div class="td">row 1-2</div>
<div class="td">row 1-3</div>
<div class="td">row 1-4</div>
</div>
<div class="tr">
<div class="td">row 2-1</div>
<div class="td">row 2-2</div>
<div class="td">row 2-3</div>
<div class="td">row 2-4</div>
</div>
<div class="tr">
<div class="td">row 3-1</div>
<div class="td">row 3-2</div>
<div class="td">row 3-3</div>
<div class="td">row 3-4</div>
</div>
<div class="tr">
<div class="td">row 4-1</div>
<div class="td">row 4-2</div>
<div class="td">row 4-3</div>
<div class="td">row 4-4</div>
</div>
<div class="tr">
<div class="td">row 5-1</div>
<div class="td">row 5-2</div>
<div class="td">row 5-3</div>
<div class="td">row 5-4</div>
</div>
<div class="tr">
<div class="td">row 6-1</div>
<div class="td">row 6-2</div>
<div class="td">row 6-3</div>
<div class="td">row 6-4</div>
</div>
<div class="tr">
<div class="td">row 7-1</div>
<div class="td">row 7-2</div>
<div class="td">row 7-3</div>
<div class="td">row 7-4</div>
</div>
<div class="tr">
<div class="td">row 1-1</div>
<div class="td">row 1-2</div>
<div class="td">row 1-3</div>
<div class="td">row 1-4</div>
</div>
<div class="tr">
<div class="td">row 2-1</div>
<div class="td">row 2-2</div>
<div class="td">row 2-3</div>
<div class="td">row 2-4</div>
</div>
<div class="tr">
<div class="td">row 3-1</div>
<div class="td">row 3-2</div>
<div class="td">row 3-3</div>
<div class="td">row 3-4</div>
</div>
<div class="tr">
<div class="td">row 4-1</div>
<div class="td">row 4-2</div>
<div class="td">row 4-3</div>
<div class="td">row 4-4</div>
</div>
<div class="tr">
<div class="td">row 5-1</div>
<div class="td">row 5-2</div>
<div class="td">row 5-3</div>
<div class="td">row 5-4</div>
</div>
<div class="tr">
<div class="td">row 6-1</div>
<div class="td">row 6-2</div>
<div class="td">row 6-3</div>
<div class="td">row 6-4</div>
</div>
<div class="tr">
<div class="td">row 7-1</div>
<div class="td">row 7-2</div>
<div class="td">row 7-3</div>
<div class="td">row 7-4</div>
</div>
</div>
</div>
</div>
</div>
最终我能够通过将 thead
z-index 设为 1 来解决这个问题 - 没有任何 javascript
就解决了这个问题
.fixed_header {
width: 300px;
height: 300px;
overflow: scroll;
}
.td,
.th {
background-color: antiquewhite;
width: 100px;
float: left;
}
.thead {
position: sticky;
top: 0px;
z-index:1;
}
.th {
font-weight: bold;
}
.tr {
display: block;
clear: both;
width: 500px;
}
.thead>div>div:nth-child(1) {
left: 0;
top: 0;
position: sticky;
}
div.tbody>div.tr>div:nth-child(1) {
position: sticky;
left: 0;
}
<div class="fixed_header">
<div class="thead">
<div class="tr">
<div class="th">Col 1</div>
<div class="th">Col 2</div>
<div class="th">Col 3</div>
<div class="th">Col 4</div>
<div class="th">Col 5</div>
</div>
</div>
<div class="tbody">
<div class="tr">
<div class="td">row 1-0</div>
<div class="td">row 1-1</div>
<div class="td">row 1-2</div>
<div class="td">row 1-3</div>
<div class="td">row 1-4</div>
</div>
<div class="tr">
<div class="td">row 2-0</div>
<div class="td">row 2-1</div>
<div class="td">row 2-2</div>
<div class="td">row 2-3</div>
<div class="td">row 2-4</div>
</div>
<div class="tr">
<div class="td">row 3-0</div>
<div class="td">row 3-1</div>
<div class="td">row 3-2</div>
<div class="td">row 3-3</div>
<div class="td">row 3-4</div>
</div>
<div class="tr">
<div class="td">row 4-0</div>
<div class="td">row 4-1</div>
<div class="td">row 4-2</div>
<div class="td">row 4-3</div>
<div class="td">row 4-4</div>
</div>
<div class="tr">
<div class="td">row 5-0</div>
<div class="td">row 5-1</div>
<div class="td">row 5-2</div>
<div class="td">row 5-3</div>
<div class="td">row 5-4</div>
</div>
<div class="tr">
<div class="td">row 6-0</div>
<div class="td">row 6-1</div>
<div class="td">row 6-2</div>
<div class="td">row 6-3</div>
<div class="td">row 6-4</div>
</div>
<div class="tr">
<div class="td">row 7-0</div>
<div class="td">row 7-1</div>
<div class="td">row 7-2</div>
<div class="td">row 7-3</div>
<div class="td">row 7-4</div>
</div>
<div class="tr">
<div class="td">row 1-0</div>
<div class="td">row 1-1</div>
<div class="td">row 1-2</div>
<div class="td">row 1-3</div>
<div class="td">row 1-4</div>
</div>
<div class="tr">
<div class="td">row 2-0</div>
<div class="td">row 2-1</div>
<div class="td">row 2-2</div>
<div class="td">row 2-3</div>
<div class="td">row 2-4</div>
</div>
<div class="tr">
<div class="td">row 3-0</div>
<div class="td">row 3-1</div>
<div class="td">row 3-2</div>
<div class="td">row 3-3</div>
<div class="td">row 3-4</div>
</div>
<div class="tr">
<div class="td">row 4-0</div>
<div class="td">row 4-1</div>
<div class="td">row 4-2</div>
<div class="td">row 4-3</div>
<div class="td">row 4-4</div>
</div>
<div class="tr">
<div class="td">row 5-0</div>
<div class="td">row 5-1</div>
<div class="td">row 5-2</div>
<div class="td">row 5-3</div>
<div class="td">row 5-4</div>
</div>
<div class="tr">
<div class="td">row 6-0</div>
<div class="td">row 6-1</div>
<div class="td">row 6-2</div>
<div class="td">row 6-3</div>
<div class="td">row 6-4</div>
</div>
<div class="tr">
<div class="td">row 7-0</div>
<div class="td">row 7-1</div>
<div class="td">row 7-2</div>
<div class="td">row 7-3</div>
<div class="td">row 7-4</div>
</div>
<div class="tr">
<div class="td">row 1-0</div>
<div class="td">row 1-1</div>
<div class="td">row 1-2</div>
<div class="td">row 1-3</div>
<div class="td">row 1-4</div>
</div>
<div class="tr">
<div class="td">row 2-0</div>
<div class="td">row 2-1</div>
<div class="td">row 2-2</div>
<div class="td">row 2-3</div>
<div class="td">row 2-4</div>
</div>
<div class="tr">
<div class="td">row 3-0</div>
<div class="td">row 3-1</div>
<div class="td">row 3-2</div>
<div class="td">row 3-3</div>
<div class="td">row 3-4</div>
</div>
<div class="tr">
<div class="td">row 4-0</div>
<div class="td">row 4-1</div>
<div class="td">row 4-2</div>
<div class="td">row 4-3</div>
<div class="td">row 4-4</div>
</div>
<div class="tr">
<div class="td">row 5-0</div>
<div class="td">row 5-1</div>
<div class="td">row 5-2</div>
<div class="td">row 5-3</div>
<div class="td">row 5-4</div>
</div>
<div class="tr">
<div class="td">row 6-0</div>
<div class="td">row 6-1</div>
<div class="td">row 6-2</div>
<div class="td">row 6-3</div>
<div class="td">row 6-4</div>
</div>
<div class="tr">
<div class="td">row 7-0</div>
<div class="td">row 7-1</div>
<div class="td">row 7-2</div>
<div class="td">row 7-3</div>
<div class="td">row 7-4</div>
</div>
</div>
</div>
我正在尝试创建一个具有水平和垂直、粘性 header 和第一列的网格。
我用它来获得 header 粘性
.thead {
position: sticky;
top: 0px;
}
我用它来让第一列变粘。
div.tbody>div.tr>div:nth-child(1) {
position: sticky;
left: 0;
}
.thead>div>div:nth-child(1){
left:0;
top:0;
position: sticky;
}
但是我得到一个奇怪的滚动行为,即第一列标题粘在左侧而不是顶部。
这是我使用的代码。我怎样才能让它工作,以便第一列 header 既粘在左边又粘在顶部?
.fixed_header {
width: 300px;
height: 300px;
overflow: scroll;
}
.td,
.th {
background-color: antiquewhite;
width: 100px;
float: left;
}
.thead {
position: sticky;
top: 0px;
}
.th {
font-weight: bold;
}
.tr {
display: block;
clear: both;
width: 500px;
}
.thead>div>div:nth-child(1) {
left: 0;
top: 0;
position: sticky;
}
div.tbody>div.tr>div:nth-child(1) {
position: sticky;
left: 0;
}
<div class="fixed_header">
<div class="thead">
<div class="tr">
<div class="th">Col 1</div>
<div class="th">Col 2</div>
<div class="th">Col 3</div>
<div class="th">Col 4</div>
<div class="th">Col 5</div>
</div>
</div>
<div class="tbody">
<div class="tr">
<div class="td">row 1-0</div>
<div class="td">row 1-1</div>
<div class="td">row 1-2</div>
<div class="td">row 1-3</div>
<div class="td">row 1-4</div>
</div>
<div class="tr">
<div class="td">row 2-0</div>
<div class="td">row 2-1</div>
<div class="td">row 2-2</div>
<div class="td">row 2-3</div>
<div class="td">row 2-4</div>
</div>
<div class="tr">
<div class="td">row 3-0</div>
<div class="td">row 3-1</div>
<div class="td">row 3-2</div>
<div class="td">row 3-3</div>
<div class="td">row 3-4</div>
</div>
<div class="tr">
<div class="td">row 4-0</div>
<div class="td">row 4-1</div>
<div class="td">row 4-2</div>
<div class="td">row 4-3</div>
<div class="td">row 4-4</div>
</div>
<div class="tr">
<div class="td">row 5-0</div>
<div class="td">row 5-1</div>
<div class="td">row 5-2</div>
<div class="td">row 5-3</div>
<div class="td">row 5-4</div>
</div>
<div class="tr">
<div class="td">row 6-0</div>
<div class="td">row 6-1</div>
<div class="td">row 6-2</div>
<div class="td">row 6-3</div>
<div class="td">row 6-4</div>
</div>
<div class="tr">
<div class="td">row 7-0</div>
<div class="td">row 7-1</div>
<div class="td">row 7-2</div>
<div class="td">row 7-3</div>
<div class="td">row 7-4</div>
</div>
<div class="tr">
<div class="td">row 1-0</div>
<div class="td">row 1-1</div>
<div class="td">row 1-2</div>
<div class="td">row 1-3</div>
<div class="td">row 1-4</div>
</div>
<div class="tr">
<div class="td">row 2-0</div>
<div class="td">row 2-1</div>
<div class="td">row 2-2</div>
<div class="td">row 2-3</div>
<div class="td">row 2-4</div>
</div>
<div class="tr">
<div class="td">row 3-0</div>
<div class="td">row 3-1</div>
<div class="td">row 3-2</div>
<div class="td">row 3-3</div>
<div class="td">row 3-4</div>
</div>
<div class="tr">
<div class="td">row 4-0</div>
<div class="td">row 4-1</div>
<div class="td">row 4-2</div>
<div class="td">row 4-3</div>
<div class="td">row 4-4</div>
</div>
<div class="tr">
<div class="td">row 5-0</div>
<div class="td">row 5-1</div>
<div class="td">row 5-2</div>
<div class="td">row 5-3</div>
<div class="td">row 5-4</div>
</div>
<div class="tr">
<div class="td">row 6-0</div>
<div class="td">row 6-1</div>
<div class="td">row 6-2</div>
<div class="td">row 6-3</div>
<div class="td">row 6-4</div>
</div>
<div class="tr">
<div class="td">row 7-0</div>
<div class="td">row 7-1</div>
<div class="td">row 7-2</div>
<div class="td">row 7-3</div>
<div class="td">row 7-4</div>
</div>
<div class="tr">
<div class="td">row 1-0</div>
<div class="td">row 1-1</div>
<div class="td">row 1-2</div>
<div class="td">row 1-3</div>
<div class="td">row 1-4</div>
</div>
<div class="tr">
<div class="td">row 2-0</div>
<div class="td">row 2-1</div>
<div class="td">row 2-2</div>
<div class="td">row 2-3</div>
<div class="td">row 2-4</div>
</div>
<div class="tr">
<div class="td">row 3-0</div>
<div class="td">row 3-1</div>
<div class="td">row 3-2</div>
<div class="td">row 3-3</div>
<div class="td">row 3-4</div>
</div>
<div class="tr">
<div class="td">row 4-0</div>
<div class="td">row 4-1</div>
<div class="td">row 4-2</div>
<div class="td">row 4-3</div>
<div class="td">row 4-4</div>
</div>
<div class="tr">
<div class="td">row 5-0</div>
<div class="td">row 5-1</div>
<div class="td">row 5-2</div>
<div class="td">row 5-3</div>
<div class="td">row 5-4</div>
</div>
<div class="tr">
<div class="td">row 6-0</div>
<div class="td">row 6-1</div>
<div class="td">row 6-2</div>
<div class="td">row 6-3</div>
<div class="td">row 6-4</div>
</div>
<div class="tr">
<div class="td">row 7-0</div>
<div class="td">row 7-1</div>
<div class="td">row 7-2</div>
<div class="td">row 7-3</div>
<div class="td">row 7-4</div>
</div>
</div>
</div>
删除这两个地方的"position: sticky;",现在可以正常使用了。
.thead>div>div:nth-child(1) {
left: 0;
top: 0;
}
div.tbody>div.tr>div:nth-child(1) {
left: 0;
此处修改代码 -
.fixed_header {
width: 300px;
height: 300px;
overflow: scroll;
}
.td,
.th {
background-color: antiquewhite;
width: 100px;
float: left;
}
.thead {
position: sticky;
top: 0px;
}
.th {
font-weight: bold;
}
.tr {
display: block;
clear: both;
width: 500px;
}
.thead>div>div:nth-child(1) {
left: 0;
top: 0;
}
div.tbody>div.tr>div:nth-child(1) {
left: 0;
<div class="fixed_header">
<div class="thead">
<div class="tr">
<div class="th">Col 1</div>
<div class="th">Col 2</div>
<div class="th">Col 3</div>
<div class="th">Col 4</div>
<div class="th">Col 5</div>
</div>
</div>
<div class="tbody">
<div class="tr">
<div class="td">row 1-0</div>
<div class="td">row 1-1</div>
<div class="td">row 1-2</div>
<div class="td">row 1-3</div>
<div class="td">row 1-4</div>
</div>
<div class="tr">
<div class="td">row 2-0</div>
<div class="td">row 2-1</div>
<div class="td">row 2-2</div>
<div class="td">row 2-3</div>
<div class="td">row 2-4</div>
</div>
<div class="tr">
<div class="td">row 3-0</div>
<div class="td">row 3-1</div>
<div class="td">row 3-2</div>
<div class="td">row 3-3</div>
<div class="td">row 3-4</div>
</div>
<div class="tr">
<div class="td">row 4-0</div>
<div class="td">row 4-1</div>
<div class="td">row 4-2</div>
<div class="td">row 4-3</div>
<div class="td">row 4-4</div>
</div>
<div class="tr">
<div class="td">row 5-0</div>
<div class="td">row 5-1</div>
<div class="td">row 5-2</div>
<div class="td">row 5-3</div>
<div class="td">row 5-4</div>
</div>
<div class="tr">
<div class="td">row 6-0</div>
<div class="td">row 6-1</div>
<div class="td">row 6-2</div>
<div class="td">row 6-3</div>
<div class="td">row 6-4</div>
</div>
<div class="tr">
<div class="td">row 7-0</div>
<div class="td">row 7-1</div>
<div class="td">row 7-2</div>
<div class="td">row 7-3</div>
<div class="td">row 7-4</div>
</div>
<div class="tr">
<div class="td">row 1-0</div>
<div class="td">row 1-1</div>
<div class="td">row 1-2</div>
<div class="td">row 1-3</div>
<div class="td">row 1-4</div>
</div>
<div class="tr">
<div class="td">row 2-0</div>
<div class="td">row 2-1</div>
<div class="td">row 2-2</div>
<div class="td">row 2-3</div>
<div class="td">row 2-4</div>
</div>
<div class="tr">
<div class="td">row 3-0</div>
<div class="td">row 3-1</div>
<div class="td">row 3-2</div>
<div class="td">row 3-3</div>
<div class="td">row 3-4</div>
</div>
<div class="tr">
<div class="td">row 4-0</div>
<div class="td">row 4-1</div>
<div class="td">row 4-2</div>
<div class="td">row 4-3</div>
<div class="td">row 4-4</div>
</div>
<div class="tr">
<div class="td">row 5-0</div>
<div class="td">row 5-1</div>
<div class="td">row 5-2</div>
<div class="td">row 5-3</div>
<div class="td">row 5-4</div>
</div>
<div class="tr">
<div class="td">row 6-0</div>
<div class="td">row 6-1</div>
<div class="td">row 6-2</div>
<div class="td">row 6-3</div>
<div class="td">row 6-4</div>
</div>
<div class="tr">
<div class="td">row 7-0</div>
<div class="td">row 7-1</div>
<div class="td">row 7-2</div>
<div class="td">row 7-3</div>
<div class="td">row 7-4</div>
</div>
<div class="tr">
<div class="td">row 1-0</div>
<div class="td">row 1-1</div>
<div class="td">row 1-2</div>
<div class="td">row 1-3</div>
<div class="td">row 1-4</div>
</div>
<div class="tr">
<div class="td">row 2-0</div>
<div class="td">row 2-1</div>
<div class="td">row 2-2</div>
<div class="td">row 2-3</div>
<div class="td">row 2-4</div>
</div>
<div class="tr">
<div class="td">row 3-0</div>
<div class="td">row 3-1</div>
<div class="td">row 3-2</div>
<div class="td">row 3-3</div>
<div class="td">row 3-4</div>
</div>
<div class="tr">
<div class="td">row 4-0</div>
<div class="td">row 4-1</div>
<div class="td">row 4-2</div>
<div class="td">row 4-3</div>
<div class="td">row 4-4</div>
</div>
<div class="tr">
<div class="td">row 5-0</div>
<div class="td">row 5-1</div>
<div class="td">row 5-2</div>
<div class="td">row 5-3</div>
<div class="td">row 5-4</div>
</div>
<div class="tr">
<div class="td">row 6-0</div>
<div class="td">row 6-1</div>
<div class="td">row 6-2</div>
<div class="td">row 6-3</div>
<div class="td">row 6-4</div>
</div>
<div class="tr">
<div class="td">row 7-0</div>
<div class="td">row 7-1</div>
<div class="td">row 7-2</div>
<div class="td">row 7-3</div>
<div class="td">row 7-4</div>
</div>
</div>
</div>
也许使用不同的结构并只滚动内部 rows/columns。 添加了 JQuery 脚本以使其工作。
$( ".fixed_header" ).scroll(function() {
var fixedHeader = $( ".fixed_header" );
$( ".aaa" ).scrollTop(fixedHeader.scrollTop());
});
.fixed_header {
width: 300px;
height: 300px;
overflow: scroll;
display: flex;
flex-direction: column;
}
.td,
.th {
background-color: antiquewhite;
width: 100px;
float: left;
}
.thead {
position: sticky;
top: 0px;
}
.th {
font-weight: bold;
}
.tr {
display: block;
clear: both;
width: 500px;
}
.thead>div>div:nth-child(1) {
left: 0;
top: 0;
}
.content{
position: relative;
}
.sticky-column{
width: 100px;
height: 280px;
position: absolute;
top: 0px;
left: 0px;
display: flex;
flex-direction: column;
}
.data{
margin-left: 100px;
}
.aaa{
overflow: hidden;
height: 2800px;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div class="content">
<div class="sticky-column">
<div>
<div class="th">Col 1</div>
</div>
<div class="aaa">
<div class="td">row 1-0</div>
<div class="td">row 2-0</div>
<div class="td">row 3-0</div>
<div class="td">row 4-0</div>
<div class="td">row 5-0</div>
<div class="td">row 6-0</div>
<div class="td">row 7-0</div>
<div class="td">row 1-0</div>
<div class="td">row 2-0</div>
<div class="td">row 3-0</div>
<div class="td">row 4-0</div>
<div class="td">row 5-0</div>
<div class="td">row 6-0</div>
<div class="td">row 7-0</div>
<div class="td">row 1-0</div>
<div class="td">row 2-0</div>
<div class="td">row 3-0</div>
<div class="td">row 4-0</div>
<div class="td">row 5-0</div>
<div class="td">row 6-0</div>
<div class="td">row 7-0</div>
</div>
</div>
<div class="data">
<div class="fixed_header">
<div class="thead">
<div class="tr">
<div class="th">Col 2</div>
<div class="th">Col 3</div>
<div class="th">Col 4</div>
<div class="th">Col 5</div>
</div>
</div>
<div class="tbody">
<div class="tr">
<div class="td">row 1-1</div>
<div class="td">row 1-2</div>
<div class="td">row 1-3</div>
<div class="td">row 1-4</div>
</div>
<div class="tr">
<div class="td">row 2-1</div>
<div class="td">row 2-2</div>
<div class="td">row 2-3</div>
<div class="td">row 2-4</div>
</div>
<div class="tr">
<div class="td">row 3-1</div>
<div class="td">row 3-2</div>
<div class="td">row 3-3</div>
<div class="td">row 3-4</div>
</div>
<div class="tr">
<div class="td">row 4-1</div>
<div class="td">row 4-2</div>
<div class="td">row 4-3</div>
<div class="td">row 4-4</div>
</div>
<div class="tr">
<div class="td">row 5-1</div>
<div class="td">row 5-2</div>
<div class="td">row 5-3</div>
<div class="td">row 5-4</div>
</div>
<div class="tr">
<div class="td">row 6-1</div>
<div class="td">row 6-2</div>
<div class="td">row 6-3</div>
<div class="td">row 6-4</div>
</div>
<div class="tr">
<div class="td">row 7-1</div>
<div class="td">row 7-2</div>
<div class="td">row 7-3</div>
<div class="td">row 7-4</div>
</div>
<div class="tr">
<div class="td">row 1-1</div>
<div class="td">row 1-2</div>
<div class="td">row 1-3</div>
<div class="td">row 1-4</div>
</div>
<div class="tr">
<div class="td">row 2-1</div>
<div class="td">row 2-2</div>
<div class="td">row 2-3</div>
<div class="td">row 2-4</div>
</div>
<div class="tr">
<div class="td">row 3-1</div>
<div class="td">row 3-2</div>
<div class="td">row 3-3</div>
<div class="td">row 3-4</div>
</div>
<div class="tr">
<div class="td">row 4-1</div>
<div class="td">row 4-2</div>
<div class="td">row 4-3</div>
<div class="td">row 4-4</div>
</div>
<div class="tr">
<div class="td">row 5-1</div>
<div class="td">row 5-2</div>
<div class="td">row 5-3</div>
<div class="td">row 5-4</div>
</div>
<div class="tr">
<div class="td">row 6-1</div>
<div class="td">row 6-2</div>
<div class="td">row 6-3</div>
<div class="td">row 6-4</div>
</div>
<div class="tr">
<div class="td">row 7-1</div>
<div class="td">row 7-2</div>
<div class="td">row 7-3</div>
<div class="td">row 7-4</div>
</div>
<div class="tr">
<div class="td">row 1-1</div>
<div class="td">row 1-2</div>
<div class="td">row 1-3</div>
<div class="td">row 1-4</div>
</div>
<div class="tr">
<div class="td">row 2-1</div>
<div class="td">row 2-2</div>
<div class="td">row 2-3</div>
<div class="td">row 2-4</div>
</div>
<div class="tr">
<div class="td">row 3-1</div>
<div class="td">row 3-2</div>
<div class="td">row 3-3</div>
<div class="td">row 3-4</div>
</div>
<div class="tr">
<div class="td">row 4-1</div>
<div class="td">row 4-2</div>
<div class="td">row 4-3</div>
<div class="td">row 4-4</div>
</div>
<div class="tr">
<div class="td">row 5-1</div>
<div class="td">row 5-2</div>
<div class="td">row 5-3</div>
<div class="td">row 5-4</div>
</div>
<div class="tr">
<div class="td">row 6-1</div>
<div class="td">row 6-2</div>
<div class="td">row 6-3</div>
<div class="td">row 6-4</div>
</div>
<div class="tr">
<div class="td">row 7-1</div>
<div class="td">row 7-2</div>
<div class="td">row 7-3</div>
<div class="td">row 7-4</div>
</div>
</div>
</div>
</div>
</div>
最终我能够通过将 thead
z-index 设为 1 来解决这个问题 - 没有任何 javascript
.fixed_header {
width: 300px;
height: 300px;
overflow: scroll;
}
.td,
.th {
background-color: antiquewhite;
width: 100px;
float: left;
}
.thead {
position: sticky;
top: 0px;
z-index:1;
}
.th {
font-weight: bold;
}
.tr {
display: block;
clear: both;
width: 500px;
}
.thead>div>div:nth-child(1) {
left: 0;
top: 0;
position: sticky;
}
div.tbody>div.tr>div:nth-child(1) {
position: sticky;
left: 0;
}
<div class="fixed_header">
<div class="thead">
<div class="tr">
<div class="th">Col 1</div>
<div class="th">Col 2</div>
<div class="th">Col 3</div>
<div class="th">Col 4</div>
<div class="th">Col 5</div>
</div>
</div>
<div class="tbody">
<div class="tr">
<div class="td">row 1-0</div>
<div class="td">row 1-1</div>
<div class="td">row 1-2</div>
<div class="td">row 1-3</div>
<div class="td">row 1-4</div>
</div>
<div class="tr">
<div class="td">row 2-0</div>
<div class="td">row 2-1</div>
<div class="td">row 2-2</div>
<div class="td">row 2-3</div>
<div class="td">row 2-4</div>
</div>
<div class="tr">
<div class="td">row 3-0</div>
<div class="td">row 3-1</div>
<div class="td">row 3-2</div>
<div class="td">row 3-3</div>
<div class="td">row 3-4</div>
</div>
<div class="tr">
<div class="td">row 4-0</div>
<div class="td">row 4-1</div>
<div class="td">row 4-2</div>
<div class="td">row 4-3</div>
<div class="td">row 4-4</div>
</div>
<div class="tr">
<div class="td">row 5-0</div>
<div class="td">row 5-1</div>
<div class="td">row 5-2</div>
<div class="td">row 5-3</div>
<div class="td">row 5-4</div>
</div>
<div class="tr">
<div class="td">row 6-0</div>
<div class="td">row 6-1</div>
<div class="td">row 6-2</div>
<div class="td">row 6-3</div>
<div class="td">row 6-4</div>
</div>
<div class="tr">
<div class="td">row 7-0</div>
<div class="td">row 7-1</div>
<div class="td">row 7-2</div>
<div class="td">row 7-3</div>
<div class="td">row 7-4</div>
</div>
<div class="tr">
<div class="td">row 1-0</div>
<div class="td">row 1-1</div>
<div class="td">row 1-2</div>
<div class="td">row 1-3</div>
<div class="td">row 1-4</div>
</div>
<div class="tr">
<div class="td">row 2-0</div>
<div class="td">row 2-1</div>
<div class="td">row 2-2</div>
<div class="td">row 2-3</div>
<div class="td">row 2-4</div>
</div>
<div class="tr">
<div class="td">row 3-0</div>
<div class="td">row 3-1</div>
<div class="td">row 3-2</div>
<div class="td">row 3-3</div>
<div class="td">row 3-4</div>
</div>
<div class="tr">
<div class="td">row 4-0</div>
<div class="td">row 4-1</div>
<div class="td">row 4-2</div>
<div class="td">row 4-3</div>
<div class="td">row 4-4</div>
</div>
<div class="tr">
<div class="td">row 5-0</div>
<div class="td">row 5-1</div>
<div class="td">row 5-2</div>
<div class="td">row 5-3</div>
<div class="td">row 5-4</div>
</div>
<div class="tr">
<div class="td">row 6-0</div>
<div class="td">row 6-1</div>
<div class="td">row 6-2</div>
<div class="td">row 6-3</div>
<div class="td">row 6-4</div>
</div>
<div class="tr">
<div class="td">row 7-0</div>
<div class="td">row 7-1</div>
<div class="td">row 7-2</div>
<div class="td">row 7-3</div>
<div class="td">row 7-4</div>
</div>
<div class="tr">
<div class="td">row 1-0</div>
<div class="td">row 1-1</div>
<div class="td">row 1-2</div>
<div class="td">row 1-3</div>
<div class="td">row 1-4</div>
</div>
<div class="tr">
<div class="td">row 2-0</div>
<div class="td">row 2-1</div>
<div class="td">row 2-2</div>
<div class="td">row 2-3</div>
<div class="td">row 2-4</div>
</div>
<div class="tr">
<div class="td">row 3-0</div>
<div class="td">row 3-1</div>
<div class="td">row 3-2</div>
<div class="td">row 3-3</div>
<div class="td">row 3-4</div>
</div>
<div class="tr">
<div class="td">row 4-0</div>
<div class="td">row 4-1</div>
<div class="td">row 4-2</div>
<div class="td">row 4-3</div>
<div class="td">row 4-4</div>
</div>
<div class="tr">
<div class="td">row 5-0</div>
<div class="td">row 5-1</div>
<div class="td">row 5-2</div>
<div class="td">row 5-3</div>
<div class="td">row 5-4</div>
</div>
<div class="tr">
<div class="td">row 6-0</div>
<div class="td">row 6-1</div>
<div class="td">row 6-2</div>
<div class="td">row 6-3</div>
<div class="td">row 6-4</div>
</div>
<div class="tr">
<div class="td">row 7-0</div>
<div class="td">row 7-1</div>
<div class="td">row 7-2</div>
<div class="td">row 7-3</div>
<div class="td">row 7-4</div>
</div>
</div>
</div>