Was Sie brauchen ist:
1) einen Tabellenkörper mit begrenzter Höhe haben, da der Bildlauf nur dann erfolgt, wenn der Inhalt größer als das Bildlauffenster ist. Die tbody
Größe kann jedoch nicht festgelegt werden, und Sie müssen sie als Folgendes anzeigen block
:
tbody {
overflow-y: auto;
display: block;
max-height: 10em; // For example
}
2) Synchronisieren Sie die Spaltenbreiten des Tabellenkopfs und des Tabellenkörpers erneut , um letztere block
zu einem nicht verwandten Element zu machen. Die einzige Möglichkeit, dies zu tun, besteht darin, die Synchronisation zu simulieren, indem für beide dieselbe Spaltenbreite erzwungen wird .
Da es tbody
sich jedoch um ein block
Jetzt handelt, kann es sich nicht mehr wie ein Jetzt verhalten table
. Da Sie immer noch ein table
Verhalten benötigen , um Ihre Spalten korrekt anzuzeigen, besteht die Lösung darin, jede Ihrer Zeilen als einzelne table
s anzuzeigen :
thead {
display: table;
width: 100%; // Fill the containing table
}
tbody tr {
display: table;
width: 100%; // Fill the containing table
}
(Beachten Sie, dass Sie mit dieser Technik keine Zeilen mehr überspannen können.)
Sobald dies erledigt ist, können Sie die Spaltenbreite so erzwingen, dass sie in thead
und die gleiche Breite hat tbody
. Das konnte man nicht:
- einzeln für jede Spalte (durch bestimmte CSS-Klassen oder Inline-Styling), was für jede Tabelleninstanz ziemlich mühsam ist;
- einheitlich für alle Spalten (bis,
th, td { width: 20%; }
wenn Sie beispielsweise 5 Spalten haben), was praktischer ist (keine Notwendigkeit, die Breite für jede Tabelleninstanz festzulegen), aber für keine Spaltenanzahl funktionieren kann
- einheitlich für jede Spaltenanzahl durch ein festes Tabellenlayout.
Ich bevorzuge die letzte Option, die hinzugefügt werden muss:
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
}
Hier finden Sie eine Demo hier , aus der Antwort auf gegabelt diese Frage .