Visibility: Hidden vs Display: None
Memilih properti yang tepat sangat krusial agar tata letak (layout) website Anda tidak berantakan saat ada elemen yang muncul atau menghilang secara dinamis.
1. Display: None (Menghapus Elemen)
Properti ini benar-benar menghapus elemen dari Document Flow (alur dokumen).
-
Ruang: Elemen dianggap tidak ada. Ruang yang seharusnya ditempati oleh elemen tersebut akan diambil alih oleh elemen lain di sekitarnya.
-
Interaksi: Tidak dapat diklik, tidak bisa menerima fokus, dan tidak terbaca oleh screen reader (kecuali diatur khusus).
-
Performa: Memicu reflow (kalku lasi ulang tata letak) pada halaman saat statusnya berubah.
-
Contoh Penggunaan: Menu hamburger pada mobile yang hanya muncul saat diklik, atau tab konten yang berganti-ganti.
2. Visibility: Hidden (Menyembunyikan Elemen)
Properti ini menyembunyikan elemen secara visual, tetapi elemen tersebut tetap memakan ruang di halaman.
-
Ruang: Elemen tetap berada di tempatnya. Bayangkan elemen tersebut menjadi transparan sepenuhnya, tetapi tetap "berdiri" di sana.
-
Interaksi: Tidak dapat diklik atau menerima fokus, tetapi ruang kosongnya tetap dipertahankan sehingga tidak mengganggu posisi elemen tetangganya.
-
Inheritence: Jika induk memiliki
visibility: hidden, anak-anaknya bisa tampil kembali jika diberivisibility: visible. (Berbeda dengandisplay: nonedi mana jika induk hilang, semua anak pasti hilang). -
Contoh Penggunaan: Pesan error pada form yang ruangnya sudah disediakan agar layout tidak "melompat" saat pesan tersebut muncul secara mendadak.
3. Tab el Perbandingan Cepat
| Fitur | display: none | visibility: hidden |
| Ruang (Space) | Dihapus sepenuhnya. | Tetap dipertahankan (kosong). |
| Alur Dokumen | Keluar dari alur dokumen. | Tetap berada dalam alur dokumen. |
| Interaksi | Tidak ada. | Tidak ada. |
| Transisi/Animasi | Tidak bisa dianimasikan langsung. | Bisa dianimasikan (efek fade). |
| Aksesibilitas | Tersembunyi dari screen reader. | Biasanya tersembunyi dari screen reader. |
Tutorial: Melihat Perbedaan secara Visual
Salin kode ini untuk melihat bagaimana elemen tetangga bereaksi terhadap kedua properti ini.
Struktur HTML
<div class="container"> <div class="box red">Kotak 1div> <div class="box green target">Kotak 2 (Target)div> <div class="box blue">Kotak 3div>
div> <button onclick="hideDisplay()">Gunakan Display Nonebutton>
<button onclick="hideVisibility()">Gunakan Visibility Hiddenbutton>
Kode CSS
.container { display: flex; gap: 10px;
} .box { width: 100px; height: 100px; color: white; display: flex; align-items: center; justify-content: center;
} .red { background: #e74c3c; }
.green { background: #27ae60; }
.blue { background: #3498db; } /* Class untuk Testing */
.d-none { display: none; }
.v-hidden { visibility: hidden; }
< !---->
Kapan Menggunakan yang Mana?
-
Gunakan
display: nonesaat:-
Anda ingin menyembunyikan elemen secara total tanpa meninggalkan jejak ruang kosong.
-
Membuat desain responsif (misal: menyembunyikan sidebar di layar HP).
-
Membuat komponen yang kontennya berganti-ganti (Slider, Accordion, Tab).
-
-
Gunakan
visibility: hiddensaat:-
Anda ingin menjaga stabilitas layout agar elemen lain tidak bergeser saat elemen tersebut hilang/muncul.
-
Membuat elemen tetap ada di DOM untuk kebutuhan pengukuran skrip (JavaScript) tetapi tidak ingin user melihatnya.
-
Ingin melakukan animasi transisi halus (seperti mengubah
opacitybersamaan denganvisibility).
-
Tips Pro: Untuk proyek SatuMed ia, jika Anda memiliki skeleton loader (tampilan loading), biasanya visibility: hidden lebih baik digunakan pada konten asli agar ukuran kontainer tetap stabil sementara data sedang diambil dari database.