Saya memiliki tata letak dengan dua kolom - kiri div
dan kanan div
.
Kanan div
memiliki abu-abu background-color
, dan saya perlu memperluas secara vertikal tergantung pada ketinggian jendela browser pengguna. Saat ini background-color
ujung di bagian terakhir konten di dalamnya div
.
Saya sudah mencoba height:100%
, min-height:100%;
, dll
height
properti CSS dengan nilai persentase: stackoverflow.com/a/31728799/3597276Jawaban:
Ada beberapa unit pengukuran CSS 3 yang disebut:
Panjang Viewport-Persentase (atau Relatif-Viewport)
Berapa Panjang Viewport-Persentase?
Dari Rekomendasi Kandidat W3 yang tertaut di atas:
Unit-unit ini adalah
vh
(tinggi viewport),vw
(lebar viewport),vmin
(panjang minimum viewport) danvmax
(panjang maksimum viewport).Bagaimana ini bisa digunakan untuk membuat pembagi mengisi ketinggian browser?
Untuk pertanyaan ini, kita dapat menggunakan
vh
:1vh
sama dengan 1% dari tinggi viewport. Artinya,100vh
sama dengan ketinggian jendela browser, terlepas dari di mana elemen terletak di pohon DOM:HTML
CSS
Ini benar-benar semua yang dibutuhkan. Berikut adalah contoh JSFiddle dari ini digunakan.
Browser apa yang mendukung unit-unit baru ini?
Ini saat ini didukung pada semua peramban utama terkini selain dari Opera Mini. Lihat Dapatkah saya menggunakan ... untuk dukungan lebih lanjut.
Bagaimana ini bisa digunakan dengan banyak kolom?
Dalam kasus pertanyaan yang ada, menampilkan pembagi kiri dan kanan, berikut adalah contoh JSFiddle yang menunjukkan tata letak dua kolom yang melibatkan keduanya
vh
danvw
.Bagaimana
100vh
bedanya dengan100%
?Ambil tata letak ini misalnya:
The
p
tag di sini diatur untuk% ketinggian 100, tetapi karena yang mengandungdiv
memiliki 200 piksel tinggi, 100% dari 200 pixel menjadi 200 pixel, tidak 100% daribody
ketinggian. Menggunakan100vh
bukan berarti bahwap
tag akan tinggi 100% daribody
terlepas daridiv
ketinggian. Lihatlah JSFiddle yang menyertainya untuk melihat perbedaannya dengan mudah!sumber
min-height:100vh
tampaknya mengatasi ini.Jika Anda ingin mengatur tinggi dari
<div>
atau elemen, Anda harus mengatur ketinggian<body>
dan<html>
100% juga. Maka Anda dapat mengatur ketinggian elemen dengan 100% :)Berikut ini sebuah contoh:
sumber
html { height: 100%*number of blocks; }
,body { height: 100%;}
,#div { height: 100%/number of blocks; }
. Jadi jika Anda memiliki 3 bagian, itu akan menjadihtml { height: 300%; } body { height: 100%; } #div { height: 33.3% }
Jika Anda dapat benar-benar memposisikan elemen Anda,
akan melakukannya.
sumber
position:relative
dan tingginya tidak 100% dari viewport. Ini akan menyesuaikan atas dan bawah untuk leluhur relatif atau absolut berikutnya.Anda dapat menggunakan unit view-port di CSS:
HTML:
CSS:
sumber
* { box-sizing: border-box; }
untuk mencegah hal itu terjadi.Anda dapat menggunakan
vh
dalam hal ini yang relatif 1% dari ketinggian viewport ...Itu berarti jika Anda ingin menutupi ketinggian, cukup gunakan
100vh
.Lihatlah gambar di bawah ini yang saya gambar untuk Anda di sini:
Coba cuplikan yang saya buat untuk Anda seperti di bawah ini:
sumber
paddings/margins
Semua solusi lain, termasuk yang terpilih dengan
vh
sub-optimal kurang optimal jika dibandingkan dengan solusi model fleksibel .Dengan munculnya model fleksibel CSS , menyelesaikan masalah tinggi 100% menjadi sangat, sangat mudah: digunakan
height: 100%; display: flex
pada orang tua, danflex: 1
pada elemen anak. Mereka akan secara otomatis mengambil semua ruang yang tersedia di wadah mereka.Perhatikan betapa sederhananya markup dan CSS. Tidak ada hack tabel atau apa pun.
Model fleksibel didukung oleh semua browser utama dan juga IE11 +.
Pelajari lebih lanjut tentang model fleksibel di sini.
sumber
overflow-y: auto;
dapat menghindari "wadah melebihi tinggi badan asli".Anda tidak menyebutkan beberapa detail penting seperti:
Inilah satu kemungkinan:
Ada banyak variasi dalam hal ini tergantung pada kolom mana yang perlu diperbaiki dan mana yang cair. Anda dapat melakukan ini dengan penentuan posisi absolut juga, tetapi saya biasanya menemukan hasil yang lebih baik (terutama dalam hal cross-browser) menggunakan pelampung.
sumber
Inilah yang bekerja untuk saya:
Gunakan
position:fixed
alih-alihposition:absolute
, dengan cara itu bahkan jika Anda menggulir ke bawah divisi akan meluas ke ujung layar.sumber
Berikut cara untuk ketinggian.
Dalam penggunaan CSS Anda:
Untuk browser yang tidak mendukung
vh-units
, gunakan modernizr.Tambahkan skrip ini (untuk menambah deteksi untuk
vh-units
)Akhirnya gunakan fungsi ini untuk menambah ketinggian viewport
#your-object
jika browser tidak mendukungvh-units
:sumber
100%
bekerja secara berbeda untuk lebar dan tinggi.Ketika Anda menentukan
width: 100%
, itu berarti "mengambil 100% dari lebar yang tersedia dari elemen induk atau lebar jendela."Ketika Anda menentukan
height: 100%
, itu hanya berarti "mengambil 100% tinggi yang tersedia dari elemen induk." Ini berarti jika Anda tidak menentukan ketinggian pada elemen tingkat atas, tinggi semua anak akan menjadi0
atau tinggi orangtua, dan itulah sebabnya Anda perlu mengatur elemen paling atas untuk memilikimin-height
ketinggian jendela.Saya selalu menentukan tubuh untuk memiliki ketinggian minimum 100vh dan itu membuat penentuan posisi dan perhitungan mudah,
sumber
Tambahkan
min-height: 100%
dan jangan tentukan ketinggian (atau letakkan di atas otomatis). Itu benar-benar melakukan pekerjaan untuk saya:sumber
100vw === 100% dari lebar viewport.
100vh === 100% dari ketinggian viewport.
Jika Anda ingin mengatur
div
lebar atau tinggi 100% dari ukuran jendela browser Anda harus menggunakan:Untuk lebar:
100vw
Untuk tinggi:
100vh
Atau jika Anda ingin mengatur ukurannya lebih kecil, gunakan
calc
fungsi CSS . Contoh:sumber
Ada beberapa metode yang tersedia untuk mengatur ketinggian
<div>
hingga 100%.Metode (A):
Metode (B) menggunakan vh:
Metode (c) menggunakan kotak fleksibel:
sumber
Ini bekerja untuk saya:
Diambil dari halaman ini .
sumber
Cara paling sederhana adalah melakukannya seperti ini.
sumber
Cobalah untuk mengatur
height:100%
dihtml
&body
Dan jika Anda ingin 2 div ketinggian yang sama gunakan atau atur
display:flex
properti elemen induk .sumber
Bahkan dengan semua jawaban di sini, saya terkejut menemukan bahwa tidak ada yang benar-benar menyelesaikan masalah. Jika saya menggunakan
100vh
height
/min-height
, tata letak rusak ketika konten lebih panjang dari satu halaman. Jika saya menggunakan100%
height
/min-height
, tata letak rusak ketika konten kurang dari tinggi halaman.Solusi yang saya temukan, yang memecahkan kedua kasus, adalah menggabungkan dua jawaban teratas:
sumber
Cukup gunakan unit "vh" alih-alih "px", yang berarti ketinggian view-port.
sumber
Elemen blok mengkonsumsi lebar penuh induknya, secara default.
Ini adalah bagaimana mereka memenuhi persyaratan desain mereka, yaitu menumpuk secara vertikal.
Namun, perilaku ini tidak mencakup ketinggian.
Secara default, sebagian besar elemen adalah tinggi konten mereka (
height: auto
).Berbeda dengan lebar, Anda harus menentukan ketinggian jika Anda ingin ruang tambahan.
Karena itu, ingatlah dua hal ini:
sumber
Berikut ini adalah sesuatu yang tidak persis seperti apa yang Anda miliki di jawaban sebelumnya, tetapi bisa bermanfaat untuk beberapa orang:
https://jsfiddle.net/newdark/qyxkk558/10/
sumber
Gunakan FlexBox CSS
Flexbox sangat cocok untuk masalah jenis ini. Sementara sebagian besar dikenal untuk meletakkan konten dalam arah horisontal, Flexbox sebenarnya berfungsi dengan baik untuk masalah tata letak vertikal. Yang harus Anda lakukan adalah membungkus bagian vertikal dalam wadah fleksibel dan memilih yang ingin Anda kembangkan. Mereka akan secara otomatis mengambil semua ruang yang tersedia di wadah mereka.
sumber
Salah satu opsi adalah menggunakan tabel CSS. Ini memiliki dukungan browser yang hebat dan bahkan berfungsi di Internet Explorer 8.
Contoh JSFiddle
sumber
Coba ini - diuji:
Edit: pembaruan 2020:
Anda dapat menggunakan
vh
sekarang:sumber
Anda bisa menggunakan
display: flex
danheight: 100vh
sumber
Anda perlu melakukan dua hal, satu adalah mengatur ketinggian hingga 100% yang sudah Anda lakukan. Kedua adalah mengatur posisi ke absolut. Itu harus melakukan trik.
Sumber
sumber
vh
sebagai gantinya.vh
jika Anda berencana untuk menggunakan desain responsif pada perangkat seluler.Coba CSS berikut:
sumber
Sebenarnya yang paling berhasil bagi saya adalah menggunakan
vh
properti itu.Dalam aplikasi Bereaksi saya, saya ingin div untuk mencocokkan halaman tinggi bahkan ketika diubah ukurannya. Saya mencoba
height: 100%;
,overflow-y: auto;
tetapi tidak satupun dari mereka yang bekerja ketika pengaturanheight:(your percent)vh;
itu berfungsi sebagaimana dimaksud.Catatan: jika Anda menggunakan bantalan, sudut bundar, dll., Pastikan untuk mengurangi nilai-nilai itu dari
vh
persen properti Anda atau menambah tinggi ekstra dan membuat bilah gulir muncul. Ini contoh saya:sumber
box-sizing: border-box;
akan mengatasi hal ini, itu berarti bahwa ukuran batas juga diperhitungkan saat menghitung ukuran (lebar dan tinggi) elemen.sumber
Jika Anda menggunakan
position: absolute;
dan jQuery, Anda bisa menggunakansumber
HTML
CSS
sumber
widht
(mendekati akhir)