Thêm thanh cuộn ngang vào bảng html


142

Có cách nào để thêm thanh cuộn Ngang vào bảng HTML không? Tôi thực sự cần nó để có thể cuộn theo cả chiều dọc và chiều ngang tùy thuộc vào cách bảng phát triển nhưng tôi không thể xuất hiện thanh cuộn.


3
... nghĩ về việc đặt toàn bộ bảng trong một div? ... sau đó thêm cuộn vào div?
vectơ

3
Có lẽ thời gian để thay đổi câu trả lời là câu trả lời được chấp nhận?
Serge Stroobandt

Câu trả lời:


82

Bạn đã thử thuộc overflowtính CSS chưa?

overflow: scroll; /* Scrollbar are always visible */
overflow: auto;   /* Scrollbar is displayed as it's needed */

CẬP NHẬT
Như những người dùng khác đang chỉ ra, điều này là không đủ để thêm các thanh cuộn.
Vì vậy, xin vui lòng, xem và upvote ý kiến ​​và câu trả lời dưới đây.


15
Theo những nỗ lực của riêng tôi và mọi thứ khác tôi đã đọc trên internet, điều này chỉ đơn giản là không hoạt động. Bạn có thể tràn phần tử bao bọc, chắc chắn, nhưng không phải chính bảng.
bloudermilk

21
@bloudermilk Bạn có thể nếu bạn thêm display: block.
Cees Timmerman

244

Đầu tiên, tạo một display: blockbảng của bạn

Sau đó, đặt overflow-x:thành auto.

table {
    display: block;
    overflow-x: auto;
    white-space: nowrap;
}

Đẹp và sạch sẽ. Không có định dạng thừa.

Dưới đây là các ví dụ liên quan nhiều hơn với chú thích bảng cuộn từ một trang trên trang web của tôi.


3
Điều này hoạt động với tôi trong Chrome, nhưng chỉ sau khi kết hợp mọi thứ lại với nhau. white-space: nowrap;giúp ngay lập tức nhìn thấy thanh cuộn.
Cees Timmerman

28
Tôi thực sự đã thử điều này trước đây. Vấn đề duy nhất là các ô của bảng không còn lấp đầy toàn bộ chiều rộng của bảng.
Shevy

4
Như đã nói bởi những người khác, điều này không hoạt động đúng: các hàng của bảng không lấp đầy chiều rộng của bảng.
collimarco

1
@SergeStroobandt không, trong trường hợp của tôi white-space: nowrap;không giải quyết được vấn đề (đã thử nghiệm trên Firefox). Chiều rộng hàng nhỏ hơn chiều rộng bảng khi không có đủ nội dung (văn bản) để mở rộng các hàng.
collimarco

3
@collimarco Lưu ý Tôi phải sử dụng max-width: 100% cho tùy chọn chặn nội tuyến.
dogoncouch

40

Bọc bảng trong DIV, đặt theo kiểu sau:

div.wrapper {
  width: 500px;
  height: 500px;
  overflow: auto;
}

8
Có vẻ như overflow:autoở đây là không cần thiết. Bạn có biết bằng cách nào để đạt được điều này mà không cần thiết lập chiều rộng ... đó dường như luôn là giải pháp trong html - mã hóa một số chiều rộng hoặc chiều cao nhưng điều đó dường như đánh bại điểm có một công cụ bố trí!
JonnyRaa 17/03/2015

17

Sử dụng thuộc tính CSS " tràn " cho việc này.

Tóm tắt ngắn gọn:

overflow: visible|hidden|scroll|auto|initial|inherit;

ví dụ

table {
    display: block;
    overflow: scroll;
}

liên kết được cung cấp bị hỏng
justingordon

11

Tôi đã thành công tốt đẹp với giải pháp được đề xuất bởi @Serge Stroobandt, nhưng tôi gặp phải vấn đề @Shevy gặp phải với các ô sau đó không lấp đầy toàn bộ chiều rộng của bảng. Tôi đã có thể khắc phục điều này bằng cách thêm một số kiểu vào tbody.

table {
  display: block;
  overflow-x: auto;
  white-space: nowrap;
}

table tbody {
  display: table;
  width: 100%;
}

Điều này làm việc cho tôi trong Firefox, Chrome và Safari trên Mac.


10

Tôi không thể có bất kỳ giải pháp nào ở trên để làm việc. Tuy nhiên, tôi tìm thấy một bản hack:

body {
  background-color: #ccc;
}

.container {
  width: 300px;
  background-color: white;
}

table {
  width: 100%;
  border-collapse: collapse;
}

td {
  border: 1px solid black;
}

/* try removing the "hack" below to see how the table overflows the .body */
.hack1 {
  display: table;
  table-layout: fixed;
  width: 100%;
}

.hack2 {
  display: table-cell;
  overflow-x: auto;
  width: 100%;
}
<div class="container">

  <div class="hack1">
    <div class="hack2">

      <table>
        <tr>
          <td>table or other arbitrary content</td>
          <td>that will cause your page to stretch</td>
        </tr>
        <tr>
          <td>uncontrollably</td>
          <td>xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx</td>
        </tr>
      </table>

    </div>
  </div>

</div>


Không ai ở trên làm việc cho tôi cả, nhưng điều này đã làm. Đẹp một, cảm ơn.
Gábriel

@ Gábriel Vui mừng vì nó làm việc cho bạn. Tôi đã thử lại nó ngay bây giờ trong Firefox và dường như nó không được hiển thị chính xác :-( i.imgur.com/BcjSaCV.png Chrome vẫn có vẻ tốt.
mpen

1
Lạ thật; Tôi đã sử dụng nó chính xác trên Firefox và nó hoạt động ở đó - mặc dù không phải trong thiết lập chính xác này. Tôi muốn kết xuất một lưới lớn được tạo thành từ 10 x 10 px div với các đường viền được thu gọn và chiều rộng tối đa + overflow-x: auto dường như là chìa khóa. Với những người tại chỗ, mọi thứ trông thật hoàn hảo. Ngoài ra, tôi hoàn toàn không sử dụng <bảng>, chỉ có các div, với màn hình: bảng, hàng bảng và ô bảng.
Gábriel

10

Đây là một cải tiến của câu trả lời của Serge Stroobandt và hoạt động hoàn hảo. Nó giải quyết vấn đề của bảng không lấp đầy toàn bộ chiều rộng của trang nếu nó có ít cột hơn.

<style> 
 .table_wrapper{
    display: block;
    overflow-x: auto;
    white-space: nowrap;
}
</style>

<div class="table_wrapper">
<table>
...
</table>
</div>

2
Các white-space: nowrap;có vẻ là không bắt buộc.
Mike Shiyan


2

Tôi đã tìm ra câu trả lời này dựa trên giải pháp trước đó và đó là nhận xét và thêm một số điều chỉnh của riêng tôi. Điều này làm việc cho tôi trên bảng đáp ứng.

table {
  display: inline-block;
  overflow-x: auto;
  white-space: nowrap;
  // make fixed table width effected by overflow-x
  max-width: 100%;
  // hide all borders that make rows not filled with the table width
  border: 0;
}
// add missing borders
table td {
  border: 1px solid;
}

@Saeed Ý của bạn là gì đó giống như cấu trúc html?
George

Thật tệ, ý tôi là thêm lời giải thích, để giúp hiểu rõ hơn
Mastisa

Hy vọng phiên bản này được làm rõ hơn.
George

1

'Chiều rộng hơn 100%' trên bàn thực sự khiến nó hoạt động với tôi.

.table-wrap {
    width: 100%;
    overflow: auto;
}

table {
    table-layout: fixed;
    width: 200%;
}


-2
//Representation of table
<div class="search-table-outter">
<table class="table table-responsive search-table inner">
</table>
</div>

//Css to make Horizontal Dropdown

<style>

    .search-table{table-layout: auto; margin:40px auto 0px auto; }
    .search-table, td, th {
        border-collapse: collapse;
    }
th{padding:20px 7px; font-size:15px; color:#444;}
td{padding:5px 10px; height:35px;}
    .search-table-outter { overflow-x: scroll; }
th, td { min-width: 200px; }


</style>

Dữ liệu thụt lề và mẫu sẽ giúp ích nếu bạn có ý định demo một cái gì đó. Ngoài ra, ý bạn là "thanh cuộn" thay vì "Thả xuống"?
Cees Timmerman
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.