Фиксация заголовков таблицы при прокрутке в HTML
Быстрый ответ
Чтобы сделать прокручиваемую таблицу с неподвижной шапкой, следует использовать CSS-свойства. Вам нужно разместить таблицу в контейнере заданной высоты и использовать overflow-y: auto. Для <tbody> применяется display: block и указывается нужная высота, чтобы задать область прокрутки. Пример кода ниже:
<style>
  .fixed-header {
    height: 150px; /* Прописываем высоту контейнера */
    overflow-y: auto; /* Активируем прокрутку */
  }
  .fixed-header tbody {
    display: block; /* Переключаем на блочное отображение */
    height: 120px; /* Задаём высоту области прокрутки */
    overflow-y: auto; /* Добавляем возможность прокрутки */
  }
</style>
<div class="fixed-header">
  <table>
    <thead><tr><th>Колонка 1</th><th>Колонка 2</th></tr></thead>
    <tbody>
      <tr><td>Данные 1</td><td>Данные 2</td></tr>
      <!-- Здесь могут быть любые другие строки данных -->
    </tbody>
  </table>
</div>
Используя предложенный подход, вы сможете оставить шапку таблицы на месте, в то время как тело будет прокручиваться.

Создание динамически адаптируемой области прокрутки
Для динамического изменения высоты области прокрутки в зависимости от содержимого или размеров области просмотра можно использовать JavaScript:
function adjustTableBodyHeight() {
  var tableBody = document.querySelector('.fixed-header tbody');
  var availableHeight = window.innerHeight – tableBody.getBoundingClientRect().top;
  tableBody.style.height = Math.max(availableHeight, 100) + 'px';
}
window.onload = adjustTableBodyHeight;
window.onresize = adjustTableBodyHeight;
Такой подход позволяет организовать прокрутку тела таблицы, аналогичную прокрутке в электронных таблицах, например Excel.
Стилизация фиксированной шапки таблицы
Создание визуального эффекта фиксированной шапки возможно с помощью CSS-свойства position: sticky;:
<style>
  .sticky-header th {
    position: sticky; /* Элемент фиксируется при прокрутке */
    top: 0; /* Фиксация верхнего положения */
    background-color: #fff; /* Цвет фона */
  }
</style>
<table class="sticky-header">
  <thead>
    <tr><th>Колонка 1</th><th>Колонка 2</th></tr>
  </thead>
  <tbody>
    <tr><td>Данные 1</td><td>Данные 2</td></tr>
    <!-- И множество других строк данных -->
  </tbody>
</table>
Позиционирование sticky позволит "прикрепить" шапку к верхней части области просмотра при прокрутке.
Адаптивность для разных разрешений экранов
Важно предусматривать адаптивность таблиц для разных размеров устройств. Медиа-запросы помогут настроить размеры и стиль таблицы под нужное разрешение экрана:
@media (max-width: 768px) {
  .fixed-header, .sticky-header th {
    width: 100%;
  }
  .fixed-header tbody {
    max-height: 80px; /* Меньшая высота области прокрутки для маленьких экранов */
  }
}
Визуализация
ASCII-иллюстрация для наглядного представления концепции:
Верхний слой: 🚉 = Шапка (Платформа)
Нижний слой: 🚇 = Тело (Поезд с данными)
"Платформа" шапки остаётся на своём месте, тогда как "поезд" с данными может свободно двигаться:
🚉🔒: [Заголовок 1, Заголовок 2, Заголовок 3]
🚇💨: |Строка 1|
      |Строка 2|
      ...
      |Строка N|
Решение проблемы несовпадающих колонок
Чтобы обеспечить совпадение столбцов таблицы, в стилевых настройках используется table-layout: fixed;, и задаётся фиксированная ширина для <th>. При этом учтите, что поддержка position: sticky; может варьироваться в разных браузерах.
Доступность и удобство использования
Для обеспечения доступности используйте семантические HTML-теги, необходимые атрибуты и дизайн, учитывающий удобство навигации с использованием клавиатуры и технологий помощи для людей с отклонениями в здоровье.
Полезные материалы
- position – CSS: Cascading Style Sheets | MDN — Аналитика CSS-свойства position, включаяsticky.
- html – Table header to stay fixed at the top when user scrolls it out of view with jQuery – Stack Overflow — Обсуждение фиксирования шапок таблиц с помощью jQuery.
- How To Create a Sticky Element – W3Schools — Инструкция по созданию "липкого" элемента.
- Table Design Patterns On The Web — Smashing Magazine — Рекомендации по дизайну веб-таблиц.
- Responsive Data Tables | CSS-Tricks – CSS-Tricks — Как сделать таблицы адаптивными.
- overflow – CSS: Cascading Style Sheets | MDN — Управление контентом, выходящим за пределы отображаемой области.


