我有一个表,表中包含多个<tbody>
元素,每个元素都有一个带有<th>
元素的初始行,该元素标题为该组。我不希望这些<th>
:s保持粘性,但我无法通过野生动物园设置正确的顶部位置。
如果我在top: 0px
上设置<th>
或任何正值,则可以在Firefox,Chrome和Edge中按预期工作,但在野生动物园中,我得到0px +以上所有正文和标题的高度。这会导致所有<th>
:同时卡住,远低于顶部滚动位置。
我可以通过展平表格,删除<tbody>
元素并将所有<tr>
:s直接放在表格下面来解决此问题。但这会使样式复杂化,在我的情况下,可访问性很有意义,可以将表分组,因此我宁愿不必这样做。
您对如何解决或解决此问题有任何想法吗?
预期(Chrome,Safari和Edge):
Safari 12:
div {
height: 200px;
overflow: auto;
}
td, th {
border: 1px solid gray;
}
th {
position: -webkit-sticky;
position: sticky;
top: 0;
background: white;
}
tbody th {
top: 20px;
}
td {
background: lightgray;
}
<div>
<table>
<caption>The table</caption>
<thead>
<tr>
<th>First col</th>
<th>Second col</th>
<th>Third col</th>
</tr>
</thead>
<tbody>
<tr>
<th colspan="3">Group 1</th>
</tr>
<tr>
<td>foo</td>
<td>bar</td>
<td>baz</td>
</tr>
<tr>
<td>foo</td>
<td>bar</td>
<td>baz</td>
</tr>
<tr>
<td>foo</td>
<td>bar</td>
<td>baz</td>
</tr>
<tr>
<td>foo</td>
<td>bar</td>
<td>baz</td>
</tr>
</tbody>
<tbody>
<tr>
<th colspan="3">Group 2</th>
</tr>
<tr>
<td>foo</td>
<td>bar</td>
<td>baz</td>
</tr>
<tr>
<td>foo</td>
<td>bar</td>
<td>baz</td>
</tr>
<tr>
<td>foo</td>
<td>bar</td>
<td>baz</td>
</tr>
<tr>
<td>foo</td>
<td>bar</td>
<td>baz</td>
</tr>
</tbody>
<tbody>
<tr>
<th colspan="3">Group 3</th>
</tr>
<tr>
<td>foo</td>
<td>bar</td>
<td>baz</td>
</tr>
<tr>
<td>foo</td>
<td>bar</td>
<td>baz</td>
</tr>
<tr>
<td>foo</td>
<td>bar</td>
<td>baz</td>
</tr>
<tr>
<td>foo</td>
<td>bar</td>
<td>baz</td>
</tr>
</tbody>
</table>
</div>
答案 0 :(得分:0)
下面的代码将同时适用于Safari和Google Chrome。诀窍是将th
更改为thead
,然后以各种方式将位置设置为粘性。 position: -webkit-ms-sticky
,position: -webkit-o-sticky
,position: -webkit-sticky
,position:sticky
。
您还应该为thead
添加两个签入CSS,并在第二个检查中找到该thead
标记的每个子标记,以确保它也选择了Chrome中的每个子标记。
div {
height: 200px;
overflow: auto;
}
td, th {
border: 1px solid gray;
}
tbody thead {
top: 20px;
}
thead {
position: -webkit-sticky;
position: -webkit-o-sticky;
position: -webkit-ms-sticky;
position: sticky;
z-index: 1;
top: 0px;
background: white;
}
thead tr:nth-child(1) th{
background: white;
position: sticky;
top: 0;
z-index: 10;
}
td {
background: lightgray;
}
<table>
<caption>The table</caption>
<thead>
<tr>
<th>First col</th>
<th>Second col</th>
<th>Third col</th>
</tr>
</thead>
<tbody>
<thead>
<tr>
<th colspan="3">Group 1</th>
</tr>
</thead>
<tr>
<td>foo</td>
<td>bar</td>
<td>baz</td>
</tr>
<tr>
<td>foo</td>
<td>bar</td>
<td>baz</td>
</tr>
<tr>
<td>foo</td>
<td>bar</td>
<td>baz</td>
</tr>
<tr>
<td>foo</td>
<td>bar</td>
<td>baz</td>
</tr>
</tbody>
<tbody>
<thead>
<tr>
<th colspan="3">Group 2</th>
</tr>
</thead>
<tr>
<td>foo</td>
<td>bar</td>
<td>baz</td>
</tr>
<tr>
<td>foo</td>
<td>bar</td>
<td>baz</td>
</tr>
<tr>
<td>foo</td>
<td>bar</td>
<td>baz</td>
</tr>
<tr>
<td>foo</td>
<td>bar</td>
<td>baz</td>
</tr>
</tbody>
<tbody>
<thead>
<tr>
<th colspan="3">Group 3</th>
</tr>
</thead>
<tr>
<td>foo</td>
<td>bar</td>
<td>baz</td>
</tr>
<tr>
<td>foo</td>
<td>bar</td>
<td>baz</td>
</tr>
<tr>
<td>foo</td>
<td>bar</td>
<td>baz</td>
</tr>
<tr>
<td>foo</td>
<td>bar</td>
<td>baz</td>
</tr>
</tbody>
</table>