Menu

CSS Height dan Width: Penjelasan min, max, % dan auto

width dan height mengatur ukuran kotak sebuah elemen. Pelajari ukuran tetap dan persentase, kenapa height: 100% sering tidak berpengaruh, min-height dan max-width untuk layout yang fleksibel, auto vs 100%, dan kata kunci fit-content.

Halaman ini dilengkapi editor yang bisa dijalankan. Edit, jalankan, dan lihat output-nya seketika.

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

NilaiContohArti
autowidth: autoDefault. Blok mengisi lebar container-nya, tinggi menyesuaikan isinya
Panjang300px, 20remUkuran tetap
Persentase50%Dari lebar containing block (untuk width) atau tingginya (untuk height)
Satuan viewport100vh, 50vw, 100dvhDari jendela browser
min-contentwidth: min-contentSesempit mungkin, kata terpanjang yang menentukan
max-contentwidth: max-contentSelebar isinya dalam satu baris
fit-contentwidth: fit-contentSeperti 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.

PropertyArti
min-widthTidak pernah lebih sempit dari ini
max-widthTidak pernah lebih lebar dari ini
min-heightTidak pernah lebih pendek dari ini, tetapi bisa membesar
max-heightTidak 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 sebagai auto. Beri elemen induk sebuah tinggi atau pakai flex atau grid.
  • width: 100% ditambah padding. Elemennya meluap dari container. Biarkan lebar blok bernilai auto, atau pakai box-sizing: border-box.
  • Tinggi tetap pada container teks. Pakai min-height supaya teks yang lebih panjang atau font yang lebih besar tidak tumpah keluar.
  • width pada elemen inline. <span> dan <a> mengabaikan width dan height. Ubah menjadi inline-block atau block.
  • width: 1200px pada wrapper halaman. Halamannya bisa di-scroll ke samping di setiap ponsel. Pakai max-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.

Ilustrasi bahasa pemrograman di Coddy

Belajar coding dengan Coddy

Mulai