Вы можете использовать вместо оболочки и position:sticky
, таким образом алгоритм компоновки таблицы работает для всей таблицы, и все столбцы и строки остаются идеально выровненными.
Класси c Использование в приведенном ниже фрагменте :
.myTableWrapper {
width:min-content;/* wraps onto table's width */
height: 100px;
overflow-y:auto;
padding-right:1.3em;
}
thead {
background:white;
position:sticky;
top:0;
}
<div class="myTableWrapper">
<table>
<thead>
<tr><th>TH</th><th>TH</th><th>TH</th><th>TH</th><th>TH</th></tr></thead>
<tbody>
<tr><td>td</td><td>td</td><td>td</td><td>td</td><td>td</td></tr>
<tr><td>td</td><td>td</td><td>td</td><td>td</td><td>td</td></tr>
<tr><td>td</td><td>td</td><td>td</td><td>td</td><td>td</td></tr>
<tr><td>td</td><td>td</td><td>td</td><td>td</td><td>td</td></tr>
<tr><td>td</td><td>td</td><td>td</td><td>td</td><td>td</td></tr>
<tr><td>td</td><td>td</td><td>td</td><td>td</td><td>td</td></tr>
<tr><td>td</td><td>td</td><td>td</td><td>td</td><td>td</td></tr>
<tr><td>td</td><td>td</td><td>td</td><td>td</td><td>td</td></tr>
<tr><td>td</td><td>td</td><td>td</td><td>td</td><td>td</td></tr>
<tr><td>td</td><td>td</td><td>td</td><td>td</td><td>td</td></tr>
<tr><td>td</td><td>td</td><td>td</td><td>td</td><td>td</td></tr>
<tr><td>td</td><td>td</td><td>td</td><td>td</td><td>td</td></tr>
<tr><td>td</td><td>td</td><td>td</td><td>td</td><td>td</td></tr>
<tr><td>td</td><td>td</td><td>td</td><td>td</td><td>td</td></tr>
</tbody>
</table>
</div>
или вы можете играть с display:grid
и display:content
с, чтобы избежать обертки и перехода от таблицы к модели grd.
изменяемый размер живого примера с липкими заголовками => https://codepen.io/gc-nomade/pen/abboqbR, но display:contents
пока не везде понятен.