CSS Display Overflow Containment
Selesai membaca dokumentasi ini?
Kembali ke rujukan utama CSS untuk melanjutkan topik lainnya.
Kembali ke rujukan utama CSS untuk melanjutkan topik lainnya.
display menentukan bagaimana sebuah elemen ikut masuk ke aliran layout. Properti ini memengaruhi apakah elemen diperlakukan sebagai blok, inline, flex container, grid container, atau dihilangkan dari render flow.
overflow menentukan apa yang terjadi saat konten lebih besar daripada kotak elemen. Properti ini mengatur clipping, scroll, dan perilaku konten yang meluber dari container.
containment sederhana di sini merujuk pada pola membatasi dampak elemen terhadap layout di sekelilingnya, terutama saat ada konten yang bisa meluber, memicu reflow besar, atau perlu dipisahkan dari ruang luar.
Banyak bug layout CSS muncul bukan karena ukuran elemen salah, tetapi karena browser membaca perilaku kotaknya dengan cara yang tidak diharapkan.
Gejala yang sering muncul:
Kalau kamu paham display dan overflow, kamu biasanya lebih cepat menemukan sumber masalahnya: apakah masalahnya ada di aliran layout, pembentukan container, atau hanya di cara konten dipotong.
displaydisplay bukan sekadar “tampilan”. Ia menentukan peran elemen di layout tree.
Secara praktis, display mengubah hal-hal berikut:
gap, justify-content, dan grid-template-*DOM element -> display -> role layout -> flow, sizing, and child layout behaviorKalau display berubah, browser bisa menghitung ulang bagaimana elemen dan anak-anaknya ditempatkan.
displayblockPakai block saat elemen perlu:
Contoh umum:
divsectionarticlepContoh:
.card {
display: block;
}block cocok untuk struktur utama karena perilakunya mudah ditebak: elemen berdiri sendiri, lalu elemen berikutnya turun ke bawah.
inlinePakai inline saat elemen perlu mengalir di dalam teks atau kalimat.
Contoh umum:
spanaContoh:
.badge {
display: inline;
}Ciri penting inline:
inline-blockPakai inline-block saat kamu ingin elemen tetap mengalir di baris yang sama, tetapi masih bisa diberi ukuran seperti box.
Cocok untuk:
Contoh:
.tag {
display: inline-block;
padding: 0.25rem 0.5rem;
}inline-block berguna saat kamu butuh kompromi antara perilaku teks dan perilaku box.
flexPakai flex saat susunan elemen adalah satu dimensi: baris atau kolom.
Cocok untuk:
Contoh:
.toolbar {
display: flex;
justify-content: space-between;
align-items: center;
}flex membuat container menjadi pengatur distribusi ruang untuk anaknya. Ini bukan sekadar penataan visual, tetapi perubahan cara browser menghitung alokasi ruang antar item.
gridPakai grid saat kamu butuh kontrol dua dimensi: baris dan kolom sekaligus.
Cocok untuk:
Contoh:
.cards {
display: grid;
grid-template-columns: repeat(auto-fit, minmax(220px, 1fr));
gap: 1rem;
}grid lebih kuat saat layout mulai terasa sebagai peta area, bukan sekadar deretan item.
nonePakai display: none saat elemen perlu dikeluarkan dari layout flow dan tidak dirender.
Efeknya:
Contoh penggunaan:
Contoh:
.modal[hidden] {
display: none;
}Kalau tujuanmu hanya menyembunyikan visual tetapi tetap menjaga ruang, display: none bukan pilihan yang tepat.
display tertentublock jikainline jikainline-block jikaflex jikagrid jikanone jikaoverflowoverflow menentukan apa yang terjadi saat isi melewati batas kontainer.
Nilai yang paling umum:
visiblehiddenclipscrollautooverflow: visibleIni adalah perilaku default di banyak kasus. Konten yang meluber tetap terlihat di luar batas elemen.
Cocok jika:
Risikonya:
overflow: hiddenKonten yang keluar dari kotak akan dipotong.
Cocok jika:
Efek penting:
overflow: clipMirip hidden, tetapi lebih tegas sebagai pemotongan tanpa scroll container.
Cocok jika:
overflow: scrollSelalu menyediakan scroll container, walau kontennya belum tentu meluber.
Cocok jika:
Kekurangannya:
overflow: autoScroll hanya muncul jika diperlukan.
Ini biasanya pilihan aman untuk container yang kontennya bisa berubah panjang.
Cocok untuk:
Contoh:
.panel {
max-height: 320px;
overflow: auto;
}overflow pada clipping dan scrolloverflow memengaruhi tiga hal utama:
Saat overflow disembunyikan atau dipotong, isi di luar batas box tidak terlihat.
Ini berguna untuk:
Saat overflow memunculkan scroll, kontainer menjadi area navigasi sendiri.
Ini berguna untuk:
Konten yang meluber sering terlihat seperti bug layout, padahal akar masalahnya hanya salah memilih overflow.
Misalnya:
Konten meluber biasanya muncul karena salah satu dari ini:
Contoh umum:
.card {
width: 280px;
overflow: hidden;
}
.card img {
width: 100%;
display: block;
}Kalau konten meluber, cek urutan berikut:
display-nya sudah sesuai?Dalam praktik dasar, containment sederhana berarti membatasi pengaruh isi ke area yang tepat.
Pola yang sering dipakai:
Contoh:
.card {
max-width: 320px;
overflow: hidden;
}
.card__title {
white-space: nowrap;
text-overflow: ellipsis;
overflow: hidden;
}Di sini, containment bukan fitur tunggal yang rumit. Intinya adalah membuat sebuah komponen cukup mandiri sehingga isi di dalamnya tidak merusak struktur di luar.
display vs overflowDiagram ini membantu membedakan dua pertanyaan yang sering tercampur:
.card {
display: block;
max-width: 320px;
}Pakai block saat card berdiri sebagai unit sendiri.
.actions {
display: flex;
justify-content: flex-end;
gap: 0.5rem;
}Pakai flex saat tombol perlu tersusun dalam satu jalur.
.sidebar {
max-height: 100vh;
overflow: auto;
}Pakai overflow: auto saat isi bisa melebihi tinggi ruang yang tersedia.
.text-label {
display: inline;
}Pakai inline saat elemen adalah bagian dari kalimat.
display untuk menyelesaikan masalah yang sebenarnya ada di ukuran atau struktur anak.inline-block saat butuh elemen sebaris yang tetap bisa diberi padding dan lebar.flex untuk distribusi satu dimensi, bukan untuk memaksakan layout halaman penuh.grid saat hubungan baris-kolom memang perlu dikontrol bersama.display: none kalau elemen harus benar-benar keluar dari layout.overflow: auto untuk container yang mungkin butuh scroll.overflow: hidden atau clip kalau tujuan utamanya clipping, bukan scrolling.white-space, ukuran gambar, dan perilaku shrink pada flex item.