Saya punya situs dengan struktur berikut:
<div id="header"></div>
<div id="main">
<div id="navigation"></div>
<div id="content"></div>
</div>
<div id="footer"></div>
Navigasi di sebelah kiri dan konten div di sebelah kanan. Informasi untuk div konten ditarik melalui PHP, jadi setiap kali berbeda.
Bagaimana saya bisa menskalakan navigasi secara vertikal sehingga tingginya sama dengan tinggi div konten, tidak peduli halaman mana yang dimuat?
display: flex; align-items: stretch;
div # main. Dan jangan gunakanheight: 100%
untuk konten div #Jawaban:
CATATAN : Jawaban ini berlaku untuk browser lawas tanpa dukungan untuk standar Flexbox. Untuk pendekatan modern, lihat: https://stackoverflow.com/a/23300532/1155721
Saya sarankan Anda melihat Kolom Ketinggian yang Sama dengan Cross-Browser CSS dan No Hacks .
Pada dasarnya, melakukan ini dengan CSS dengan cara yang kompatibel dengan browser bukan hal sepele (tetapi sepele dengan tabel) jadi temukan sendiri solusi tepat yang telah dikemas sebelumnya.
Juga, jawabannya bervariasi pada apakah Anda ingin tinggi 100% atau sama tinggi. Biasanya tingginya sama. Jika tinggi 100% jawabannya sedikit berbeda.
sumber
border:1px solid blue
misalnya dicontainer2
: perbatasan biru berada di dua kolom pertama, bukan pada kolom kedua hanya seperti yang Anda harapkan.display:table
Untuk orang tua:
Anda harus menambahkan beberapa awalan, http://css-tricks.com/using-flexbox/ .
Sunting: Seperti yang dicatat @Adam Garner, luruskan-item: regangkan; tidak dibutuhkan. Penggunaannya juga untuk orang tua, bukan anak-anak. Jika Anda ingin mendefinisikan peregangan anak, Anda menggunakan menyelaraskan diri.
sumber
align-items: center
maka item yang Anda butuhkan untuk meregangkan kebutuhanalign-self: normal
Ini adalah masalah yang membuat frustrasi yang berurusan dengan desainer sepanjang waktu. Caranya adalah Anda perlu mengatur ketinggian hingga 100% pada BODY dan HTML di CSS Anda.
Kode yang tampaknya tidak berguna ini adalah untuk mendefinisikan ke browser apa arti 100%. Frustrasi, ya, tetapi merupakan cara paling sederhana.
sumber
html { height: 100%; } body { height: 98%; }
.Saya menemukan bahwa pengaturan dua kolom untuk
display: table-cell;
bukannyafloat: left;
berfungsi dengan baik.sumber
Jika Anda tidak keberatan div navigasi terpotong saat div konten pendek tiba-tiba, setidaknya ada satu cara mudah:
Selain itu ada teknik faux-kolom .
sumber
sumber
menggunakan jQuery:
sumber
Math.max()
akan menjadi temanmu di sini.css
fungsi JQuery , Anda tidak dapat membedakan antara layar dan media cetak, seperti yang biasa Anda lakukan saat menggunakan solusi CSS murni. Dengan demikian, Anda mungkin memiliki masalah pencetakan.Coba buat margin bawah 100%.
sumber
Lihatlah contoh ini .
sumber
height: 100%
tetapi ternyata itu tidak diperlukan.height : <percent>
hanya akan berfungsi jika Anda memiliki semua simpul induk dengan tinggi persen yang ditentukan dengan ketinggian tetap dalam piksel, ems, dll. di tingkat atas. Dengan begitu, ketinggian akan turun ke elemen Anda.Anda dapat menentukan 100% untuk html dan elemen tubuh seperti @Travis dinyatakan sebelumnya untuk memiliki tinggi halaman yang turun ke node Anda.
sumber
Setelah lama mencari dan mencoba, tidak ada yang menyelesaikan masalah saya kecuali
pada div anak-anak
dan untuk orang tua berlaku ini
juga, saya menggunakan bootstrap dan ini tidak merusak responsif untuk saya.
sumber
flex-direction: column;
ini agar bekerja untuk saya.Berdasarkan metode yang dijelaskan dalam artikel ini saya telah membuat solusi dinamis. Kurang:
Html:
Kurang:
sumber
Tambahkan
display: grid
ke induknyasumber
Saya tahu ini sudah lama sejak pertanyaan itu dibuat, tetapi saya menemukan solusi yang mudah dan berpikir seseorang dapat menggunakannya (maaf tentang bahasa Inggris yang buruk). Ini dia:
CSS
HTML
Contoh sederhana. Perhatikan bahwa Anda dapat berubah menjadi responsif.
sumber
Solusi saya:
sumber
Ada sedikit kontradiksi dalam judul pertanyaan dan kontennya. Judul berbicara tentang div induk, tetapi pertanyaannya membuatnya seperti Anda ingin dua div saudara kandung (navigasi dan konten) memiliki ketinggian yang sama.
Apakah Anda (a) ingin navigasi dan konten 100% ketinggian utama, atau (b) ingin navigasi dan konten sama tingginya?
Saya akan menganggap (b) ... jika demikian, saya tidak berpikir Anda akan dapat melakukannya dengan struktur halaman Anda saat ini (setidaknya, tidak dengan CSS murni dan tanpa skrip). Anda mungkin perlu melakukan sesuatu seperti:
dan atur div konten untuk memiliki margin kiri berapa pun lebar panel navigasi. Dengan begitu, konten konten berada di sebelah kanan navigasi dan Anda dapat mengatur div navigasi menjadi 100% dari tinggi konten.
EDIT: Saya melakukan ini sepenuhnya di kepala saya, tetapi Anda mungkin juga perlu mengatur margin kiri div navigasi ke nilai negatif atau mengatur itu mutlak dibiarkan 0 untuk mendorongnya kembali ke paling kiri. Masalahnya adalah, ada banyak cara untuk melakukan ini tetapi tidak semuanya akan kompatibel dengan semua browser.
sumber
[Mengacu pada kode Kurang Dmity dalam jawaban lain] Saya menduga ini semacam "kode semu"?
Dari apa yang saya pahami coba gunakan teknik faux-kolom yang harus melakukan trik.
http://www.alistapart.com/articles/fauxcolumns/
Semoga ini membantu :)
sumber
sumber
memberi
position: absolute;
kepada anak itu berhasil dalam kasus sayasumber
Anda menggunakan CSS Flexbox
sumber
Jawaban ini tidak ideal lagi karena CSS flexbox dan kisi di mana diterapkan ke CSS. Namun itu masih merupakan solusi yang berhasil
Pada layar yang lebih kecil Anda mungkin ingin menjaga ketinggian otomatis karena col1, col2 dan col3 ditumpuk satu sama lain.
Namun setelah breakpoint kueri media Anda ingin cols muncul di sebelah satu sama lain dengan ketinggian yang sama untuk semua kolom.
1125 px hanya merupakan contoh breakpoint lebar jendela dan setelah itu Anda ingin membuat semua kolom diatur ke ketinggian yang sama.
Anda bisa, tentu saja, menetapkan lebih banyak breakpoint jika perlu.
sumber
Saya memiliki masalah yang sama, ini bekerja berdasarkan jawaban Hakam Fostok, saya telah membuat contoh kecil, dalam beberapa kasus mungkin berhasil tanpa harus menambahkan
display: flex;
danflex-direction: column;
pada wadah indukJSFiddle
sumber
Seperti yang ditunjukkan sebelumnya, flexbox adalah yang termudah. misalnya.
ini akan menyelaraskan semua elemen anak ke pusat di dalam elemen induk.
sumber
Dari:
http://getbootstrap.com.vn/examples/equal-height-columns/equal-height-columns.css
menyatakan bootstrap tetapi Anda tidak perlu bootstrap untuk menggunakan ini. Menjawab pertanyaan lama ini, karena ini berhasil untuk saya, dan sepertinya cukup mudah untuk diterapkan.
Ini adalah jawaban yang sama yang saya berikan untuk Pertanyaan ini
sumber
Berikut demo mode lama berdasarkan
position: absolute
wadah konten danposition: relative
wadah induk.Adapun cara modern untuk melakukannya - kotak fleksibel adalah yang terbaik.
sumber
Cara termudah untuk melakukan ini adalah dengan memalsukannya. Apart List telah membahas hal ini secara ekstensif selama bertahun-tahun, seperti dalam artikel ini dari Dan Cederholm dari 2004 .
Begini cara saya biasanya melakukannya:
Anda dapat dengan mudah menambahkan header ke desain ini dengan membungkus #container di div lain, menanamkan header header sebagai saudara # kontainer, dan memindahkan gaya margin dan lebar ke wadah induk. Selain itu, CSS harus dipindahkan ke file yang terpisah dan tidak disimpan sebaris, dll. Akhirnya, kelas clearfix dapat ditemukan pada positioniseverything .
sumber