Memperbaiki Lebar Sel Meja


175

Banyak orang masih menggunakan tabel untuk kontrol tata letak, data, dll. - salah satu contohnya adalah jqGrid yang populer. Namun, ada beberapa keajaiban yang sepertinya tidak bisa saya pahami (meja-meja untuk menangis dengan suara keras, berapa banyak sihir yang mungkin ada?)

Bagaimana mungkin mengatur lebar kolom tabel dan mematuhinya seperti yang dilakukan jqGrid !? Jika saya mencoba mereplikasi ini, bahkan jika saya mengatur setiap <td style='width: 20px'>, segera setelah konten dari salah satu sel lebih besar dari 20px, sel mengembang!

Ada ide atau wawasan?

Jawaban:


249

Anda bisa mencoba menggunakan <col>tag manage styling table untuk semua baris tetapi Anda perlu mengatur table-layout:fixedstyle pada <table>tabel atau kelas css dan mengatur overflowstyle untuk sel

https://developer.mozilla.org/en-US/docs/Web/HTML/Element/col

<table class="fixed">
    <col width="20px" />
    <col width="30px" />
    <col width="40px" />
    <tr>
        <td>text</td>
        <td>text</td>
        <td>text</td>
    </tr>
</table>

dan ini adalah CSS Anda

table.fixed { table-layout:fixed; }
table.fixed td { overflow: hidden; }

15
col tidak akan bekerja di html5, atur lebar td individu sebagai gantinya dengan kelas inline css atau css
Pankaj Phartiyal

10
Jawaban yang diterima tidak berfungsi kecuali Anda secara eksplisit menerapkan lebar untuk tabel yang diinginkan. Berfungsi dengan baik apakah Anda menggunakan unit atau persentase. Berpikir saya akan menunjukkan ini karena jawaban @ totymedli tidak mendapatkan suara apa pun dan saya tidak ingin pengguna mengabaikannya. Namun, saran penghentian kata tidak diperlukan kecuali jika itu yang Anda tuju.
thebdawk05

Apa yang terjadi ketika Anda memiliki baris dengan hanya 1 elemen TD yang membentang beberapa kolom? Menggunakan kode sampel Anda, jika Anda memiliki <TD colspan="3">satu baris dengan sendirinya apakah itu 90px?
sab669

Terima kasih itu membantu. Untuk tumpang tindih data, tambahkan ini table.fixed td { word-wrap: break-word; }.
Parag Tyagi

Saran penghentian kata tidak perlu, tetapi berguna untuk pengguna SO lainnya dan cukup berkaitan dengan pertanyaan, karena konten yang melimpah di tabel lebar tetap hampir pasti akan muncul di sebagian besar skenario.
Amy Pellegrini

101

Sekarang di HTML5 / CSS3 kami memiliki solusi yang lebih baik untuk masalah ini. Menurut pendapat saya solusi murni CSS ini direkomendasikan:

table.fixed {table-layout:fixed; width:90px;}/*Setting the table width is important!*/
table.fixed td {overflow:hidden;}/*Hide text outside the cell.*/
table.fixed td:nth-of-type(1) {width:20px;}/*Setting the width of column 1.*/
table.fixed td:nth-of-type(2) {width:30px;}/*Setting the width of column 2.*/
table.fixed td:nth-of-type(3) {width:40px;}/*Setting the width of column 3.*/
<table class="fixed">
    <tr>
        <td>Veryverylongtext</td>
        <td>Actuallythistextismuchlongeeeeeer</td>
        <td>We should use spaces tooooooooooooo</td>
    </tr>
</table>

Anda perlu mengatur meja widthbahkan dalam solusi hantu . Kalau tidak, itu tidak akan berhasil.
Juga fitur CSS3 baru yang vsync disarankan adalah: word-break:break-all;. Ini akan memecah kata-kata tanpa spasi di dalamnya untuk beberapa baris juga. Cukup modifikasi kode seperti ini:

table.fixed { table-layout:fixed; width:90px; word-break:break-all;}

Hasil akhir

Meja yang diberikan


Jika Anda melemparkan baris dengan colspan, ini tampaknya memecah solusi ini. Ada saran tentang cara memanfaatkan solusi ini dengan tabel yang berisi colspan> 1?
Eric K

@ QuantumDynamix Saya memperbaikinya dengan memasukkan sebagai baris pertama, baris tanpa colspans, hanya semua kolom individual dengan lebar. Saya kemudian menyembunyikan baris itu dengan 0 tinggi, perbatasan: tidak ada, visibilitas: tersembunyi, padding: 0px dll., Maka baris kedua adalah yang pertama yang ingin saya lihat di mana ada colspans. Baris pertama dengan masing-masing sel lebar tetap menetapkan lebar.
AaronLS

@totymedli Ada ide bagaimana cara mendapatkan meja saya untuk mengambil jumlah semua lebar kolom saya? Tabel saya dihasilkan secara dinamis sedikit dan saya jadi tidak bisa menghitung terlebih dahulu lebar tabel, tapi saya tidak ingin menggunakan 100% karena itu membentang beberapa elemen.
AaronLS

14
table td 
{
  table-layout:fixed;
  width:20px;
  overflow:hidden;
  word-wrap:break-word;
}

9
Apakah Anda yakin dapat menggunakan table-layoutelemen td?
Nick

@Nick - itu bekerja dengan baik. Hovewer saya harus menambahkan properti min-width dan max-width juga (nilai yang sama dengan lebar), dan kemudian menjadi benar-benar lebar tetap.
Denis Khay

11

Saya punya satu sel td meja panjang, ini memaksa meja ke tepi browser dan tampak jelek. Saya hanya ingin kolom itu ukuran tetap saja dan memecahkan kata-kata ketika mencapai lebar yang ditentukan. Jadi ini bekerja dengan baik untuk saya:

<td><div style='width: 150px;'>Text to break here</div></td>

Anda tidak perlu menentukan jenis gaya apa pun ke tabel, tr elemen. Anda juga dapat menggunakan overflow: hidden; seperti yang disarankan oleh jawaban lain tetapi menyebabkan kelebihan teks menghilang.


2
Atau Anda dapat menggunakan max-width bukan width jika diperlukan. Ini akan memungkinkan Anda untuk tidak merusak teks kecuali jika Anda mencapai batas lebar Anda. Dan sel tabel tidak akan memiliki ruang kosong jika teks Anda lebih kecil dari lebar yang ditentukan. <td> <div style = 'max-width: 150px;'> Teks untuk dihancurkan di sini </div> </td>
Tarik


0

untuk tabel lebar FULLSCREEN:

  • lebar meja HARUS 100%

  • jika perlu N kolom, maka HARUS N + 1

contoh untuk 3 kolom:

table.fixed {
      table-layout: fixed;
      width: 100%;
    }
    table.fixed td {
      overflow: hidden;
    }
  <table class="fixed">
      <col width=20 />
      <col width=20 />
      <col width=20 />
    <tr>
      <th>1</th>
      <th>2</th>
      <th>3</th>
      <th>FREE</th>
    </tr>
    <tr>
      <td>text111111111</td>
      <td>text222222222</td>
      <td>text3333333</td>
    </tr>
  </table>


-2
table
{
  table-layout:fixed;
}
td,th
{
  width:20px; 
  word-wrap:break-word;
}

: first-child ...: nth-child (1) atau ...

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.