Saya memiliki struktur halaman sebagai:
<div class="parent">
<div class="child-left floatLeft">
</div>
<div class="child-right floatLeft">
</div>
</div>
Sekarang, child-left
DIV akan memiliki lebih banyak konten, sehingga parent
tinggi DIV bertambah sesuai dengan DIV anak.
Namun masalahnya adalah child-right
ketinggian tidak bertambah. Bagaimana saya bisa membuat ketinggiannya sama dengan orang tuanya?
Jawaban:
Untuk
parent
elemen, tambahkan properti berikut:maka untuk
.child-right
ini:Temukan hasil yang lebih rinci dengan contoh CSS di sini dan informasi lebih lanjut tentang kolom dengan ketinggian yang sama di sini .
sumber
Solusi umum untuk masalah ini menggunakan penentuan posisi absolut atau float yang dipangkas, tetapi ini rumit karena membutuhkan penyetelan yang luas jika kolom Anda berubah dalam jumlah + ukuran, dan Anda perlu memastikan kolom "utama" Anda selalu yang terpanjang. Sebaliknya, saya sarankan Anda menggunakan salah satu dari tiga solusi yang lebih kuat:
display: flex
: sejauh ini solusi paling sederhana & terbaik dan sangat fleksibel - tetapi tidak didukung oleh IE9 dan yang lebih lama.table
ataudisplay: table
: sangat sederhana, sangat kompatibel (hampir semua browser yang pernah ada), cukup fleksibel.display: inline-block; width:50%
dengan hack margin negatif: cukup sederhana, tetapi batas kolom-bawah sedikit rumit.1.
display:flex
Ini sangat sederhana, dan mudah untuk beradaptasi dengan tata letak yang lebih kompleks atau lebih detail - tetapi flexbox hanya didukung oleh IE10 atau yang lebih baru (di samping browser modern lainnya).
Contoh: http://output.jsbin.com/hetunujuma/1
Html yang relevan:
Css yang relevan:
Flexbox memiliki dukungan untuk lebih banyak opsi, tetapi untuk memiliki jumlah kolom di atas sudah cukup!
2.
<table>
ataudisplay: table
Cara sederhana & sangat kompatibel untuk melakukan ini adalah dengan menggunakan
table
- Saya sarankan Anda mencobanya terlebih dahulu jika Anda memerlukan dukungan IE lama . Anda sedang berhadapan dengan kolom; divs + float bukan cara terbaik untuk melakukan itu (belum lagi fakta bahwa beberapa level div bersarang hanya untuk meretas batasan css hampir tidak lebih "semantik" daripada hanya menggunakan tabel sederhana). Jika Anda tidak ingin menggunakantable
elemen, pertimbangkan cssdisplay: table
(tidak didukung oleh IE7 dan yang lebih lama).Contoh: http://jsfiddle.net/emn13/7FFp3/
Html yang relevan: (tetapi pertimbangkan menggunakan plain
<table>
)Css yang relevan:
Pendekatan ini jauh lebih kuat daripada menggunakan
overflow:hidden
dengan mengapung. Anda dapat menambahkan cukup banyak jumlah kolom; Anda dapat memilikinya skala otomatis jika Anda inginkan; dan Anda mempertahankan kompatibilitas dengan browser kuno. Berbeda dengan solusi float, Anda juga tidak perlu tahu sebelumnya kolom mana yang paling panjang; timbangan tinggi baik-baik saja.KISS: jangan gunakan float hacks kecuali Anda perlu melakukannya. Jika IE7 merupakan masalah, saya masih akan memilih tabel sederhana dengan kolom semantik di atas solusi trik-CSS yang sulit dirawat dan kurang fleksibel setiap hari.
Omong-omong, jika Anda membutuhkan tata letak agar responsif (mis. Tidak ada kolom pada ponsel kecil), Anda dapat menggunakan
@media
kueri untuk kembali ke tata letak blok polos untuk lebar layar kecil - ini berfungsi baik jika Anda menggunakan<table>
ataudisplay: table
elemen lainnya .3.
display:inline block
dengan hack margin negatif.Alternatif lain adalah menggunakan
display:inline block
.Contoh: http://jsbin.com/ovuqes/2/edit
Html yang relevan: (tidak adanya spasi di antara
div
tag adalah signifikan!)Css yang relevan:
Ini sedikit rumit, dan margin negatif berarti bagian bawah kolom "true" dikaburkan. Ini pada gilirannya berarti Anda tidak dapat memposisikan apa pun relatif ke bagian bawah kolom itu karena itu terpotong oleh
overflow: hidden
. Perhatikan bahwa selain blok inline, Anda dapat mencapai efek yang serupa dengan float.TL; DR : gunakan flexbox jika Anda dapat mengabaikan IE9 dan yang lebih lama; kalau tidak coba tabel (css). Jika tak satu pun dari opsi itu bekerja untuk Anda, ada peretasan margin negatif, tetapi ini dapat menyebabkan masalah tampilan aneh yang mudah terlewatkan selama pengembangan, dan ada batasan tata letak yang perlu Anda perhatikan.
sumber
border-spacing:10px;
pada elemen tabel akan memperkenalkan spasi seperti margin. Atau, Anda bisa menambahkan kolom (kosong) ekstra di mana Anda ingin ruang tambahan. Dan Anda juga bisa menambahkan padding di dalam sel tabel; padding itu akan disertakan di latar belakang, sehingga mungkin bukan yang Anda inginkan. Tetapi Anda benar bahwa itu tidak sefleksibel margin normal. Dan Anda tidak dapat memposisikan apa pun relatif terhadap kolom, yang mungkin menjadi masalah.Untuk orang tua:
Untuk anak-anak:
Anda harus menambahkan beberapa awalan, periksa caniuse.
sumber
Saya menemukan banyak jawaban, tetapi mungkin solusi terbaik bagi saya adalah
Anda dapat memeriksa solusi lain di sini http://css-tricks.com/fluid-width-equal-height-columns/
sumber
Silakan atur div induk untuk
overflow: hidden
kemudian di div anak Anda dapat mengatur jumlah besar untuk padding-bottom. misalnya
padding-bottom: 5000px
dulu
margin-bottom: -5000px
dan kemudian semua div anak akan menjadi ketinggian orang tua.
Tentu saja ini tidak akan berfungsi jika Anda mencoba untuk menempatkan konten di div induk (di luar div lain yang ada)
Contoh: http://jsfiddle.net/Tareqdhk/DAFEC/
sumber
Apakah orang tua memiliki ketinggian? Jika Anda mengatur ketinggian orang tua seperti itu.
Maka Anda dapat membuat anak meregang hingga ketinggian penuh seperti ini.
EDIT
Inilah cara Anda melakukannya menggunakan JavaScript.
sumber
Tampilan tabel CSS sangat ideal untuk ini:
Jawaban asli (diasumsikan kolom mana pun bisa lebih tinggi):
Anda mencoba membuat tinggi orangtua bergantung pada tinggi anak-anak dan tinggi anak-anak bergantung pada tinggi orangtua. Tidak akan menghitung Kolom CSS Faux adalah solusi terbaik. Ada lebih dari satu cara untuk melakukan itu. Saya lebih suka tidak menggunakan JavaScript.sumber
display: table
+display: table-cell
akan menghasilkan hasil yang diinginkan.float
: stackoverflow.com/questions/20110217/…Saya baru-baru ini melakukan ini di situs web saya menggunakan jQuery. Kode menghitung ketinggian div tertinggi dan mengatur div lainnya ke ketinggian yang sama. Inilah tekniknya:
http://www.broken-links.com/2009/01/20/very-quick-equal-height-columns-in-jquery/
Saya tidak percaya
height:100%
akan berhasil, jadi jika Anda tidak secara eksplisit mengetahui ketinggian div, saya tidak berpikir ada solusi CSS murni.sumber
Saya menggunakan ini untuk bagian komentar:
Anda dapat mengapung hak anak ke kanan, tetapi dalam kasus ini saya telah menghitung lebar setiap div secara tepat.
sumber
Jika Anda mengetahui bootstrap, Anda dapat melakukannya dengan mudah dengan menggunakan properti 'flex'. Yang perlu Anda lakukan adalah melewatkan properti css di bawah ini ke div induk
dimana
.homepageSection
div orang tua saya. Sekarang tambahkan div anak di html Anda sebagaidi mana abc adalah div anak saya. Anda dapat memeriksa kesetaraan ketinggian di kedua anak div terlepas dari perbatasan hanya dengan memberikan perbatasan ke div anak
sumber
Saya menggunakan gaya inline hanya untuk memberikan ide.
sumber
Saya belajar trik yang rapi ini dalam wawancara magang. Pertanyaan aslinya adalah bagaimana Anda memastikan ketinggian setiap komponen teratas dalam tiga kolom memiliki ketinggian yang sama yang menunjukkan semua konten yang tersedia. Pada dasarnya membuat komponen anak yang tidak terlihat yang membuat ketinggian maksimum yang mungkin.
sumber