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 tbodyGröß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 blockzu 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 tbodysich jedoch um ein blockJetzt handelt, kann es sich nicht mehr wie ein Jetzt verhalten table. Da Sie immer noch ein tableVerhalten benötigen , um Ihre Spalten korrekt anzuzeigen, besteht die Lösung darin, jede Ihrer Zeilen als einzelne tables 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 theadund 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 .