Apakah hal seperti itu mungkin menggunakan CSS dan dua tag DIV inline-block (atau apa pun) alih-alih menggunakan tabel?
Versi tabelnya adalah ini (batas ditambahkan sehingga Anda dapat melihatnya):
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head></head>
<body>
<table style="width:100%;">
<tr>
<td style="border:1px solid black;width:100px;height:10px;"></td>
<td style="border:1px solid black;height:10px;"></td>
</tr>
</table>
</body>
</html>
Ini menghasilkan kolom kiri dengan WIDTH TETAP (bukan lebar persentase), dan kolom kanan yang mengembang untuk mengisi RUANG SISA di baris. Kedengarannya cukup sederhana, bukan? Selain itu, karena tidak ada yang "mengambang", tinggi induk induk dengan benar mengembang untuk mencakup ketinggian konten.
--MULAI RANT -
Saya telah melihat implementasi "perbaikan jelas" dan "grail suci" untuk tata letak multi-kolom dengan kolom sisi lebar-tetap, dan mereka payah dan rumit. Mereka membalik urutan elemen, mereka menggunakan lebar persentase, atau mereka menggunakan float, margin negatif, dan hubungan antara atribut "kiri", "kanan", dan "margin" sangat kompleks. Lebih jauh lagi, tata letak adalah sub-pixel sensitif sehingga menambahkan bahkan satu pixel dari perbatasan, padding, atau margin akan memecah seluruh tata letak, dan mengirim seluruh kolom membungkus ke baris berikutnya. Misalnya, kesalahan pembulatan adalah masalah bahkan jika Anda mencoba melakukan sesuatu yang sederhana, seperti meletakkan 4 elemen pada sebuah garis, dengan lebar masing-masing diatur ke 25%.
--END RANT--
Saya sudah mencoba menggunakan "inline-block" dan "white-space: nowrap;", tetapi masalahnya adalah saya tidak bisa mendapatkan elemen ke-2 untuk mengisi ruang yang tersisa di telepon. Mengatur lebar ke sesuatu seperti "width: 100% - (LeftColumWidth) px" akan berfungsi dalam beberapa kasus, tetapi melakukan penghitungan dalam properti lebar tidak benar-benar didukung.
sumber
display: table-*
konstruksi yang akan bekerja, tetapi tidak benar-benar "lebih semantik" baik (menjadidiv
sup yang mengerikan ) dan merusak kompatibilitas IE6. Saya pribadi akan tetap dengan<table>
, kecuali seseorang berhasil datang dengan ide jenius sederhana yang bekerja tanpaJawaban:
Lihat: http://jsfiddle.net/qx32C/36/
Kenapa saya ganti
margin-left: 100px
denganoverflow: hidden
on.right
?EDIT: Berikut adalah dua mirror untuk tautan di atas (mati):
sumber
box-sizing: border-box
didiv
s. Tebakan saja, karena Anda tidak memberikan demo yang menunjukkan perilaku yang Anda uraikan. Yang makhluk mengatakan, paradisplay: table
solusi berbasis biasanya lebih baik . Ini adalah pertanyaan yang sangat lama, tapi saya pikir saya mencoba menghindari apa pun yang berhubungan dengan tabel dalam pertanyaan ini karena perilaku OP.Solusi modern menggunakan flexbox:
http://jsfiddle.net/m5Xz2/100/
sumber
flex: 1
bukanwidth: 100%
?flex: 1
adalah singkatanflex-grow: 1
. Ini atribut kombinasi:flex: <grow> <shrink> <basis>
.flexbugs
tahu.Kompatibel dengan peramban modern umum (IE 8+): http://jsfiddle.net/m5Xz2/3/
sumber
display:table
.inline-block
mengisi sisa baris.Anda dapat menggunakan calc (100% - 100px) pada elemen fluida, bersama dengan tampilan: inline-block untuk kedua elemen.
Ketahuilah bahwa tidak boleh ada spasi di antara tag, jika tidak, Anda juga harus mempertimbangkan ruang itu di kalk.
Contoh cepat: http://jsfiddle.net/dw689mt4/1/
sumber
Saya telah menggunakan
flex-grow
properti untuk mencapai tujuan ini. Anda harus mengaturdisplay: flex
untuk wadah induk, maka Anda perlu mengaturflex-grow: 1
untuk blok yang Anda ingin mengisi ruang yang tersisa, atau samaflex: 1
seperti tanius yang disebutkan dalam komentar.sumber
Jika Anda tidak dapat menggunakan
overflow: hidden
(karena Anda tidak mauoverflow: hidden
) atau jika Anda tidak menyukai peretasan / penyelesaian CSS, Anda bisa menggunakan JavaScript. Perhatikan bahwa ini mungkin tidak berfungsi dengan baik karena ini JavaScript.http://jsfiddle.net/ys2eogxm/
sumber
Ketika Anda menyerah blok inline
http://jsfiddle.net/RXrvZ/3731/
(dari CSS Float: Mengambang gambar di sebelah kiri teks )
sumber