Що вам потрібно:
1) мати тіло таблиці обмеженої висоти, оскільки прокручування відбувається лише тоді, коли вміст перевищує вікно прокрутки. Однак tbody
не може бути розміром, і ви повинні відобразити це як це block
:
tbody {
overflow-y: auto;
display: block;
max-height: 10em; // For example
}
2) Повторно синхронізуйте заголовок таблиці та стовпчики корпусу таблиці, оскільки перетворення останніх у block
нього зробило його незв'язаним елементом. Єдиний спосіб зробити це - імітувати синхронізацію, застосовуючи однакову ширину стовпців для обох .
Однак, оскільки 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
}
Дивіться демонстрацію тут , отриману від відповіді на це запитання .