Những gì bạn cần là:
1) có thân bảng có chiều cao giới hạn vì cuộn chỉ xảy ra khi nội dung lớn hơn cửa sổ cuộn. Tuy nhiên tbody
không thể có kích thước và bạn phải hiển thị nó block
để làm như vậy:
tbody {
overflow-y: auto;
display: block;
max-height: 10em; // For example
}
2) Đồng bộ hóa lại tiêu đề cột và chiều rộng thân cột của bảng để làm cho phần sau block
trở thành một phần tử không liên quan. Cách duy nhất để làm như vậy là mô phỏng đồng bộ hóa bằng cách thực thi cùng chiều rộng cột cho cả hai .
Tuy nhiên, vì tbody
bản thân nó là một block
bây giờ, nó không còn có thể cư xử như a table
. Vì bạn vẫn cần một table
hành vi để hiển thị chính xác các cột của mình, nên giải pháp là yêu cầu mỗi hàng của bạn hiển thị dưới dạng table
s riêng lẻ :
thead {
display: table;
width: 100%; // Fill the containing table
}
tbody tr {
display: table;
width: 100%; // Fill the containing table
}
(Lưu ý rằng, sử dụng kỹ thuật này, bạn sẽ không thể trải dài trên các hàng nữa).
Khi đã xong, bạn có thể thực thi độ rộng cột để có cùng chiều rộng ở cả hai thead
và tbody
. Bạn không thể:
- riêng cho từng cột (thông qua các lớp CSS cụ thể hoặc kiểu dáng nội tuyến), điều này khá tẻ nhạt để làm cho từng thể hiện của bảng;
- thống nhất cho tất cả các cột (
th, td { width: 20%; }
ví dụ nếu bạn có 5 cột), điều này thực tế hơn (không cần đặt chiều rộng cho mỗi thể hiện của bảng) nhưng không thể hoạt động cho bất kỳ số cột nào
- thống nhất cho bất kỳ số lượng cột, thông qua một bố trí bảng cố định.
Tôi thích tùy chọn cuối cùng, yêu cầu thêm:
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
}
Xem một bản demo ở đây , rẽ nhánh từ câu trả lời cho câu hỏi này .