Paksa lebar kolom tabel untuk selalu diperbaiki apa pun isinya

89

Saya memiliki tabel html dengan table-layout: fixeddan td dengan lebar yang ditetapkan. Kolom masih diperluas untuk menampung konten teks yang tidak mengandung spasi. Apakah ada cara untuk memperbaikinya selain membungkus konten setiap td dalam sebuah div?

Contoh: http://jsfiddle.net/6p9K3/29/

<table>
    <tbody>
        <tr>
            <td style="width: 50px;">Test</td>
            <td>Testing 1123455</td>
        </tr><tr>
            <td style="width: 50px;">AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA</td>
            <td>B</td>
        </tr>
    </tbody>
</table>

table
{
    table-layout: fixed;
}

td
{
    border: 1px solid green;
    overflow: hidden;
}

Dalam contoh, Anda dapat melihat bahwa kolom dengan AAAAAAAAAAAA ... mengembang meskipun secara eksplisit disetel ke lebar 50px.

datadamnation
sumber
1
Duplikat stackoverflow.com/q/4457506/1190388
hjpotter92

Jawaban:

178

Tentukan lebar tabel:

table
{
    table-layout: fixed;
    width: 100px;
}

Lihat jsFiddle

Arie Xiao
sumber
2
Ini memangkas konten
Vikash
7
Luar biasa! itu juga bekerja sempurna dengan table-layout: fixed; width: 100%;.
Lucas Reppe Welander
22

Coba lihat CSS berikut:

word-wrap:break-word;

Browser web tidak boleh memecah "kata-kata" secara default sehingga yang Anda alami adalah perilaku normal browser. Namun Anda dapat menggantinya dengan perintah CSS word-wrap.

Anda perlu mengatur lebar pada tabel keseluruhan kemudian lebar pada kolom. "lebar: 100%;" juga harus OK tergantung pada kebutuhan Anda.

Menggunakan word-wrap mungkin bukan yang Anda inginkan, namun berguna untuk menampilkan semua data tanpa merusak tata letak.

Drew Anderson
sumber
2
Ini, digabungkan dengan jawaban Arie Shaw, membuat saya berperilaku seperti yang saya cari. Kolom selalu memiliki lebar yang sama apa pun teksnya, dan membungkus teks meskipun tidak ada spasi.
datadamnation
Saya mencari sesuatu seperti ini, namun ini sepertinya tidak berfungsi jika tabel tidak disetel ke table-layout: fixed. Namun tata letak tabel tetap tidak dapat diubah jika kepala tabel memiliki colspan. Bagaimana Anda membuat pembungkus kata berfungsi dalam tabel? stackoverflow.com/questions/42371945/…
Manuel
13

Buat meja menjadi kokoh SEBELUM css. Gambarkan lebar tabel Anda, lalu gunakan baris 'pengontrol' di mana setiap td memiliki lebar eksplisit, yang semuanya bertambah hingga lebarnya di tag tabel.

Harus melakukan ratusan email html untuk bekerja di mana saja, dengan menggunakan HTML yang benar terlebih dahulu, kemudian gaya w / css akan mengatasi banyak masalah di semua IE, webkit, dan mozilla.

begitu:

<table width="300" cellspacing="0" cellpadding="0">
  <tr>
    <td width="50"></td>
    <td width="100"></td>
    <td width="150"></td>
  </tr>
  <tr>
    <td>your stuff</td>
    <td>your stuff</td>
    <td>your stuff</td>
  </tr>
</table>

Akan membuat tabel dengan lebar 300px. Perhatikan gambar yang lebih besar dari lebarnya secara ekstrem

kelly johnson
sumber
1
w3school mengatakan tidak didukung di html5
v.oddou
The widthatribut sudah ditinggalkan, Anda baik menggunakan CSS widthproperti atau, yang direkomendasikan HTML 5 cara untuk lebar kolom set, penggunaan <colgroup>dan <col>elemen yang tepat setelah <table>tag dan sebelum <thead>, <tbody>atau <tr>elemen.
S. Esteves
9

Anda dapat menambahkan a divke td, lalu mengatur gaya itu. Ini harus bekerja seperti yang Anda harapkan.

<td><div>AAAAAAAAAAAAAAAAAAA</div></td>

Lalu css.

td div { width: 50px; overflow: hidden; }
John Fisher
sumber
3

Anda juga dapat menggunakan "overflow: hidden" atau "overflow-x: hidden" (hanya untuk lebarnya). Ini membutuhkan lebar yang ditentukan (dan / atau tinggi?) Dan mungkin juga "display: block".

"Overflow: Hidden" menyembunyikan seluruh konten, yang tidak sesuai dengan kotak yang ditentukan.

Contoh:

http://jsfiddle.net/NAJvp/

HTML:

<table border="1">
    <tr>
        <td><div>aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa</div></td>
        <td>bbb</td>
        <td>cccc</td>
    </tr>
</table>

CSS:

td div { width: 100px; overflow-y: hidden; }

EDIT: Malu pada saya, saya pernah melihat, Anda sudah menggunakan "overflow". Saya kira itu tidak berhasil, karena Anda tidak menyetel "display: block" ke elemen Anda ...

Stefan Brendle
sumber
0

Saya akan mencoba mengaturnya ke max-width: 50px;

Alex
sumber
dan lebar: 50px; jika Anda benar-benar ingin lebar tetap.
Adrian P.
0

Anda juga bisa menggunakan persentase, dan / atau menentukan di header kolom:

<table width="300">  
  <tr>
    <th width="20%">Column 1</th>
    <th width="20%">Column 2</th>
    <th width="20%">Column 3</th>
    <th width="20%">Column 4</th>
    <th width="20%">Column 5</th>
  </tr>
  <tr>
    <!--- row data -->
  </tr>
</table>

Bonus dengan persentase adalah pemeliharaan kode yang lebih rendah: Anda dapat mengubah lebar tabel tanpa harus menentukan ulang lebar kolom.

Peringatan: Menurut pemahaman saya, lebar tabel yang ditentukan dalam piksel tidak didukung di HTML 5; Anda perlu menggunakan CSS sebagai gantinya.

PfunnyGuy
sumber
-2

Ini berhasil untuk saya

td::after { 
content: ''; 
display: block; 
width: 30px;
}
MikeyMo
sumber