Fungsi display
Setiap elemen punya nilai display yang menentukan cara elemen itu ditata. Tiga nilai yang pertama kali kamu temui adalah block, inline, dan inline-block. Berikut tiga kotak yang identik, dengan width, height, padding, dan margin yang sama, hanya display-nya yang berbeda:
block | inline | inline-block | |
|---|---|---|---|
| Dimulai di baris baru | Ya | Tidak | Tidak |
| Lebar default | Mengisi wadah | Menyesuaikan konten | Menyesuaikan konten |
width dan height | Berlaku | Diabaikan | Berlaku |
| Margin vertikal | Berlaku | Diabaikan | Berlaku |
| Padding vertikal | Mendorong konten | Digambar, tetapi tidak merenggangkan baris | Mendorong konten |
| Elemen yang umum | div, p, h1, ul, section | span, a, strong, em | button, input, img (replaced element berperilaku seperti ini) |
Di pratinjau, kotak block berada di barisnya sendiri dengan lebar 120px. Kotak inline mengabaikan width dan height dan hanya membungkus katanya, dan padding serta border vertikalnya menyembul di atas dan di bawah baris tanpa membuat barisnya lebih tinggi. Kotak inline-block tetap berada di baris teks tetapi mempertahankan ukuran penuhnya.
display: block
Elemen block mengambil seluruh lebar yang tersedia dan mendorong apa pun yang mengikutinya ke baris baru. Mengubah link menjadi block adalah cara membuat seluruh baris bisa diklik:
.menu a {
display: block; /* the full row is the link */
padding: 10px 16px;
}
Lebar sebuah block bisa diatur, dan margin: 0 auto menengahkannya begitu lebarnya diatur, seperti yang ditunjukkan halaman membuat div di tengah.
display: inline-block
inline-block adalah jalan tengah: elemen mengalir di dalam baris seperti sebuah kata, tetapi ukurannya bisa kamu atur. Ini berguna untuk badge, tombol, dan ikon di dalam teks:
Beberapa kotak inline-block dalam satu baris mendapat celah kecil di antaranya dari spasi di HTML. Untuk deretan kotak, display: flex pada induk adalah alat yang lebih baik.
display: none vs visibility: hidden
Keduanya membuat elemen tidak terlihat. Bedanya adalah apakah elemen tetap menyimpan ruangnya:
display: none | visibility: hidden | opacity: 0 | |
|---|---|---|---|
| Memakan ruang | Tidak | Ya | Ya |
| Bisa diklik | Tidak | Tidak | Ya |
| Dibaca pembaca layar | Tidak | Tidak | Ya |
| Bisa dianimasikan dengan mulus | Tidak | Tidak | Ya |
Atribut HTML hidden melakukan hal yang sama dengan display: none lewat stylesheet bawaan browser, artinya aturan CSS apa pun yang mengatur display pada elemen itu (misalnya .card { display: flex; }) akan menimpanya dan elemennya muncul lagi. Tambahkan [hidden] { display: none !important; } jika hal ini merepotkanmu.
Untuk menyembunyikan sesuatu secara visual tetapi tetap tersedia bagi pembaca layar (misalnya label untuk tombol ikon), pakai class "visually hidden" alih-alih display: none.
display: flex dan display: grid
Kedua nilai ini mengubah elemen menjadi wadah tata letak bagi anak-anaknya:
display: flexmenata anak-anak dalam satu baris atau kolom, dengan kendali atas perataan dan jarak. Lihat flexbox.display: gridmenempatkan anak-anak di baris dan kolom sekaligus.
Wadahnya sendiri tetap berupa block. inline-flex dan inline-grid melakukan hal yang sama untuk anak-anaknya, tetapi membuat wadahnya mengalir secara inline, seperti inline-block.
Nilai-nilai lainnya
| Nilai | Fungsinya |
|---|---|
flow-root | Block yang menampung float-nya dan mencegah margin anak bocor keluar; "clearfix" versi modern |
contents | Kotak milik elemen itu hilang dan anak-anaknya bertindak sebagai anak dari induknya. Hindari pada tombol, list, dan tabel: beberapa browser menghilangkan makna elemen itu bagi pembaca layar |
list-item | Block dengan penanda list, default untuk li |
table, table-row, table-cell | Tata letak tabel pada elemen yang bukan tabel |
inline-flex, inline-grid | Wadah flex atau grid yang berada inline |
Kesalahan umum
- Mengatur
widthatauheightpadaspanataua. Elemen inline mengabaikannya. Pakaiinline-blockataublock. - Margin vertikal pada elemen inline. Juga diabaikan. Solusinya sama.
- Memakai
display: noneuntuk menyembunyikan teks yang ditujukan bagi pembaca layar. Teksnya jadi tersembunyi dari mereka juga. - Berharap anak tampil di dalam induk yang
display: none. Tidak ada apa pun di dalam induk yang tersembunyi yang ditampilkan. - Aturan
displayyang menimpa atributhidden. Aturan CSS yang menang. - Mencoba menganimasikan
display. Mengaturdisplay: nonelangsung menyembunyikan elemen, tanpa efek memudar; animasikanopacitylalu gantidisplay(atauvisibility) di akhir.
Pertanyaan yang sering diajukan
Apa perbedaan block, inline, dan inline-block?
Elemen block dimulai di baris baru dan mengisi lebar yang tersedia. Elemen inline mengalir di dalam teks dan mengabaikan width, height, serta margin vertikal. inline-block mengalir di dalam teks seperti inline, tetapi menerima width, height, padding, dan margin seperti block.
Apa fungsi display: none?
Nilai ini menghapus elemen dari halaman sepenuhnya: elemen tidak memakan ruang, tidak ditampilkan, dan disembunyikan dari pembaca layar. Anak-anaknya ikut tersembunyi dan tidak bisa ditampilkan dengan nilai display mereka sendiri.
Apa perbedaan display: none dan visibility: hidden?
display: none menghapus elemen beserta ruangnya. visibility: hidden membuatnya tidak terlihat tetapi tetap menyimpan ruangnya di tata letak, jadi tidak ada yang bergeser.
Apakah div secara default bersifat block atau inline?
Block. div, p, heading, ul, section, dan form secara default bersifat block; span, a, strong, em, img, input, dan button bersifat inline atau inline-block.
Kenapa ada celah di antara elemen inline-block?
Spasi di antara tag di HTML ditampilkan sebagai spasi, sama seperti di antara kata. Pakai display: flex dengan gap pada induknya, atau hapus spasinya.