Tambahkan scrollbar horizontal ke tabel html

148

Apakah ada cara untuk menambahkan scrollbar Horizontal ke tabel HTML? Saya benar-benar membutuhkannya untuk dapat digulir baik secara vertikal dan horizontal tergantung pada bagaimana tabel tumbuh tetapi saya tidak bisa menampilkan bilah gulir.

Tsundoku
sumber
3
... berpikir untuk meletakkan seluruh tabel di div? ... lalu tambahkan gulir ke div?
vektor
3
Mungkin sudah waktunya untuk mengubah jawaban mana yang menjadi jawaban yang diterima?
Serge Stroobandt

Jawaban:

82

Apakah Anda mencoba overflowproperti CSS ?

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

UPDATE
Seperti yang ditunjukkan pengguna lain, ini tidak cukup untuk menambahkan scrollbar.
Jadi tolong, lihat dan beri suara positif pada komentar dan jawaban di bawah ini.

pasine
sumber
16
Menurut usaha saya sendiri dan semua hal lain yang saya baca di internet, ini tidak akan berhasil. Anda bisa meluapkan elemen pembungkus, tentu saja, tetapi tidak pada tabel itu sendiri.
bloudermilk
23
@bloudermilk Anda bisa jika menambahkan display: block.
Cees Timmerman
262

Pertama, buatlah display: blocktabel Anda

lalu, setel overflow-x:ke auto.

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

Bagus dan bersih. Tidak ada pemformatan yang berlebihan.

Berikut adalah contoh yang lebih terlibat dengan teks tabel gulir dari halaman di situs web saya.

Serge Stroobandt
sumber
3
Ini berfungsi untuk saya di Chrome, tetapi hanya setelah menyatukan semuanya. white-space: nowrap;membantu segera melihat scrollbar.
Cees Timmerman
30
Saya sebenarnya mencoba ini sebelumnya. Satu-satunya masalah adalah bahwa sel tabel tidak lagi memenuhi seluruh lebar tabel.
Shevy
4
Seperti yang dikatakan oleh orang lain, ini tidak berfungsi dengan baik: baris tabel tidak memenuhi lebar tabel.
collimarco
1
@SergeStroobandt tidak, dalam kasus saya white-space: nowrap;tidak menyelesaikan masalah (diuji di Firefox). Lebar baris kurang dari lebar tabel jika konten (teks) tidak cukup untuk memperluas baris.
collimarco
3
@collimarco Catatan Saya harus menggunakan max-width: 100% untuk opsi inline-block.
dogoncouch
40

Bungkus tabel dalam DIV, atur dengan gaya berikut:

div.wrapper {
  width: 500px;
  height: 500px;
  overflow: auto;
}
Colin M
sumber
8
Tampaknya di overflow:autosini tidak perlu. Tahukah Anda untuk mencapai ini tanpa menyetel lebar ... yang tampaknya selalu menjadi solusi dalam html - hardcode beberapa lebar atau tinggi tetapi tampaknya mengalahkan tujuan memiliki mesin tata letak!
JonnyRaa
18

Gunakan atribut CSS " overflow " untuk ini.

Ringkasan singkat:

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

misalnya

table {
    display: block;
    overflow: scroll;
}
Roger Willcocks
sumber
tautan yang disediakan rusak
justingordon
13

Ini adalah perbaikan dari jawaban Serge Stroobandt dan bekerja dengan sempurna. Ini memecahkan masalah tabel tidak mengisi seluruh lebar halaman jika memiliki lebih sedikit kolom.

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

<div class="table_wrapper">
<table>
...
</table>
</div>
ochomoswill
sumber
2
The white-space: nowrap;tampaknya opsional.
Mike Shiyan
Luar biasa! Menggayai pembungkus div alih-alih tabel, memecahkan masalah tabel tidak mengisi seluruh lebar halaman ketika memiliki beberapa kolom.
Leopoldo Sanczyk
13

Saya berhasil dengan baik dengan solusi yang diusulkan oleh @Serge Stroobandt, tetapi saya mengalami masalah yang dimiliki @Shevy dengan sel-sel yang kemudian tidak mengisi seluruh lebar tabel. Saya bisa memperbaiki ini dengan menambahkan beberapa gaya ke tbody.

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

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

Ini berfungsi untuk saya di Firefox, Chrome, dan Safari di Mac.

Mary7678
sumber
10

Saya tidak bisa mendapatkan solusi di atas untuk bekerja. Namun, saya menemukan peretasan:

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>

mpen
sumber
Tak satu pun di atas berhasil untuk saya, tetapi ini berhasil. Bagus, terima kasih.
Gábriel
@ Gábriel Senang ini berhasil untuk Anda. Saya baru saja mencobanya di Firefox dan tampaknya tidak dirender dengan benar :-( i.imgur.com/BcjSaCV.png Chrome masih terlihat bagus.
mpen
1
Aneh; Saya menggunakannya persis di Firefox dan berfungsi di sana - meskipun tidak dalam pengaturan persis seperti ini. Saya ingin membuat kotak besar yang terdiri dari div 10 x 10 px dengan batas yang diciutkan dan lebar yang dimaksimalkan + overflow-x: auto tampaknya menjadi kuncinya. Dengan semua itu di tempatnya, semuanya tampak sempurna. Juga, saya tidak menggunakan <table> sama sekali, hanya div, dengan display: table, table-row dan table-cell.
Gábriel
8

Saya mengalami masalah yang sama. Saya menemukan solusi berikut, yang hanya diuji di Chrome v31:

table {
    table-layout: fixed;
}

tbody {
    display: block;
    overflow: scroll;
}
Josh
sumber
1
table-layout: fixedbagus.
Cees Timmerman
Yang ini berhasil untuk saya di tahun 2020, terima kasih!
Benny G
2

Saya menemukan jawaban ini berdasarkan solusi sebelumnya dan itu adalah komentar dan menambahkan beberapa penyesuaian saya sendiri. Ini berfungsi untuk saya di meja responsif.

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;
}
George
sumber
@Saeed Apakah maksud Anda sesuatu seperti struktur html?
George
Saya buruk, maksud saya menambahkan lebih banyak penjelasan, untuk membantu memahaminya dengan lebih baik
Mastisa
Semoga versi ini lebih diperjelas.
George
2

'Lebar lebih dari 100%' di atas meja benar-benar membuatnya bekerja untuk saya.

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

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

Peps
sumber
1

Sisipkan tabel di dalam div, sehingga tabel akan berukuran penuh

HTML

<div class="scroll">
 <table>  </table>
</div>   

CSS

.scroll{
    overflow-x: auto;
    white-space: nowrap;
}
akash samanekar
sumber
0

Dengan bootstrap

 <div class="table-responsive">
   <table class="table">
     ...
   </table>
 </div>
Forrest
sumber
-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>
goel kinzzy
sumber
Indentasi dan contoh data akan membantu jika Anda berniat untuk mendemonstrasikan sesuatu. Selain itu, apakah yang Anda maksud adalah "scrollbar", bukan "Dropdown"?
Cees Timmerman