Apakah opacity: 0 memiliki efek yang sama persis dengan visibility: hidden

119

Jika demikian, apakah tindakan tersebut secara efektif menghilangkan visibilityproperti?

(Saya menyadari bahwa Internet Explorer belum mendukung properti CSS2 ini.)
Perbandingan mesin tata letak

Lihat juga: Apa perbedaan antara visibilitas: tersembunyi dan tampilan: tidak ada

Chris Noe
sumber
4
Dan bagaimana dengan taborder? Jika terlihat = salah maka kontrol tidak mendapatkan fokus apapun, tetapi jika opacity 0 mungkin tombol tab masih beriterasi di antara kontrol?
Stefan
Ini akan menjadi kasus uji yang menarik untuk melihat bagaimana kontrol transparan bisa mendapatkan fokus.
Chris Noe
3
Saya mencobanya, (FF3). Elemen masukan dengan opasitas: 0 memang menerima fokus, sesuai urutan tab, meskipun tidak ada indikasi visual. Kursor menghilang begitu saja. Apa pun yang Anda ketik dimasukkan ke dalam nilai elemen masukan. Menekan tab lagi akan berpindah ke bidang berikutnya. Menarik.
Chris Noe

Jawaban:

256

Berikut adalah kompilasi informasi terverifikasi dari berbagai jawaban.

Masing-masing properti CSS ini unik. Selain merender elemen yang tidak terlihat, mereka memiliki efek tambahan berikut:

  1. Menciutkan ruang yang biasanya ditempati elemen tersebut
  2. Merespons acara (mis., Klik, tekan tombol)
  3. Berpartisipasi dalam taborder tersebut
                     ciutkan taborder acara
opacity: 0 Tidak Ya Ya
visibility: hidden No No No
jarak pandang: runtuh Ya * Tidak Tidak
tampilan: tidak ada Ya Tidak Tidak

* Ya di dalam elemen tabel, jika tidak Tidak.
Chris Noe
sumber
Saya mencoba mengikuti dokumentasi penurunan harga di sini: daringfireball.net/projects/markdown/syntax
Chris Noe
Oke, jadi SO sengaja tidak mendukung <table>. Jadi saya membuatnya sebagai ascii.
Chris Noe
3
Selain itu, dengan "opacity: 0" objek Flash dirender, dan konstruktor sprite dipicu, tetapi dengan "visibility: hidden" tidak.
pepkin88
Jika radio / kotak centang Anda tidak berfungsi visibility:hidden, Anda harus menggunakannya opacity: 0untuk mendeteksi klik mouse.
dayuloli
7
@ChrisNoe: terima kasih atas ringkasannya. Satu hal yang mungkin ingin Anda tambahkan: Saya baru saja meneliti bagaimana membuat simpul orang tua tidak terlihat tetapi simpul anak masih terlihat, hasilnya: tidak ada kesempatan untuk anak terlihat: opacity:0 atau display:none, tetapi jika Anda menggunakan visibility: hidden Anda dapat membuat anak terlihat denganvisibility: visible
Martin
14

Tidak.

Elemen dengan opasitas membuat konteks susun baru.

Selain itu, spesifikasi CSS tidak mendefinisikan ini, tetapi elemen dengan opacity:0dapat diklik, dan elemen dengan visibility:hiddentidak.

Kornel
sumber
12

Tidak. Ada perbedaan besar. Mereka serupa karena Anda dapat melihat melalui elemen jika visibilitas disembunyikan atau opacity 0, namun

opacity: 0 : Anda tidak dapat mengklik elemen di belakangnya.

visibility: hidden : Anda dapat mengklik elemen di belakangnya.

Nishant
sumber
1
"Tidak"? Apakah ini dimaksudkan sebagai jawaban atas Pertanyaan, atau sebagai tanggapan atas salah satu Jawaban yang ada? Jika nanti, maka itu harus ditambahkan sebagai komentar di bawah jawaban alamatnya.
Chris Noe
9
Ini adalah jawaban untuk "Apakah opacity: 0 memiliki efek yang sama persis dengan visibility: hidden?" .... bukankah itu jelas?
Nishant
5

Ada banyak perbedaan antara visibilitydan opacity. Sebagian besar jawaban menyebutkan beberapa perbedaan, tetapi berikut adalah daftar lengkapnya.

  1. opacity tidak mewarisi, sedangkan visibilitas memilikinya

  2. opacity dapat dianimasikan sementara visibilitas tidak.
    (Ya, secara teknis memang demikian, tetapi tidak ada perilaku yang ditentukan untuk, katakanlah, "37% diciutkan dan 63% disembunyikan", jadi Anda dapat menganggap ini sebagai tidak dapat dianimasikan.)

  3. Menggunakan opacity, Anda tidak dapat membuat elemen turunan lebih buram dari induknya. Misalnya jika Anda memiliki ap dengan warna: hitam dan opasitas: 0,5, Anda tidak dapat membuat anak-anaknya menjadi hitam sepenuhnya. Nilai yang valid untuk opasitas adalah antara 0 dan 1, dan contoh ini membutuhkan 2!
    Akibatnya, menurut komentar Martin , Anda dapat memiliki anak yang terlihat (dengan visibilitas: terlihat) dalam orang tua yang tidak terlihat (dengan visibilitas: tersembunyi). Ini tidak mungkin dengan opacity; jika orang tua memiliki opacity: 0; anak-anaknya selalu tidak terlihat.

  4. Jawaban Kornel menyebutkan bahwa nilai opasitas kurang dari 1 menciptakan konteks susunnya sendiri; tidak ada nilai untuk visibilitas.
    (Saya berharap dapat memikirkan cara untuk mendemonstrasikan ini, tetapi saya tidak dapat memikirkan cara apa pun untuk menunjukkan konteks penumpukan visibilitas: elemen tersembunyi.)

  5. Menurut jawaban philnash , elemen dengan opacity: 0 masih terbaca oleh screen reader, sedangkan visible: elemen tersembunyi tidak.

  6. Menurut jawaban Chris Noe , visibilitas memiliki lebih banyak opsi (seperti menutup) dan elemen yang tidak terlihat tidak lagi merespons klik dan tidak dapat di-tab.

(Menjadikan ini wiki komunitas, karena meminjam dari jawaban yang ada tidak akan adil jika tidak.)

Tuan Lister
sumber
4

Saya tidak sepenuhnya yakin tentang ini, tetapi saya pikir pembaca layar tidak membaca hal-hal yang disetel ke visibilitas tersembunyi, tetapi mereka dapat membaca berbagai hal terlepas dari opasitasnya.

Itulah satu-satunya perbedaan yang dapat saya pikirkan.

philnash
sumber
Bagaimana itu akan mempengaruhi hasilnya? Mungkin dari segi apa saja yang termasuk dalam DOM? Kasus pengujian saya menunjukkan bahwa Mozilla tidak membuang visibilitas: elemen tersembunyi.
Chris Noe
Elemen akan berada di DOM terlepas dari gaya CSS, maksud saya, pengguna tunanetra yang menggunakan perangkat lunak pembaca layar mungkin memiliki teks dalam elemen opacity: 0 yang dibacakan untuk mereka, sedangkan elemen yang sama tidak akan dibaca jika elemen yang sama memiliki visibility: hidden. Ini benar-benar masalah aksesibilitas, karena hasilnya berbeda.
philnash
poin berguna, ini adalah salah satu hasil dari pengaturan visibilitas menjadi tersembunyi, tetapi ini hanyalah puncak gunung es. Lebih khusus lagi, visibility: hidden membuatnya (tampaknya) menghilang dari dom, dengan tetap mempertahankan tata letaknya di halaman.
Nishant
4

Saya tidak yakin sepenuhnya, tetapi inilah cara saya melakukan transparansi lintas browser:

opacity: 0.6;
-moz-opacity: 0.6;
filter: alpha(opacity=60);

objek dengan Visibilitas: tersembunyi masih memiliki bentuk, mereka tidak terlihat. elemen nol opasitas masih dapat diklik dan bereaksi terhadap peristiwa lain.

Andrew Bullock
sumber
Apa artinya memiliki bentuk dan tidak terlihat?
Chris Noe
@chris, itu berarti mereka masih menggunakan tempat di halaman
Penjual Mitchel
2
opacity digunakan untuk memutuskan bagaimana elemen digambar di atas latar belakang. Dengan opactiy disetel ke 0, elemen secara alami mengambil ruang tetapi tidak ada yang digambar karena 0% warna elemen dicampur dengan 100% latar belakang sehingga tidak ada yang baru muncul. teman tersembunyi dan serupa berarti elemen tersebut dilewati saat menggambar berlangsung.
mP.
2

Saat membuat gaya pengguna yang memengaruhi elemen dalam a contenteditable, saya perhatikan bahwa jika Anda menyetel sesuatu ke visibility: hidden, maka tanda sisipan masukan tidak benar-benar ingin berinteraksi dengannya. Misalnya jika sudah

<div contenteditable><span style='visibility: hidden;'></span></div>

... maka tampaknya jika Anda memfokuskan div / span itu, Anda tidak dapat benar-benar mengetik di dalamnya. Padahal dengan opacity: 0itu sepertinya Anda bisa. Saya belum mengujinya secara ekstensif, tetapi menurut saya hal ini layak untuk disebutkan di sini karena tidak ada orang lain di halaman ini yang membicarakan tentang efek pada input teks. Ini tampaknya mungkin terkait dengan hal-hal peristiwa yang disebutkan di atas.

MalcolmOcean
sumber
0

Apa yang dikatakan Phil itu benar.

IE mendukung opacity:

filter:alpha(opacity=0);
Diodeus - James MacFarlane
sumber
0

Properti memiliki arti semantik yang berbeda . Meskipun CSS semantik terdengar konyol, seperti yang disebutkan oleh pengguna lain, hal itu berdampak pada perangkat seperti pembaca layar - tempat semantik memengaruhi aksesibilitas halaman.

Zack The Human
sumber