Что вам нужно это:
1) иметь тело таблицы ограниченной высоты, поскольку прокрутка происходит только тогда, когда содержимое больше, чем окно прокрутки. Однако tbodyразмер не может быть измерен, и вы должны отобразить его как block:
tbody {
overflow-y: auto;
display: block;
max-height: 10em; // For example
}
2) Повторно синхронизируйте ширину столбцов заголовка таблицы и тела таблицы, так как создание последнего blockэлемента a сделало его несвязанным элементом. Единственный способ сделать это - симулировать синхронизацию, применяя одинаковую ширину столбцов к обоим .
Тем не менее, так как tbodyсам по себе является blockсейчас, он больше не может вести себя как table. Поскольку вам все еще нужно tableповедение для правильного отображения ваших столбцов, решение состоит в том, чтобы запросить отображение каждой из ваших строк в виде отдельных tables:
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
}
Смотрите демо здесь , разветвленный от ответа на этот вопрос .