Mengatur width dan height
width dan height mengatur ukuran content box sebuah elemen. Secara default, padding dan border ditambahkan di luar ukuran itu.
Kotaknya berukuran 260 kali 100 piksel: isi 240 kali 80 ditambah padding 10px di setiap sisi. Dengan box-sizing: border-box, ukurannya akan tepat 240 kali 80. Halaman box model menjelaskan keduanya.
Nilai
| Nilai | Contoh | Arti |
|---|---|---|
auto | width: auto | Default. Blok mengisi lebar container-nya, tinggi menyesuaikan isinya |
| Panjang | 300px, 20rem | Ukuran tetap |
| Persentase | 50% | Dari lebar containing block (untuk width) atau tingginya (untuk height) |
| Satuan viewport | 100vh, 50vw, 100dvh | Dari jendela browser |
min-content | width: min-content | Sesempit mungkin, kata terpanjang yang menentukan |
max-content | width: max-content | Selebar isinya dalam satu baris |
fit-content | width: fit-content | Seperti max-content, tetapi tidak pernah lebih lebar dari container |
Kenapa height: 100% tidak berpengaruh
height persentase butuh elemen induk dengan tinggi yang pasti sebagai acuan persentasenya. Saat tinggi elemen induk bernilai auto, yang merupakan kondisi normal, height: 100% pada child juga berperilaku sebagai auto.
Child pertama hanya setinggi teksnya. Child kedua mengisi elemen induknya karena elemen induk itu punya tinggi. Agar rantai persentase di seluruh halaman berfungsi, setiap ancestor sampai html dan body butuh tinggi, itulah sebabnya sebagian besar layout memakai flexbox atau grid: child-nya meregang untuk mengisi ruang tanpa persentase apa pun.
min-height dan max-width: ukuran yang fleksibel
Ukuran yang tetap mudah rusak: tinggi yang tetap akan meluap saat teksnya lebih panjang dari perkiraan, dan lebar yang tetap terlalu lebar untuk ponsel. Property min- dan max- mengatur batas, bukan ukuran yang pasti.
| Property | Arti |
|---|---|
min-width | Tidak pernah lebih sempit dari ini |
max-width | Tidak pernah lebih lebar dari ini |
min-height | Tidak pernah lebih pendek dari ini, tetapi bisa membesar |
max-height | Tidak pernah lebih tinggi dari ini (isi yang berlebih akan meluap) |
Di layar yang lebih sempit dari 360px, seperti ponsel, kartunya ikut menyusut, karena max-width hanyalah batas atas.
Kalau ukuran dan batas berlaku bersamaan, batasnya yang menang: max-width mengalahkan width, dan min-width mengalahkan max-width.
width: auto vs width: 100%
Untuk elemen blok, membiarkan width bernilai auto hampir selalu menjadi pilihan yang tepat. auto memasukkan seluruh kotak, termasuk padding dan border, ke dalam container. 100% membuat isi-nya selebar container, lalu menambahkan padding dan border di atasnya:
width: 100% tetap berguna pada elemen yang secara default bukan blok (<input>, <img>, inline-block), idealnya bersama box-sizing: border-box.
Menyesuaikan ukuran dengan isi: fit-content
Untuk membuat blok hanya selebar teksnya, tanpa mengubahnya menjadi inline-block, pakai fit-content:
fit-content bersama margin-inline: auto menengahkan label atau blok mirip tombol yang lebarnya tetap persis selebar teksnya.
Bagian setinggi layar dan satuan viewport
vh adalah 1% dari tinggi viewport dan vw 1% dari lebarnya. Di ponsel, bar alamat browser membesar dan mengecil saat kamu men-scroll, jadi 100vh bisa lebih tinggi daripada yang terlihat. Satuan dinamis dvh mengikuti area yang terlihat, dan svh memakai tinggi terlihat yang terkecil:
.hero {
min-height: 100vh; /* fallback */
min-height: 100dvh; /* follows mobile toolbars */
}
Pakai min-height, bukan height, untuk bagian layar penuh, supaya layar kecil dengan banyak teks tetap mendapat bagian yang bisa membesar. Tinggi yang tetap dengan isi yang tidak muat akan tumpah keluar, dan itulah yang ditangani di halaman CSS overflow.
Kesalahan yang sering terjadi
height: 100%di dalam elemen induk tanpa tinggi. Nilainya berperilaku sebagaiauto. Beri elemen induk sebuah tinggi atau pakai flex atau grid.width: 100%ditambah padding. Elemennya meluap dari container. Biarkan lebar blok bernilaiauto, atau pakaibox-sizing: border-box.- Tinggi tetap pada container teks. Pakai
min-heightsupaya teks yang lebih panjang atau font yang lebih besar tidak tumpah keluar. widthpada elemen inline.<span>dan<a>mengabaikanwidthdanheight. Ubah menjadiinline-blockataublock.width: 1200pxpada wrapper halaman. Halamannya bisa di-scroll ke samping di setiap ponsel. Pakaimax-width: 1200px.
Pertanyaan yang sering diajukan
Kenapa height: 100% tidak berfungsi?
Tinggi persentase adalah persentase dari tinggi elemen induk, dan hanya berfungsi saat tinggi itu sudah pasti. Kalau tinggi elemen induk bernilai auto (ditentukan oleh isinya), persentasenya diperlakukan sebagai auto. Beri elemen induk sebuah tinggi, atau pakai flexbox atau grid, yang meregangkan child tanpa persentase.
Apa perbedaan width: 100% dan width: auto?
Untuk elemen blok, auto mengisi container termasuk padding dan border-nya. width: 100% mengatur lebar isi sama dengan lebar container, jadi dengan box-sizing: content-box yang merupakan default, padding atau border apa pun membuat elemennya meluap.
Apa fungsi min-height di CSS?
Property ini mengatur tinggi terkecil yang boleh dimiliki elemen, sambil tetap membiarkannya membesar mengikuti isinya. min-height: 200px memberi kartu kosong tinggi 200px, dan kartu yang berisi lebih banyak teks menjadi lebih tinggi alih-alih meluap, sesuatu yang tidak bisa dilakukan height yang tetap.
Apa perbedaan width dan max-width?
width mengatur ukuran yang pasti. max-width mengatur batas atas: elemennya bisa lebih sempit, misalnya di ponsel, tetapi tidak pernah lebih lebar. width: 100%; max-width: 600px; mengisi layar kecil dan berhenti di 600px pada layar besar.
Bagaimana cara membuat elemen setinggi layar penuh?
Pakai min-height: 100vh (atau 100dvh supaya toolbar browser ponsel ikut diperhitungkan). Dengan min-height, bukan height, bagian itu bisa membesar kalau isinya lebih tinggi dari layar.