Saya ingin tata letak div dua kolom, di mana masing-masing dapat memiliki lebar variabel misalnya
div {
float: left;
}
.second {
background: #ccc;
}
<div>Tree</div>
<div class="second">View</div>
Saya ingin 'view' div untuk memperluas ke seluruh lebar yang tersedia setelah 'tree' div telah mengisi ruang yang dibutuhkan.
Saat ini, 'view' div saya diubah ukurannya menjadi konten di dalamnya. Ini juga akan bagus jika kedua divs mengambil seluruh ketinggian.
Bukan duplikat penafian:
- Perluas div ke lebar maks saat float: left diatur karena di sana yang kiri memiliki lebar tetap.
- Bantuan dengan div - buat div sesuai dengan lebar yang tersisa karena saya memerlukan dua kolom yang disejajarkan ke kiri
html
css
multiple-columns
Anurag Uniyal
sumber
sumber
overflow hidden
Jawaban:
Solusi untuk ini sebenarnya sangat mudah, tetapi sama sekali tidak jelas. Anda harus memicu sesuatu yang disebut "blok konteks format" (BFC), yang berinteraksi dengan pelampung dengan cara tertentu.
Ambil div kedua itu, hapus float, dan berikan itu
overflow:hidden
. Nilai luapan apa pun selain yang terlihat membuat blok yang disetel menjadi BFC. BFC tidak mengijinkan pelampung keturunan untuk melarikan diri dari mereka, mereka juga tidak membiarkan saudara kandung / leluhur mengapung ke dalamnya. Efek bersih di sini adalah bahwa div yang terapung akan melakukan tugasnya, kemudian div kedua akan menjadi blok biasa, mengambil semua lebar yang tersedia kecuali yang ditempati oleh float .Ini harus bekerja di semua browser saat ini, meskipun Anda mungkin harus memicu hasLayout di IE6 dan 7. Saya tidak bisa mengingat.
Demo:
sumber
Saya baru saja menemukan keajaiban kotak fleksibel (layar: fleksibel). Coba ini:
Kotak fleksibel memberi saya kontrol yang saya harapkan dimiliki css selama 15 tahun. Akhirnya di sini! Info lebih lanjut: https://css-tricks.com/snippets/css/a-guide-to-flexbox/
sumber
flex-grow: 100;
bukanflex-grow: 1;
?flex-grow:10
dan kemudian saya akan mengatur #b menjadiflex-grow: 90
jadi #a akan menjadi 10% dari lebar garis dan #b akan menjadi 90% dari lebar garis. Jika tidak ada elemen lain yang memiliki gaya lebar flex, maka secara teknis tidak masalah apa yang Anda masukkan.Solusi Flexbox
Untuk inilah
flex-grow
properti itu.Catatan: Tambahkan awalan vendor fleksibel jika diperlukan oleh browser yang didukung .
sumber
Ini akan menjadi contoh yang baik dari sesuatu yang sepele untuk dilakukan dengan tabel dan sulit (jika tidak mustahil, setidaknya dalam arti lintas-browser) untuk dilakukan dengan CSS.
Jika kedua kolom memiliki lebar tetap, ini akan mudah.
Jika salah satu kolom adalah lebar tetap, ini akan sedikit lebih sulit tetapi sepenuhnya bisa dilakukan.
Dengan lebar kedua kolom variabel, IMHO Anda hanya perlu menggunakan tabel dua kolom.
sumber
display:none;
membuat sebanyak mungkin responsif 100% pada skala geser kadang lebih baik mengubah desain Anda sepenuhnya untuk ponsel yang memanfaatkan nuansa layar sentuh. dan gaya tombol.Lihat solusi ini
sumber
Gunakan
calc
:Masalahnya adalah bahwa semua lebar harus didefinisikan secara eksplisit, baik sebagai nilai (px dan em berfungsi dengan baik), atau sebagai persen dari sesuatu yang secara eksplisit didefinisikan sendiri.
sumber
Di sini, ini mungkin membantu ...
sumber
<div class="clear" style="clear: both; height: 1px; overflow: hidden; font-size:0pt; margin-top: -1px;"></div>
Saya tidak mengerti mengapa orang mau bekerja keras untuk menemukan solusi CSS murni untuk tata letak kolom sederhana yang SANGAT MUDAH menggunakan yang lama
TABLE
tag .Semua Peramban masih memiliki logika tata letak tabel ... Panggil saya mungkin dinosaurus, tapi saya katakan biarkan itu membantu Anda.
Jauh lebih tidak beresiko dalam hal kompatibilitas lintas-browser juga.
sumber
media-queries
meletakkan kedua kolom satu di atas yang lain di perangkat kecil, tidak mungkin dengantable
tag yang lama . Agar ini berfungsi, Anda perlu menerapkanCSS
gaya tabel. Jadi, untuk saat ini lebih baik menyelesaikannya denganCSS
jika Anda menginginkan tata letak responsif untuk ukuran layar apa pun.Jika lebar kolom lainnya sudah diperbaiki, bagaimana menggunakan
calc
fungsi CSS yang berfungsi untuk semua browser umum :Dengan cara ini lebar baris kedua akan dihitung (yaitu sisa lebar) dan diterapkan secara responsif.
sumber
css-grid
,. Juga bekerja denganposition: fixed
yang membuatnya menjadi pilihan sempurna! Terima kasih!sumber
Anda dapat mencoba Layout Kotak CSS .
sumber
flex-grow - Ini mendefinisikan kemampuan untuk item flex tumbuh jika perlu. Ia menerima nilai tanpa unit yang berfungsi sebagai proporsi. Ini menentukan jumlah ruang yang tersedia di dalam wadah fleksibel yang harus diambil barang.
Jika semua item memiliki flex-grow set ke 1, sisa ruang dalam wadah akan didistribusikan secara merata ke semua anak. Jika salah satu dari anak-anak memiliki nilai 2, ruang yang tersisa akan memakan waktu dua kali lebih banyak daripada yang lain (atau itu akan mencoba, setidaknya). Lihat lebih lanjut di sini
sumber
Implementasi yang sedikit berbeda,
Dua panel div (konten + ekstra), berdampingan,
content panel
membesar jikaextra panel
tidak ada.jsfiddle: http://jsfiddle.net/qLTMf/1722/
sumber
Pat - Anda benar. Itulah sebabnya solusi ini akan memuaskan "dinosaurus" dan orang-orang sezaman. :)
sumber
Anda dapat menggunakan pustaka CSS W3 yang berisi kelas yang dipanggil
rest
yang melakukan hal itu:Jangan lupa menautkan pustaka CSS di halaman
header
:Inilah demo resmi: W3 School Tryit Editor
sumber
Saya tidak yakin apakah ini jawaban yang Anda harapkan tetapi, mengapa Anda tidak mengatur lebar Tree menjadi 'otomatis' dan lebar 'Tampilan' menjadi 100%?
sumber
Lihat kerangka tata letak CSS yang tersedia. Saya akan merekomendasikan Simpl atau, kerangka kerja cetak biru yang sedikit lebih kompleks.
Jika Anda menggunakan Simpl (yang melibatkan mengimpor hanya satu file simpl.css ), Anda dapat melakukan ini:
, untuk tata letak 50-50, atau:
, untuk yang 25-75.
Sesederhana itu.
sumber
Terima kasih atas steker Simpl.css!
ingat untuk membungkus semua kolom Anda
ColumnWrapper
seperti itu.Saya akan merilis versi 1.0 dari Simpl.css jadi bantu sebarkan!
sumber
Saya menulis fungsi javascript yang saya panggil dari jQuery $ (document) .ready (). Ini akan mem-parsing semua anak dari div induk dan hanya memperbarui sebagian besar anak yang tepat.
html
javascript
sumber
Ini cukup mudah menggunakan flexbox. Lihat cuplikan di bawah. Saya telah menambahkan wadah pembungkus untuk mengontrol aliran dan mengatur ketinggian global. Perbatasan telah ditambahkan juga untuk mengidentifikasi elemen. Perhatikan bahwa div sekarang juga memperluas ke ketinggian penuh, seperti yang diperlukan. Awalan vendor harus digunakan untuk flexbox dalam skenario dunia nyata karena belum sepenuhnya didukung.
Saya telah mengembangkan alat gratis untuk memahami dan merancang tata letak menggunakan flexbox. Lihat di sini: http://algid.com/Flex-Designer
sumber
stretch
karena ini adalah nilai default dan tidak perlu membuat wadah elemen anak jadidisplay:flex
tidak berguna untuk elemen dalamJika kedua lebar adalah panjang variabel, mengapa Anda tidak menghitung lebar dengan beberapa sisi scripting atau server?
<div style="width: <=% getTreeWidth() %>">Tree</div>
sumber