Yang Anda butuhkan adalah:
1) memiliki badan tabel dengan ketinggian terbatas karena gulir hanya terjadi ketika isinya lebih besar dari jendela gulir. Namun tbody
tidak dapat berukuran, dan Anda harus menampilkannya block
untuk melakukannya:
tbody {
overflow-y: auto;
display: block;
max-height: 10em; // For example
}
2) Sinkronisasi ulang tajuk tabel dan lebar kolom isi tabel karena menjadikan yang terakhir block
menjadikannya elemen yang tidak terkait. Satu-satunya cara untuk melakukannya adalah dengan mensimulasikan sinkronisasi dengan menegakkan lebar kolom yang sama untuk keduanya .
Namun, karena tbody
itu sendiri adalah block
sekarang, ia tidak lagi dapat berperilaku seperti table
. Karena Anda masih memerlukan table
perilaku untuk menampilkan kolom dengan benar, solusinya adalah meminta setiap baris Anda ditampilkan sebagai masing-masing table
:
thead {
display: table;
width: 100%; // Fill the containing table
}
tbody tr {
display: table;
width: 100%; // Fill the containing table
}
(Perhatikan bahwa, menggunakan teknik ini, Anda tidak akan dapat menjangkau rentang baris lagi).
Setelah itu selesai, Anda dapat menegakkan lebar kolom untuk memiliki lebar yang sama di kedua thead
dan tbody
. Anda tidak bisa melakukannya:
- secara individual untuk setiap kolom (melalui kelas CSS tertentu atau gaya inline), yang cukup membosankan untuk dilakukan untuk setiap instance tabel;
- seragam untuk semua kolom (misalnya
th, td { width: 20%; }
jika Anda memiliki 5 kolom), yang lebih praktis (tidak perlu mengatur lebar untuk setiap contoh tabel) tetapi tidak dapat berfungsi untuk jumlah kolom apa pun
- seragam untuk setiap kolom dihitung, melalui tata letak tabel tetap.
Saya lebih suka opsi terakhir, yang membutuhkan penambahan:
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
}
Lihat demo di sini , bercabang dari jawaban untuk pertanyaan ini .