Saya memiliki 2 div: satu di sisi kiri dan satu di sisi kanan halaman saya. Yang di sisi kiri memiliki lebar tetap dan saya ingin yang di sebelah kanan mengisi ruang yang tersisa.
#search {
width: 160px;
height: 25px;
float: left;
background-color: #ffffff;
}
#navigation {
width: 780px;
float: left;
background-color: #A53030;
}
<div id="search">Text</div>
<div id="navigation">Navigation</div>
html
css
width
responsive
alexchenco
sumber
sumber
Jawaban:
Ini sepertinya untuk mencapai apa yang Anda inginkan.
sumber
Masalah yang saya temukan dengan jawaban Boushley adalah bahwa jika kolom kanan lebih panjang dari kiri itu hanya akan membungkus kiri dan melanjutkan mengisi seluruh ruang. Ini bukan perilaku yang saya cari. Setelah mencari melalui banyak 'solusi' saya menemukan tutorial (sekarang tautan sudah mati) untuk membuat tiga halaman kolom.
Penulis menawarkan tiga cara berbeda, satu lebar tetap, satu dengan tiga kolom variabel dan satu dengan kolom luar tetap dan tengah lebar variabel. Jauh lebih elegan dan efektif daripada contoh lain yang saya temukan. Secara signifikan meningkatkan pemahaman saya tentang tata letak CSS.
Pada dasarnya, dalam kasus sederhana di atas, mengambang kolom pertama ke kiri dan beri lebar tetap. Lalu beri kolom di sebelah kanan margin kiri yang sedikit lebih lebar dari kolom pertama. Itu dia. Selesai Kode Ala Boushley:
Berikut ini demo di Stack Snippets & jsFiddle
Dengan contoh Boushley kolom kiri memegang kolom lainnya di sebelah kanan. Begitu kolom kiri berakhir, kanan mulai mengisi seluruh ruang lagi. Di sini kolom kanan hanya menyelaraskan lebih jauh ke dalam halaman dan kolom kiri menempati margin lemak yang besar. Tidak diperlukan interaksi aliran.
sumber
Solusinya datang dari properti tampilan.
Pada dasarnya Anda perlu membuat dua divs bertindak seperti sel tabel. Jadi, alih-alih menggunakan
float:left
, Anda harus menggunakandisplay:table-cell
di kedua divs, dan untuk div lebar dinamis Anda perlu mengaturwidth:auto;
juga. Kedua div harus ditempatkan dalam wadah 100% lebar dengandisplay:table
properti.Inilah css:
Dan HTML:
PENTING: Untuk Internet Explorer Anda perlu menentukan properti float pada div lebar dinamis, jika tidak ruang tidak akan terisi.
Saya harap ini akan menyelesaikan masalah Anda. Jika mau, Anda dapat membaca artikel lengkap yang saya tulis tentang ini di blog saya .
sumber
Saat ini, Anda harus menggunakan
flexbox
metode ini (dapat disesuaikan dengan semua browser dengan awalan browser).Info lebih lanjut: https://css-tricks.com/snippets/css/a-guide-to-flexbox/
sumber
Karena ini adalah pertanyaan yang agak populer, saya cenderung berbagi solusi yang bagus menggunakan BFC.
Contoh codepen berikut di sini .
Dalam hal ini,
overflow: auto
memicu perilaku konteks dan membuat elemen yang tepat berkembang hanya ke lebar yang tersedia dan secara alami akan berkembang menjadi lebar penuh jika.left
menghilang. Trik yang sangat berguna dan bersih untuk banyak tata letak UI, tetapi mungkin sulit untuk memahami "mengapa ia bekerja" pada awalnya.sumber
auto
dapat memicu itu tergantung pada isinya. Anda juga dapat menggunakan nilai luapan lainnya untuk mendapatkan efek yang sama,hidden
mungkin lebih baik untuk kasus Anda.Jika Anda tidak memerlukan kompatibilitas dengan versi browser tertentu (misalnya IE
108 atau kurang), Anda dapat menggunakancalc()
fungsi CSS:sumber
Jawaban @ Boushley adalah yang terdekat, namun ada satu masalah yang tidak diatasi yang telah ditunjukkan. The kanan div mengambil seluruh lebar browser; konten mengambil lebar yang diharapkan. Untuk melihat masalah ini dengan lebih baik:
http://jsfiddle.net/79hpS/
Konten berada di tempat yang benar (di Firefox), namun lebarnya salah. Ketika elemen anak mulai mewarisi lebar (misalnya tabel dengan
width: 100%
) mereka diberi lebar sama dengan browser yang menyebabkan mereka meluap dari kanan halaman dan membuat bilah gulir horizontal (di Firefox) atau tidak melayang dan didorong ke bawah ( dalam chrome).Anda dapat memperbaiki ini dengan mudah dengan menambahkan
overflow: hidden
ke kolom kanan. Ini memberi Anda lebar yang benar untuk konten dan div. Selanjutnya, tabel akan menerima lebar yang benar dan mengisi lebar yang tersisa tersedia.Saya mencoba beberapa solusi lain di atas, mereka tidak bekerja sepenuhnya dengan kasus tepi tertentu dan terlalu berbelit-belit untuk menjamin memperbaikinya. Ini berfungsi dan sederhana.
Jika ada masalah atau masalah, jangan ragu untuk melaporkannya.
sumber
overflow: hidden
memang memperbaiki ini, terima kasih. (Jawaban yang ditandai salah BTW karenaright
sebenarnya mengambil semua ruang yang tersedia pada orang tua, Anda dapat melihat ini di semua browser saat memeriksa elemen)overflow: hidden
menempatkan kolom kanan dalam konteks pemformatan bloknya sendiri. Elemen blok mengambil semua ruang horisontal yang tersedia bagi mereka. Lihat: developer.mozilla.org/en-US/docs/Web/Guide/CSS/…overflow:xxx
atribut kuncinya. Seperti yang Anda katakan, itu berhenti#right
berkembang di bawahnya#left
. Ini sangat rapi memecahkan masalah yang saya alami menggunakan jQuery UI resizable - dengan#right
set dengan atribut overflow dan#left
diatur sebagai resizable, Anda memiliki batas bergerak sederhana. Lihat jsfiddle.net/kmbro/khr77h0t .Berikut adalah sedikit perbaikan untuk solusi yang diterima, yang mencegah kolom kanan jatuh di bawah kolom kiri. Diganti
width: 100%;
denganoverflow: hidden;
solusi yang rumit, jika seseorang tidak mengetahuinya.http://jsfiddle.net/MHeqG/2600/
[Sunting] Juga periksa contoh untuk tata letak tiga kolom: http://jsfiddle.net/MHeqG/3148/
sumber
Jika Anda mencoba mengisi ruang yang tersisa di dalam kotak fleksibel antara 2 item, tambahkan kelas berikut ke div kosong di antara 2 item yang ingin Anda pisahkan:
sumber
Menggunakan
display:flex
sumber
Jawaban Boushley tampaknya menjadi cara terbaik untuk mengatur agar menggunakan pelampung ini. Namun, ini bukan tanpa masalah. Apung bersarang di dalam elemen yang diperluas tidak akan tersedia untuk Anda; itu akan merusak halaman.
Metode yang ditampilkan pada dasarnya "palsu" ketika datang ke elemen ekspansi - itu tidak benar-benar mengambang, itu hanya bermain bersama dengan elemen mengambang lebar tetap menggunakan marginnya.
Masalahnya kemudian adalah bahwa: elemen yang mengembang tidak melayang. Jika Anda mencoba dan memiliki nested mengapung di dalam elemen ekspansi, item melayang "bersarang" itu tidak benar-benar bersarang sama sekali; ketika Anda mencoba untuk menempel di
clear: both;
bawah item mengambang "bersarang" Anda, Anda akan berakhir membersihkan float tingkat atas juga.Kemudian, untuk menggunakan solusi Boushley, saya ingin menambahkan bahwa Anda harus meletakkan div seperti berikut: .fakeFloat {height: 100%; lebar: 100%; mengapung: kiri; } dan letakkan ini langsung di dalam div yang diperluas; semua konten div yang diperluas harus masuk ke dalam elemen FakeFloat ini.
Untuk alasan ini, saya akan merekomendasikan menggunakan tabel dalam kasus khusus ini. Elemen apung sebenarnya tidak dirancang untuk melakukan ekspansi yang Anda inginkan, sedangkan solusi menggunakan tabel sepele. Argumen umumnya dibuat bahwa mengambang lebih tepat untuk tata letak, bukan tabel .. tetapi Anda tidak menggunakan mengambang di sini, Anda berpura-pura - dan semacam itu mengalahkan tujuan dari argumen gaya untuk kasus khusus ini, di pendapat saya yang sederhana.
sumber
overflow: hidden
. jsfiddle.net/dave2/a5jbpc85Saya mencoba solusi di atas untuk cairan kiri, dan hak tetap tetapi tidak ada yang bekerja (saya tahu pertanyaannya adalah sebaliknya tetapi saya pikir ini relevan). Inilah yang berhasil:
sumber
Saya punya masalah serupa dan saya menemukan solusinya di sini: https://stackoverflow.com/a/16909141/3934886
Solusinya adalah untuk div pusat tetap dan kolom sisi cair.
Jika Anda menginginkan kolom kiri yang diperbaiki, cukup ubah rumusnya.
sumber
Anda dapat menggunakan properti Grid CSS, adalah struktur cara yang paling jelas, bersih dan intuitif kotak Anda.
sumber
Saya ingin tahu bahwa tidak ada yang terbiasa
position: absolute
denganposition: relative
Jadi, solusi lain adalah:
HTML
CSS
Contoh jsfiddle
sumber
/ * * css * /
/ * * html * /
sumber
Saya punya solusi yang sangat sederhana untuk ini! // HTML
// CSS
Tautan: http://jsfiddle.net/MHeqG/
sumber
Saya memiliki masalah yang sama dan muncul dengan yang berikut ini yang bekerja dengan baik
CSS:
HTML:
Metode ini tidak akan membungkus ketika jendela menyusut tetapi akan secara otomatis memperluas area 'konten'. Ini akan menjaga lebar statis untuk menu situs (kiri).
Dan untuk demo kotak konten yang diperluas secara otomatis dan kotak vertikal kiri (menu situs):
https://jsfiddle.net/tidan/332a6qte/
sumber
Coba tambahkan posisi
relative
, hapuswidth
danfloat
properti di sisi kanan, lalu tambahleft
danright
properti dengan0
nilai.Anda juga dapat menambahkan
margin left
aturan dengan nilai didasarkan pada lebar elemen kiri (+ beberapa piksel jika Anda memerlukan ruang di antaranya) untuk mempertahankan posisinya.Contoh ini berfungsi untuk saya:
sumber
Coba ini. Ini berhasil untuk saya.
sumber
Saya telah mengerjakan masalah ini selama dua hari dan memiliki solusi yang dapat bekerja untuk Anda dan siapa pun yang mencoba membuat lebar Tetap responsif ke kiri dan sisi kanan mengisi sisa layar tanpa membungkus sisi kiri. Tujuan yang saya asumsikan adalah membuat halaman responsif di browser maupun perangkat seluler.
Ini Kodenya
Ini biola saya yang mungkin bekerja untuk Anda seperti yang terjadi pada saya. https://jsfiddle.net/Larry_Robertson/62LLjapm/
sumber
Aturan untuk barang dan wadah;
Gunakan ruang putih: nowrap; untuk teks dalam item terakhir untuk restrukturisasi mereka.
Item X% | Butir Y% | Barang Z%
Total panjang selalu = 100%!
jika
kemudian
Item X = 70%
Item X dominan (item pertama dominan dalam tata letak CSS tabel)!
Coba maks-konten; properti untuk div di dalam untuk menyebarkan div dalam wadah:
}
sumber
Solusi termudah adalah menggunakan margin. Ini juga akan responsif!
sumber
Solusi paling sederhana adalah dengan membuat lebar div kiri sama dengan 100% - lebar div kanan ditambah margin di antara mereka.
https://codepen.io/tamjk/pen/dybqKBN
sumber
Saya mengalami masalah yang sama mencoba tata letak beberapa kontrol jqueryUI . Meskipun filosofi umum sekarang adalah "menggunakan
DIV
bukanTABLE
", saya menemukan dalam kasus saya menggunakan TABEL bekerja lebih baik. Khususnya, jika Anda perlu memiliki penyelarasan langsung dalam dua elemen (misalnya, pemusatan vertikal, pemusatan horizontal, dll.) Opsi yang tersedia dengan TABEL memberikan kontrol intuitif yang sederhana untuk ini.Inilah solusi saya:
sumber
<font>
,<b>
, dll HTML berevolusi masa lalu yang kurang fokus pada presentasi.overflow
.display:table
untuk mencapai tampilan data non-tabular yang diinginkan bersih. Memaksa data non-tabular seperti kolom halaman atau kontrol formulir ke dalam tabel HTML untuk mengontrol tata letak tidak jelas.