Apa fungsi overflow
Saat konten lebih besar daripada kotaknya (tinggi yang tetap, kata yang panjang, tabel yang lebar), konten itu meluap. Property overflow menentukan apa yang terjadi pada kelebihannya:
| Nilai | Yang kamu lihat | Scroll container |
|---|---|---|
visible (default) | Konten tumpah keluar dari kotak dan menimpa elemen setelahnya | Tidak |
hidden | Dipotong di tepi padding, tanpa scrollbar (script masih bisa men-scroll-nya) | Ya |
clip | Dipotong, dan tidak bisa di-scroll sama sekali, bahkan lewat script | Tidak |
scroll | Selalu menampilkan scrollbar, meskipun kontennya muat | Ya |
auto | Scrollbar hanya muncul saat kontennya tidak muat | Ya |
Di macOS dan ponsel, scrollbar muncul di atas konten lalu memudar, jadi scroll dan auto bisa terlihat sama sampai kamu men-scroll.
Membuat kotak yang bisa di-scroll
Sebuah kotak hanya meluap kalau ada yang membatasi ukurannya. height atau max-height, ditambah overflow-y: auto, mengubah daftar panjang menjadi panel yang bisa di-scroll:
Di sini max-height lebih baik daripada height: daftar yang pendek tetap pendek, dan hanya daftar yang panjang yang bisa di-scroll. Area scroll yang tidak punya konten yang bisa difokuskan di dalamnya sebaiknya diberi tabindex="0" supaya pengguna keyboard juga bisa men-scroll-nya.
overflow-x dan overflow-y
Kedua sumbu bisa diatur secara terpisah. Penggunaan yang umum adalah tabel lebar yang di-scroll ke samping di dalam container-nya, alih-alih melebarkan seluruh halaman:
Satu aturan yang perlu diingat: kalau salah satu sumbu bernilai hidden, scroll, atau auto, nilai visible di sumbu lainnya menjadi auto. Jadi, overflow-x: hidden saja bisa memunculkan scrollbar vertikal yang tidak terduga. overflow-x: clip tidak punya efek itu:
.a { overflow-x: hidden; } /* overflow-y computes to auto */
.b { overflow-x: clip; } /* overflow-y stays visible */
Memotong teks dengan ellipsis
text-overflow: ellipsis mengganti ujung baris yang terpotong dengan "…". Ini butuh tiga hal sekaligus: lebar yang terbatas, teks yang tidak bisa terbungkus, dan overflow yang disembunyikan:
Line clamp dengan prefix -webkit- berfungsi di Chrome, Firefox, dan Safari. Screen reader tetap membaca seluruh teksnya, jadi kata-kata yang terpotong tidak hilang bagi penggunanya.
Efek samping overflow
Mengatur overflow ke nilai apa pun selain visible atau clip mengubah lebih dari sekadar pemotongan:
- Elemen menampung float dan margin child. Elemen membentuk block formatting context baru, jadi elemen itu membesar untuk membungkus child yang memakai float.
display: flow-rootmelakukan hal yang sama tanpa memotong apa pun. - Elemen merusak
position: stickydi bawahnya. Child yang sticky menempel pada scroll container terdekat. Kalau container itu tidak bisa di-scroll, tidak ada yang menempel. - Elemen memotong child yang diposisikan secara absolute (saat elemen yang meluap itu juga menjadi containing block-nya), termasuk dropdown dan tooltip, dan juga memotong box shadow milik child.
Menyembunyikan scrollbar
Kamu bisa membuat kotak tetap bisa di-scroll sambil menyembunyikan scrollbar-nya dengan scrollbar-width: none. Pakai seperlunya saja: tanpa scrollbar, banyak pembaca tidak sadar bahwa masih ada konten lain. scrollbar-gutter: stable melakukan hal sebaliknya: property ini menyediakan ruang untuk scrollbar supaya konten tidak bergeser saat scrollbar muncul.
Kesalahan yang sering terjadi
- Mengharapkan overflow tanpa batas ukuran. Kotak tanpa
heightataumax-heightakan membesar, bukan meluap. overflow: hiddendibodyuntuk "memperbaiki" scroll horizontal. Lebih baik cari elemen yang terlalu lebar (sering kaliwidthyang tetap, URL yang panjang, atau100vwbersama scrollbar).- Ellipsis tanpa
white-space: nowrap. Teksnya terbungkus, jadi tidak ada yang meluap secara horizontal dan ellipsis tidak muncul. overflow-x: hiddenmemunculkan scrollbar vertikal. Pakaiclip.- Dropdown terpotong oleh kartunya.
overflow: hiddenpada kartu memotongnya. Pindahkan aturan overflow-nya atau render dropdown di luar kartu.
Pertanyaan yang sering diajukan
Apa fungsi overflow: hidden?
Deklarasi ini memotong konten yang tidak muat di dalam padding box elemen, tanpa scrollbar. Bagian yang tersembunyi masih bisa di-scroll lewat script atau dengan memfokuskan sesuatu di dalamnya.
Apa perbedaan overflow auto dan scroll?
scroll selalu menyediakan scrollbar, bahkan saat kontennya muat. auto hanya menampilkan scrollbar saat kontennya lebih besar daripada kotaknya, dan biasanya itulah yang kamu inginkan.
Bagaimana cara membuat div bisa di-scroll?
Batasi ukurannya dan izinkan scroll: max-height: 300px; overflow-y: auto;. Tanpa batas height atau max-height, div itu membesar mengikuti kontennya dan tidak pernah meluap.
Kenapa overflow-x: hidden juga menambahkan scrollbar vertikal?
Kalau salah satu sumbu bernilai hidden, scroll, atau auto, nilai visible di sumbu lainnya dihitung sebagai auto. Pakai overflow-x: clip sebagai gantinya, karena nilai ini tidak membuat scroll container dan membiarkan sumbu lainnya tetap visible.
Bagaimana cara menambahkan ellipsis (...) pada teks yang meluap?
Untuk satu baris: white-space: nowrap; overflow: hidden; text-overflow: ellipsis; pada elemen dengan lebar terbatas. Untuk beberapa baris, pakai display: -webkit-box; -webkit-box-orient: vertical; -webkit-line-clamp: 3; overflow: hidden;.