Yang Anda butuhkan adalah:
1) memiliki badan tabel dengan ketinggian terbatas karena gulir hanya terjadi ketika isinya lebih besar dari jendela gulir. Namun tbodytidak dapat berukuran, dan Anda harus menampilkannya blockuntuk 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 blockmenjadikannya elemen yang tidak terkait. Satu-satunya cara untuk melakukannya adalah dengan mensimulasikan sinkronisasi dengan menegakkan lebar kolom yang sama untuk keduanya .
Namun, karena tbodyitu sendiri adalah blocksekarang, ia tidak lagi dapat berperilaku seperti table. Karena Anda masih memerlukan tableperilaku 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 theaddan 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 .