Есть таблица
<div class="table">
<header>
<div>Название</div>
<div>Описание</div>
<div>Цена</div>
<div>Количество</div>
</header>
<main>
<div>
<div>Телевизор</div>
<div>Большой цветной телевизор</div>
<div>1000р</div>
<div>10 штук</div>
</div>
<main>
</div>
.table {
border: 1px solid var(--grey-dc-color);
border-radius: 0.5rem;
overflow-x: auto; /* Таблица имеет внутренний горизонтальный скрол !!! */
}
.table header {
box-sizing: border-box;
position: sticky;
top: 0;
z-index: 2;
}
Как сделать, чтобы при скроле страницы (вертикальный скрол) шапка фиксировалась, проблема в том, что сама таблица имеет горизонтальный скрол и соответственно position: sticky; не срабатывает у шапки, а хотелось бы.
Во время скрола таблицы (горизонтальный скрол) шапка и данные скролятся одновременно, чтобы можно было соотнести данные и колонку, но когда страницу прокручиваем вверх и шапка уходит за viewport, это неудобно. Как можно всё-таки шапку зафиксировать.
Нельзя менять структуру HTML таблицы, максимум обернуть таблицу во что-то, вариант, с установкой высоты таблицы не пойдёт, потому что нужен только внешний скрол у страницы, а не у таблицы!
Если вообще-то какое-то решение?
Пробовал разные варианты в том числе и на JS IntersectionObserver, но если у шапки ставить position absolute или fixed, тогда при горизонтальном скроле в таблице шапка уже не скролится, то есть должен остаться sticky по-видимому для корректной работы горизонтального скрола. Либо как-то синхронизировать скролы шапки и самой таблицы.
Пример