Potrzebujesz:
1) mają treść tabeli o ograniczonej wysokości, ponieważ przewijanie ma miejsce tylko wtedy, gdy zawartość jest większa niż przewijane okno. Nie tbody
można jednak dopasować rozmiaru i musisz to wyświetlić jako block
:
tbody {
overflow-y: auto;
display: block;
max-height: 10em; // For example
}
2) Ponownie zsynchronizuj nagłówki tabeli i szerokości kolumn z treścią tabeli, tak aby ta ostatnia block
uczyniła z niej element niepowiązany. Jedynym sposobem, aby to zrobić, jest zasymulowanie synchronizacji przez wymuszenie tej samej szerokości kolumn w obu .
Jednak ponieważ tbody
sam jest block
teraz, nie może już zachowywać się jak table
. Ponieważ nadal potrzebujesz table
zachowania, aby poprawnie wyświetlać kolumny, rozwiązaniem jest poproszenie, aby każdy z wierszy był wyświetlany jako osobne table
pozycje:
thead {
display: table;
width: 100%; // Fill the containing table
}
tbody tr {
display: table;
width: 100%; // Fill the containing table
}
(Zauważ, że używając tej techniki, nie będziesz już w stanie rozciągać się między wierszami).
Gdy to zrobisz, możesz wymusić szerokość kolumn, aby mieć tę samą szerokość w obu thead
i tbody
. Nie możesz tego:
- indywidualnie dla każdej kolumny (poprzez określone klasy CSS lub wbudowane style), co jest dość uciążliwe dla każdej instancji tabeli;
- jednolicie dla wszystkich kolumn (do
th, td { width: 20%; }
na przykład jeśli masz 5 kolumn), co jest bardziej praktyczne (nie ma potrzeby ustawiania szerokości dla każdej instancji tabeli), ale nie może działać dla żadnej liczby kolumn
- jednolicie dla dowolnej liczby kolumn, poprzez stały układ tabeli.
Wolę ostatnią opcję, która wymaga dodania:
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
}
Zobacz demo tutaj , rozwidlone z odpowiedzi na to pytanie .