Menu

Display CSS: Block, Inline, Inline-Block, None, Flex

Properti display menentukan bagaimana sebuah elemen ikut serta dalam tata letak. Pelajari block, inline, dan inline-block dengan kotak-kotak terukur yang berdampingan, display none vs visibility hidden, dan di mana posisi flex, grid, flow-root, serta contents.

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

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:

blockinlineinline-block
Dimulai di baris baruYaTidakTidak
Lebar defaultMengisi wadahMenyesuaikan kontenMenyesuaikan konten
width dan heightBerlakuDiabaikanBerlaku
Margin vertikalBerlakuDiabaikanBerlaku
Padding vertikalMendorong kontenDigambar, tetapi tidak merenggangkan barisMendorong konten
Elemen yang umumdiv, p, h1, ul, sectionspan, a, strong, embutton, 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: nonevisibility: hiddenopacity: 0
Memakan ruangTidakYaYa
Bisa diklikTidakTidakYa
Dibaca pembaca layarTidakTidakYa
Bisa dianimasikan dengan mulusTidakTidakYa

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: flex menata anak-anak dalam satu baris atau kolom, dengan kendali atas perataan dan jarak. Lihat flexbox.
  • display: grid menempatkan 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

NilaiFungsinya
flow-rootBlock yang menampung float-nya dan mencegah margin anak bocor keluar; "clearfix" versi modern
contentsKotak 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-itemBlock dengan penanda list, default untuk li
table, table-row, table-cellTata letak tabel pada elemen yang bukan tabel
inline-flex, inline-gridWadah flex atau grid yang berada inline

Kesalahan umum

  • Mengatur width atau height pada span atau a. Elemen inline mengabaikannya. Pakai inline-block atau block.
  • Margin vertikal pada elemen inline. Juga diabaikan. Solusinya sama.
  • Memakai display: none untuk 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 display yang menimpa atribut hidden. Aturan CSS yang menang.
  • Mencoba menganimasikan display. Mengatur display: none langsung menyembunyikan elemen, tanpa efek memudar; animasikan opacity lalu ganti display (atau visibility) 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.

Ilustrasi bahasa pemrograman di Coddy

Belajar coding dengan Coddy

Mulai