Что вам нужно это:
1) иметь тело таблицы ограниченной высоты, поскольку прокрутка происходит только тогда, когда содержимое больше, чем окно прокрутки. Однако tbody
размер не может быть измерен, и вы должны отобразить его как block
:
tbody {
overflow-y: auto;
display: block;
max-height: 10em; // For example
}
2) Повторно синхронизируйте ширину столбцов заголовка таблицы и тела таблицы, так как создание последнего block
элемента a сделало его несвязанным элементом. Единственный способ сделать это - симулировать синхронизацию, применяя одинаковую ширину столбцов к обоим .
Тем не менее, так как tbody
сам по себе является block
сейчас, он больше не может вести себя как table
. Поскольку вам все еще нужно table
поведение для правильного отображения ваших столбцов, решение состоит в том, чтобы запросить отображение каждой из ваших строк в виде отдельных table
s:
thead {
display: table;
width: 100%; // Fill the containing table
}
tbody tr {
display: table;
width: 100%; // Fill the containing table
}
(Обратите внимание, что, используя эту технику, вы больше не сможете охватывать строки).
Как только это сделано, вы можете применять ширину столбцов , чтобы иметь такую же ширину , как thead
и tbody
. Вы не могли этого:
- индивидуально для каждого столбца (с помощью определенных классов CSS или встроенного стиля), что довольно утомительно для каждого экземпляра таблицы;
- равномерно для всех столбцов (через
th, td { width: 20%; }
если у вас есть 5 столбцов), что более практично (нет необходимости устанавливать ширину для каждого экземпляра таблицы), но не может работать для любого количества столбцов
- равномерно для любого количества столбцов, с помощью фиксированного макета таблицы.
Я предпочитаю последний вариант, который требует добавления:
thead {
table-layout: fixed; // Same layout for all cells
}
tbody tr {
table-layout: fixed; // Same layout for all cells
}
th, td {
width: auto; // Same width for all cells, if table has fixed layout
}
Смотрите демо здесь , разветвленный от ответа на этот вопрос .