Làm cách nào để chỉ định chiều cao của bảng sao cho thanh cuộn dọc xuất hiện?


100

Tôi có một bảng với nhiều hàng trên trang của mình. Tôi muốn đặt chiều cao của bảng, giả sử là 500px, sao cho nếu chiều cao của bảng lớn hơn, một thanh cuộn dọc sẽ xuất hiện. Tôi đã cố gắng sử dụng heightthuộc tính CSS trên table, nhưng nó không hoạt động.


1
Có thể sử dụng max-heightthay vì chỉ heightvì sau đó sẽ buộc chiều cao của bảng để được500px
Fred

1
Bạn có thể muốn hỏi một câu hỏi thứ hai, về việc giữ cho hàng tiêu đề không bị cuộn. ;)
Bill Bingham

Câu trả lời:


173

Hãy thử sử dụng thuộc tính overflowCSS. Ngoài ra còn có các thuộc tính riêng biệt để xác định hành vi của chỉ tràn ngang ( overflow-x) và tràn dọc ( overflow-y).

Vì bạn chỉ muốn cuộn dọc, hãy thử cách này:

table {
  height: 500px;
  overflow-y: scroll;
}

BIÊN TẬP:

Rõ ràng <table>các phần tử không tôn trọng overflowtài sản. Điều này có vẻ là do <table>các phần tử không được hiển thị display: blocktheo mặc định (chúng thực sự có kiểu hiển thị riêng). Bạn có thể buộc thuộc overflowtính hoạt động bằng cách đặt <table>phần tử thành một loại khối:

table {
  display: block;
  height: 500px;
  overflow-y: scroll;
}

Lưu ý rằng điều này sẽ khiến phần tử có chiều rộng 100%, vì vậy nếu bạn không muốn phần tử này chiếm toàn bộ chiều ngang của trang, bạn cũng cần chỉ định chiều rộng rõ ràng cho phần tử.


3
Tuy nhiên, điều này không giới hạn chiều cao.
Fred

6
Không, nó có, bạn chỉ cần display:blocktrên bàn để làm cho nó hoạt động giống như một div jsfiddle.net/TSGSA/1
Fred

2
@Fred: Những bộ óc tuyệt vời suy nghĩ như nhau. Tôi đã cập nhật câu trả lời của mình trong khi bạn đang bình luận. :)
AgentConundrum

1
Câu trả lời này thực sự đã giúp tôi, nhưng thay vì áp dụng nó cho thẻ bảng, nó nên được thực hiện với tbody, để cho phép tiêu đề tĩnh khi cuộn. Sau đó, có một số kiểu để sắp xếp liên quan đến khu vực trong phần nằm phía trên thanh cuộn.
David

7
Nếu bạn định sử dụng điều này trên tbody, hãy đảm bảo rằng bạn thêm display: block vào thead (và có thể là tfoot) hoặc chúng có thể hơi điên rồ một chút. Có vẻ như vấn đề là một khi bạn làm điều này, bạn đã phá vỡ liên kết giữa thead và tbody: các cột của cái trước không nhận thức được chiều rộng của cái sau. Vì vậy, bạn vá nó và xuống con dốc trơn trượt mà bạn đi. "Tôi chết vì sắc đẹp ..."
Cuse70

59

Bạn cần bọc bảng bên trong một phần tử khác và đặt chiều cao của phần tử đó. Ví dụ với css nội tuyến:

<div style="height: 500px; overflow: auto;">
 <table>
 </table>
</div>

9
Điều này sẽ không cho phép giữ nguyên vị trí trong khi con lăn.
David

21
Yêu cầu này không có trong câu hỏi ban đầu.
Dark Falcon

2
Ngoài ra, câu trả lời khác (được chấp nhận) cũng không giữ nguyên vị trí.
Brock Adams

Bạn vẫn có thể làm cho có một tiêu đề tại chỗ bằng phương pháp này. Bạn ẩn tiêu đề của bảng, sau đó tạo bảng thứ hai phía trên bảng đầu tiên có tiêu đề trong đó. Sau đó, tạo kiểu cho cả hai bảng để có display:table;các hàng của chúng display:table-row;và các ô của chúng phải có display:table-cell;và hai bảng sẽ khớp với nhau và dường như là một. (Chú ý: đây không làm việc với các bảng rất lớn, về cơ bản, nó phù hợp với họ lên khi nó có thể tôi đã sử dụng kỹ thuật này nhiều lần..)
levininja

1
Chắc chắn rồi. Kích thước của phụ huynh phải được chỉ định để sử dụng kích thước tương đối. Ví dụ: jsfiddle.net/hz8wy
Dark Falcon,

1

để đặt chiều cao của bảng, trước tiên bạn cần đặt thuộc tính css "display: block", sau đó bạn có thể thêm thuộc tính "width / height". Tôi thấy Bài viết Mozilla này là một nguồn rất tốt để tìm hiểu cách tạo kiểu bảng: Liên kết

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.