Saya ingin menggunakan CSS text-overflow
dalam sel tabel, sehingga jika teks terlalu panjang untuk muat pada satu baris, itu akan klip dengan ellipsis alih-alih membungkus ke beberapa baris. Apakah ini mungkin?
Saya mencoba ini:
td {
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
}
Tetapi white-space: nowrap
tampaknya membuat teks (dan selnya) terus berkembang ke kanan, mendorong total lebar tabel melampaui lebar wadahnya. Tanpa itu, bagaimanapun, teks terus membungkus ke beberapa baris ketika menyentuh tepi sel.
overflow
baik. Coba letakkan div di dalam sel dan atur div itu.Jawaban:
Untuk klip teks dengan elipsis ketika melimpah sel tabel, Anda perlu mengatur
max-width
properti CSS di setiaptd
kelas agar overflow berfungsi. Tidak diperlukan layout layout tambahanUntuk tata letak yang responsif; gunakan
max-width
properti CSS untuk menentukan lebar minimum efektif kolom, atau cukup gunakanmax-width: 0;
untuk fleksibilitas tak terbatas. Juga, tabel yang berisi akan membutuhkan lebar tertentu, biasanyawidth: 100%;
, dan kolom biasanya akan memiliki lebar yang ditetapkan sebagai persentase dari total lebarHistoris: Untuk IE 9 (atau kurang) Anda harus memiliki ini di HTML Anda, untuk memperbaiki masalah rendering khusus IE
sumber
width: 100%;
danmin-width: 1px;
sel akan selalu seluas mungkin dan hanya akan menggunakan ellipsis untuk memotong teks saat diperlukan (bukan ketika lebar elemen mencapai ukuran tertentu) - ini sangat berguna untuk tata letak responsif.display: table-cell
baik, tetapi tidak ketikamax-width
didefinisikan dalam persentase (%). Diuji pada FF 32table-layout: fixed
pada elemen dengandisplay: table
akan melakukan trikMenentukan
max-width
lebar tetap atau tidak berfungsi untuk semua situasi, dan tabel harus cair dan ruang otomatis sel-selnya. Untuk itulah tabel itu dibuat.Gunakan ini: http://jsfiddle.net/maruxa1j/
HTML:
CSS:
Bekerja pada IE9 dan browser lainnya.
sumber
<span>
elemen.display: block
tidakMengapa ini terjadi?
Tampaknya bagian ini di w3.org menyarankan bahwa teks-overflow hanya berlaku untuk memblokir elemen :
The MDN mengatakan hal yang sama .
Jsfiddle ini memiliki kode Anda (dengan beberapa modifikasi debug), yang berfungsi dengan baik jika diterapkan pada
div
atd
. Ini juga memiliki satu-satunya solusi yang dapat saya pikirkan dengan cepat, dengan membungkus isi blok yangtd
mengandungdiv
. Namun, itu terlihat seperti markup "jelek" bagi saya, jadi saya berharap orang lain memiliki solusi yang lebih baik. Kode untuk menguji ini terlihat seperti ini:sumber
Jika Anda tidak ingin mengatur lebar tetap untuk apa pun
Solusi di bawah ini memungkinkan Anda untuk memiliki konten sel tabel yang panjang, tetapi tidak boleh memengaruhi lebar tabel induk, atau ketinggian baris induk. Misalnya di mana Anda ingin memiliki tabel dengan
width:100%
yang masih menerapkan fitur ukuran otomatis ke semua sel lainnya. Berguna dalam kisi data dengan kolom "Catatan" atau "Komentar" atau sesuatu.Tambahkan 3 aturan ini ke CSS Anda:
Format HTML seperti ini di setiap sel tabel yang Anda inginkan teks dinamis melimpah:
Selain itu menerapkan yang diinginkan
min-width
(atau tidak sama sekali) ke sel tabel.Tentu saja biola: https://jsfiddle.net/9wycg99v/23/
sumber
max-width: X
mereka sekarang bisa lebih luas - saya pikir ini karenadisplay: flex
sedang digunakan, tapi saya menghapusnya dan tidak melihat perbedaan ...Tampaknya jika Anda menentukan
table-layout: fixed;
padatable
elemen, maka gaya Anda untuktd
akan berlaku. Ini juga akan mempengaruhi bagaimana ukuran sel.Sitepoint membahas metode tata letak tabel sedikit di sini: http://reference.sitepoint.com/css/tableformatting
sumber
Jika Anda hanya ingin tabel untuk tata letak otomatis
Tanpa menggunakan
max-width
, atau persentase lebar kolom, atautable-layout: fixed
dll.https://jsfiddle.net/tturadqq/
Bagaimana itu bekerja:
Langkah 1: Biarkan tata letak tabel otomatis melakukan tugasnya.
Ketika ada satu atau lebih kolom dengan banyak teks, itu akan menyusutkan kolom lainnya sebanyak mungkin, lalu bungkus teks dari kolom panjang:
Langkah 2: Bungkus konten sel dalam div, lalu atur div itu ke
max-height: 1.1em
(ekstra 0,1em adalah untuk karakter yang merender sedikit di bawah basis teks, seperti ekor 'g' dan 'y')
Langkah 3: Atur
title
divIni bagus untuk aksesibilitas, dan diperlukan untuk sedikit trik yang akan kita gunakan sebentar lagi.
Langkah 4: Tambahkan CSS
::after
pada divIni agak sulit. Kami menetapkan CSS
::after
, dengancontent: attr(title)
, lalu posisikan itu di atas div dan settext-overflow: ellipsis
. Saya sudah mewarnainya merah di sini untuk membuatnya jelas.(Perhatikan bagaimana kolom panjang sekarang memiliki elipsis tailing)
Langkah 5: Atur warna teks div ke
transparent
Dan kita sudah selesai!
sumber
<a>
bukannya<div>
di dalam sel tabel. Menambahkanword-break: break-all;
memecahkan masalah. Contoh: jsfiddle.net/de0bjmqvKetika itu dalam persentase lebar tabel, atau Anda tidak dapat menetapkan lebar tetap pada sel tabel. Anda dapat mendaftar
table-layout: fixed;
untuk membuatnya berfungsi.sumber
Bungkus konten sel dalam blok fleksibel. Sebagai bonus, sel otomatis cocok dengan lebar yang terlihat.
sumber
white-space: nowrap;
kechild
kelas.Saya memecahkan ini menggunakan div yang benar-benar diposisikan di dalam sel (relatif).
Itu dia. Kemudian Anda bisa menambahkan top: nilai ke div atau pusatkan secara vertikal:
Untuk mendapatkan ruang di sisi kanan, Anda dapat mengurangi sedikit lebar maks.
sumber
Ini berfungsi dalam kasus saya, di Firefox dan Chrome:
sumber
Ini adalah versi yang berfungsi di IE 9.
http://jsfiddle.net/s27gf2n8/
sumber