У меня есть таблица, которая сгруппирована с несколькими элементами <tbody>
, каждый из которых имеет одну начальную строку с элементом <th>
, который озаглавил группу.Я не хочу, чтобы эти <th>
: s были липкими, но я не могу заставить сафари установить правильную верхнюю позицию.
Если я установлю top: 0px
или любое положительное значение на <th>
: sв Firefox, Chrome и Edge он работает как положено, но в сафари я получаю 0px + высоту всех надписей и надписей.Это приводит к тому, что все <th>
: s застревают одновременно значительно ниже верхней позиции прокрутки.
Я могу обойти эту проблему, выровняв таблицу, удалив элементы <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>