Encodera

Спасибо, что читаете!

Пожертвуйте сайту, мы стараемся ради вас.

Как закрепить шапку таблицы при прокрутке

Короткий ответ

Задайте ячейкам шапки position: sticky и top: 0, а таблицу поместите в блок с ограниченной высотой и прокруткой:

<style>
  .wrap { max-height: 150px; overflow: auto; border: 1px solid silver; }
  table { border-collapse: collapse; width: 100%; }
  th, td { padding: 6px 12px; text-align: left; }
  th { position: sticky; top: 0; background: steelblue; color: white; }
</style>
 
<div class="wrap">
  <table>
    <thead><tr><th>Day</th><th>Visitors</th></tr></thead>
    <tbody>
      <tr><td>Monday</td><td>120</td></tr><tr><td>Tuesday</td><td>98</td></tr>
      <tr><td>Wednesday</td><td>143</td></tr><tr><td>Thursday</td><td>110</td></tr>
      <tr><td>Friday</td><td>87</td></tr><tr><td>Saturday</td><td>64</td></tr>
    </tbody>
  </table>
</div>

Прокрутите таблицу — строка заголовка останется наверху.

Прокрутка всей страницы

Если таблица прокручивается вместе со страницей, обёртка не нужна: шапка прилипнет к верху окна. Когда на сайте есть фиксированная шапка, задайте top равным её высоте, например top: 60px.

Закрепить первый столбец

Так же закрепляют первую колонку для горизонтальной прокрутки: ячейкам первого столбца задают position: sticky; left: 0 и фон.

Частая ошибка

У закреплённых ячеек забывают фон. Шапка прозрачная, и при прокрутке строки таблицы просвечивают сквозь неё, накладываясь на заголовки. Ещё одна ловушка — overflow: hidden у какого-нибудь родителя между таблицей и прокручиваемым блоком: sticky тогда перестаёт работать.

Функции из этого ответа

  • position — Как позиционируется элемент: в обычном потоке или по смещениям.
  • top, right, bottom, left — Смещения позиционированного элемента от краёв области отсчёта: сверху, справа, снизу и слева.
  • <thead>, <tbody>, <tfoot> — Группы строк таблицы: шапка, тело и итоговая часть.
  • <table> — Таблица из строк `<tr>` и ячеек.
  • overflow — Что делать с содержимым, которое не помещается в элемент.

Спасибо, что читаете!

Пожертвуйте сайту, мы стараемся ради вас.