Pertimbangkan contoh berikut: ( demo langsung di sini )
$(function() {
console.log("width = " + $("td").width());
});
td {
border: 1px solid black;
width: 50px;
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<table>
<tbody>
<tr>
<td>Hello Stack Overflow</td>
</tr>
</tbody>
</table>
Outputnya adalah width = 139
:, dan elipsis tidak muncul.
Apa yang kulewatkan di sini?
width
dan diheight
atas meja sel selalu digunakan sebagai lebar dan tinggi minimal . Sel tabel berbeda!Jawaban:
Rupanya, menambahkan:
memecahkan masalah juga.
Solusi lain yang mungkin adalah mengatur
table-layout: fixed;
untuk tabel, dan juga mengaturnyawidth
. Misalnya: http://jsfiddle.net/fd3Zx/5/sumber
display: table-cell
(default untuktd
elemen) tidak menerima lebar.display: block;
semacam kekalahan tujuan menggunakan tabel. Saya sukatable-layout: fixed;
pilihannya, itu bekerja dengan baik untuk saya.table-layout:fixed
mendistribusikan lebar kolom dengan cara yang kurang cerdas. Apakah ada opsi lain yang akan menetapkan lebar kolom dengan cara yang samatable-layout: normal
dan belum menampilkan elipsis dengan benar?Ini juga penting untuk dimasukkan
Ke tabel yang berisi, jadi itu beroperasi dengan baik di IE9 (jika Anda menggunakan max-width) juga.
sumber
Seperti yang dikatakan sebelumnya, Anda bisa menggunakan
td { display: block; }
tetapi ini mengalahkan tujuan menggunakan tabel.Anda dapat menggunakan
table { table-layout: fixed; }
tetapi mungkin Anda ingin berperilaku berbeda untuk beberapa colum.Jadi cara terbaik untuk mencapai apa yang Anda inginkan adalah dengan membungkus teks Anda dalam
<div>
dan menerapkan CSS Anda ke<div>
(bukan ke<td>
) seperti ini:sumber
Coba gunakan
max-width
alih-alihwidth
, tabel akan tetap menghitung lebar secara otomatis.Bekerja bahkan dalam
ie11
(dengan mode kompatibilitas ie8).jsfiddle .
sumber
Halaman demo
Untuk tabel dengan lebar dinamis, saya menemukan cara di bawah ini untuk menghasilkan hasil yang memuaskan. Masing-masing
<th>
yang ingin memiliki kemampuan teks-dipangkas harus memiliki elemen pembungkus dalam yang membungkus isi<th>
izintext-overflow
untuk bekerja.Ini secara efektif akan menyebabkan lebar elemen menjadi "terikat" ke lebar viewport (jendela browser) dan akan menghasilkan kliping konten yang responsif. Atur
vw
unit ke nilai memuaskan yang dibutuhkan.CSS minimal:
Ini demo yang bisa dijalankan:
sumber
Hanya menawarkan alternatif karena saya mempunyai masalah ini dan tidak ada jawaban lain di sini yang memiliki efek yang saya inginkan. Jadi alih-alih saya menggunakan daftar. Sekarang secara semantik informasi yang saya hasilkan dapat dianggap sebagai data tabular tetapi juga data yang terdaftar.
Jadi pada akhirnya yang saya lakukan adalah:
Jadi pada dasarnya
ul
adalahtable
,li
adalahtr
, danspan
sekarangtd
.Kemudian di CSS saya mengatur
span
elemen menjadidisplay:block;
danfloat:left;
(saya lebih suka kombinasiinline-block
itu karena akan bekerja di versi IE yang lebih lama, untuk menghapus efek float lihat: http://css-tricks.com/snippets/css/clear- memperbaiki / ) dan juga memiliki elips:Kemudian semua yang Anda lakukan adalah mengatur
max-widths
rentang Anda dan itu akan memberikan daftar tampilan tabel.sumber
<td><ul>...</ul></td>
)? Tampaknya tidak berfungsi untuk saya :(Alih-alih menggunakan ellipsis untuk menyelesaikan masalah teks yang meluap, saya menemukan bahwa input yang dinonaktifkan dan ditata terlihat lebih baik dan masih memungkinkan pengguna untuk melihat dan memilih seluruh string jika perlu.
Itu tampak seperti bidang teks tetapi mampu menyorot sehingga lebih ramah pengguna
sumber
Periksa
box-sizing
properti css daritd
elemen Anda . Saya punya masalah dengan template css yang menetapkanborder-box
nilai. Anda perlu mengaturbox-sizing: content-box
.sumber
Biarkan meja Anda apa adanya. Hanya membungkus konten di dalam TD dengan rentang yang diterapkan pemotongan CSS.
sumber
Jika Anda tidak ingin mengatur max-width ke td (seperti dalam jawaban ini ), Anda dapat mengatur max-width ke div:
function so_hack(){}
http://jsfiddle.net/fd3Zx/754/function so_hack(){}
Catatan: 100% tidak berfungsi, tetapi 99% berhasil di FF. Browser modern lainnya tidak perlu hack div konyol.
sumber