Aturan CSS visibility:hidden
dan display:none
keduanya menghasilkan elemen tidak terlihat. Apakah ini sinonim?
css
visibility
Chris Noe
sumber
sumber
visibility: hidden
dandisplay: none
akan memiliki kinerja yang sama karena keduanya retrigger layout, cat, dan komposit. Namun,opacity: 0
secara fungsional setara denganvisibility: hidden
dan tidak retrigger langkah tata letak, jadi saya akan menyarankan menggunakan itu jika Anda tidak keberatan ruang kosong masih dialokasikan (jika tidak gunakandisplay: none
).opacity: 0
harus digunakan dengan hati-hati ketika berhadapan dengan input atau tombol, karena mereka akan tetap ada dan mungkin menyebabkan interaksi pengguna yang aneh.Mereka bukan sinonim.
display:none
menghapus elemen dari aliran normal halaman, memungkinkan elemen lain untuk mengisi.visibility:hidden
meninggalkan elemen dalam aliran normal halaman sehingga masih menempati ruang.Bayangkan Anda berada dalam antrean untuk naik di taman hiburan dan seseorang di antrean menjadi begitu gaduh sehingga keamanan menarik mereka dari antrean. Semua orang yang ada di barisan kemudian akan bergerak maju satu posisi untuk mengisi slot yang sekarang kosong. Ini seperti
display:none
.Bandingkan ini dengan situasi yang sama, tetapi seseorang di depan Anda mengenakan jubah tembus pandang. Saat melihat garis, itu akan terlihat seperti ada ruang kosong, tetapi orang tidak bisa benar-benar mengisi ruang kosong itu karena seseorang masih ada di sana. Ini seperti
visibility:hidden
.sumber
Satu hal yang patut ditambahkan, meskipun tidak ditanyakan, adalah bahwa ada opsi ketiga untuk membuat objek sepenuhnya transparan. Mempertimbangkan:
(Pastikan untuk mengklik tombol "Jalankan cuplikan kode" di atas untuk melihat hasilnya.)
Perbedaan antara 1 dan 2 telah ditunjukkan (yaitu, 2 masih membutuhkan ruang). Namun, ada perbedaan antara 2 dan 3: dalam kasus 3, mouse masih akan beralih ke tangan ketika melayang di atas tautan, dan pengguna masih dapat mengklik tautan, dan acara Javascript masih akan menyala di tautan. Ini biasanya bukan perilaku yang Anda inginkan (tapi mungkin kadang-kadang itu?).
Perbedaan lainnya adalah jika Anda memilih teks, lalu menyalin / menempelkan sebagai teks biasa, Anda mendapatkan yang berikut:
Dalam kasus 3 teks disalin. Mungkin ini akan berguna untuk beberapa jenis watermarking, atau jika Anda ingin menyembunyikan pemberitahuan hak cipta yang akan muncul jika pengguna yang sembrono menyalin / menempelkan konten Anda?
sumber
display:none
menghapus elemen dari aliran tata letak.visibility:hidden
menyembunyikannya tetapi meninggalkan ruang.sumber
Ada perbedaan besar dalam hal node anak. Sebagai contoh: Jika Anda memiliki div orang tua dan div anak bersarang. Jadi jika Anda menulis seperti ini:
Dalam hal ini tidak ada div yang akan terlihat. Tetapi jika Anda menulis seperti ini:
Maka div anak akan terlihat sedangkan div induk tidak akan ditampilkan.
sumber
Mereka bukan sinonim -
display: none
menghapus elemen dari aliran halaman, dan sisa halaman mengalir seolah-olah itu tidak ada.visibility: hidden
menyembunyikan elemen dari tampilan tetapi bukan aliran halaman, meninggalkan ruang untuk itu pada halaman.sumber
display: none
menghapus elemen dari halaman sepenuhnya, dan halaman dibangun seolah-olah elemen itu tidak ada sama sekali.Visibility: hidden
meninggalkan ruang dalam aliran dokumen meskipun Anda tidak lagi dapat melihatnya.Ini mungkin atau mungkin tidak membuat perbedaan besar tergantung pada apa yang Anda lakukan.
sumber
Dengan
visibility:hidden
objek masih memakan ketinggian vertikal pada halaman. Dengandisplay:none
itu sepenuhnya dihapus. Jika Anda memiliki teks di bawah gambar dan Anda melakukannyadisplay:none
, teks itu akan bergeser ke atas untuk mengisi ruang tempat gambar itu berada. Jika Anda melihat: tersembunyi teks akan tetap berada di lokasi yang sama.sumber
display:none
akan menyembunyikan elemen dan menutup ruang yang diambil, sedangkanvisibility:hidden
akan menyembunyikan elemen dan melestarikan elemen ruang. tampilan: tidak ada juga efek beberapa properti yang tersedia dari javascript di versi IE dan Safari yang lebih lama.sumber
Selain semua jawaban lain, ada perbedaan penting untuk IE8: Jika Anda menggunakan
display:none
dan mencoba untuk mendapatkan lebar atau tinggi elemen, IE8 mengembalikan 0 (sementara browser lain akan mengembalikan ukuran sebenarnya). IE8 mengembalikan lebar atau tinggi yang benar hanya untukvisibility:hidden
.sumber
visibility:hidden
menjaga ruang;display:none
tidak.sumber
Ini tidak akan tersedia di halaman dan tidak menempati ruang apa pun.
ia menyembunyikan elemen, tetapi masih akan memakan ruang yang sama seperti sebelumnya. Elemen akan disembunyikan, tetapi tetap saja, mempengaruhi tata letak.
visibility: hidden
melestarikan ruang, sedangkandisplay: none
tidak melestarikan ruang.Contoh Tampilan Tidak Ada: https://www.w3schools.com/css/tryit.asp?filename=trycss_display_none
Contoh Tersembunyi Visibilitas: https://www.w3schools.com/cssref/tryit.asp?filename=trycss_visibility
sumber
Jika properti visibilitas diatur ke
"hidden"
, browser masih akan mengambil ruang pada halaman untuk konten meskipun itu tidak terlihat.Tetapi ketika kita mengatur objek
"display:none"
, browser tidak mengalokasikan ruang pada halaman untuk kontennya.Contoh:
Melihat rincian
sumber
visibility:hidden
akan menyimpan elemen di halaman dan menempati ruang itu tetapi tidak menunjukkan kepada pengguna.display:none
tidak akan tersedia di halaman dan tidak menempati ruang apa pun.sumber
Satu perbedaan lain adalah yang
visibility:hidden
bekerja di browser yang benar-benar lama, dandisplay:none
tidak:https://www.w3schools.com/cssref/pr_class_visibility.asp
https://www.w3schools.com/cssref/pr_class_display.asp
sumber
Perbedaannya melampaui gaya dan tercermin dalam bagaimana elemen berperilaku ketika dimanipulasi dengan JavaScript.
Efek dan efek samping dari
display: none
:clientWidth
,clientHeight
,offsetWidth
,offsetHeight
,scrollWidth
,scrollHeight
,getBoundingClientRect()
,getComputedStyle()
, semua kembali0
s.Efek dan efek samping dari
visibility: hidden
:innerText
(tetapi tidakinnerHTML
) elemen target dan keturunan mengembalikan string kosong.sumber
display:none;
tidak akan menampilkan elemen juga tidak akan membagikan ruang untuk elemen pada halaman sedangkanvisibility:hidden;
tidak akan menampilkan elemen pada halaman tetapi akan membagikan ruang pada halaman. Kami dapat mengakses elemen dalam DOM dalam kedua kasus. Untuk memahaminya dengan cara yang lebih baik silakan lihat kode berikut: display: none vs visibility: hiddensumber
Ada banyak jawaban terperinci di sini, tetapi saya pikir saya harus menambahkan ini untuk mengatasi aksesibilitas karena ada implikasinya.
display: none;
danvisibility: hidden;
mungkin tidak dibaca oleh semua perangkat lunak pembaca layar. Ingatlah apa yang akan dialami pengguna dengan gangguan visual.Pertanyaannya juga menanyakan tentang sinonim.
text-indent: -9999px;
adalah satu sama lain yang kira-kira setara. Perbedaan penting dengantext-indent
itu akan sering dibaca oleh pembaca layar. Ini bisa menjadi sedikit pengalaman buruk karena pengguna masih dapat menabrak tautan.Untuk aksesibilitas, apa yang saya lihat digunakan hari ini adalah kombinasi gaya untuk menyembunyikan elemen sambil terlihat oleh pembaca layar.
Praktik yang bagus adalah membuat tautan "Lewati ke konten" ke jangkar badan utama konten. Pengguna tunanetra mungkin tidak ingin mendengarkan pohon navigasi lengkap Anda di setiap halaman. Jadikan tautan tersembunyi secara visual. Pengguna cukup menekan tab untuk mengakses tautan.
Untuk lebih lanjut tentang aksesibilitas dan konten tersembunyi, lihat:
sumber