Czy krycie: 0 ma dokładnie taki sam efekt jak widoczność: ukryta


119

Jeśli tak, czy faktycznie powoduje to utratę visibilitywłaściwości?

(Zdaję sobie sprawę, że Internet Explorer nie obsługuje jeszcze tej właściwości CSS2.)
Porównanie silników układu

Zobacz także: Jaka jest różnica między widocznością: ukryta a wyświetlaniem: brak


4
A co powiesz na taborder? Jeśli visible = false, to formant nie uzyskuje żadnego fokusu, ale jeśli krycie wynosi 0, może klawisz Tab nadal wykonuje iterację między kontrolkami?
Stefan

Byłby interesującym przypadkiem testowym, aby zobaczyć, jak przejrzysta kontrola może zostać skupiona.
Chris Noe,

3
Próbowałem tego (FF3). Element wejściowy z nieprzezroczystością: 0 otrzymuje fokus zgodnie z taborderem, chociaż nie ma żadnego wizualnego wskazania. Kursor po prostu znika. Cokolwiek wpiszesz, zostanie wpisane w wartość elementu wejściowego. Ponowne naciśnięcie tabulatora powoduje przejście do następnego pola. Ciekawy.
Chris Noe

Odpowiedzi:


256

Oto zestawienie zweryfikowanych informacji z różnych odpowiedzi.

Każda z tych właściwości CSS jest unikalna. Oprócz renderowania elementu niewidocznego mają następujące dodatkowe efekty:

  1. Zwija przestrzeń, którą normalnie zajmowałby element
  2. Reaguje na zdarzenia (np. Kliknięcie, naciśnięcie klawisza)
  3. Uczestniczy w taborze
                     zwiń zakładka zdarzeń
krycie: 0 Nie Tak Tak
widoczność: ukryta Nie Nie Nie
widoczność: zwiń Tak * Nie Nie
wyświetlacz: brak Tak Nie Nie

* Tak wewnątrz elementu tabeli, w przeciwnym razie nie.

Próbowałem postępować zgodnie z dokumentacją Markdown tutaj: daringfireball.net/projects/markdown/syntax
Chris Noe,

W porządku, więc SO celowo nie obsługuje <table>. Więc zrobiłem to ascii.
Chris Noe

3
Ponadto w przypadku „krycia: 0” obiekty Flash są renderowane, a konstruktor duszka jest uruchamiany, ale w przypadku „widoczności: ukryty” nie.
pepkin88

Jeśli twoje radio / pola wyboru nie działają visibility:hidden, opacity: 0zamiast tego musisz użyć ich do wykrywania kliknięcia myszą.
dayuloli

7
@ChrisNoe: dzięki za podsumowanie. Jedną z rzeczy, warto dodać: Właśnie zbadane jak zrobić węzeł nadrzędny niewidoczny ale węzły potomne wciąż widoczne, wynik: nie ma szans na widocznych dzieci: opacity:0 albo display:none, ale jeśli używasz visibility: hidden można zrobić dzieci widoczny zvisibility: visible
Martin

14

Nie.

Elementy z nieprzezroczystością tworzą nowy kontekst układania.

Ponadto specyfikacja CSS tego nie definiuje, ale elementy z opacity:0są klikalne, a elementy z visibility:hiddennie.


12

Nie. Jest duża różnica. Są podobne, ponieważ możesz przejrzeć element, jeśli widoczność jest ukryta lub krycie wynosi 0

krycie: 0 : nie możesz klikać elementów za nim.

widoczność: ukryta : możesz klikać elementy za nim.


1
"Nie"? Czy jest to odpowiedź na Pytanie, czy jako odpowiedź na jedną z istniejących Odpowiedzi? Jeśli jest to późniejszy, należy go dodać jako komentarz pod odpowiedzią, na którą się zwraca.
Chris Noe

9
To jest odpowiedź na pytanie „Czy krycie: 0 ma dokładnie taki sam efekt jak widoczność: ukryta?” .... czy nie było to jednak oczywiste?
Nishant

5

Istnieje wiele różnic między visibilityi opacity. Większość odpowiedzi wspomina o pewnych różnicach, ale oto pełna lista.

  1. krycie nie dziedziczy, podczas gdy widoczność tak

  2. krycie jest animowane, a widoczność nie.
    (Cóż, z technicznego punktu widzenia tak jest, ale po prostu nie ma zdefiniowanego zachowania dla, powiedzmy, „37% zwiniętego i 63% ukrytego”, więc można to uznać za brak możliwości animacji).

  3. Używając krycia, nie możesz uczynić elementu potomnego bardziej nieprzezroczystym niż jego rodzic. Np. Jeśli masz ap z kolorem: czarnym i kryciem: 0,5, nie możesz uczynić żadnego z jego elementów potomnych w pełni czarnymi. Prawidłowe wartości krycia mieszczą się w zakresie od 0 do 1, a ten przykład wymagałby 2!
    W konsekwencji, zgodnie z komentarzem Martina , możesz mieć widoczne dziecko (z widocznością: widoczne) w niewidzialnym rodzicu (z widocznością: ukryte). Jest to niemożliwe w przypadku krycia; jeśli rodzic ma krycie: 0; jego dzieci są zawsze niewidoczne.

  4. Odpowiedź Kornela wspomina, że ​​wartości krycia mniejsze niż 1 tworzą własny kontekst stosowy; nie ma znaczenia dla widoczności.
    (Żałuję, że nie potrafię wymyślić sposobu, aby to zademonstrować, ale nie mogę wymyślić żadnego sposobu, aby pokazać łączący się kontekst widoczności: ukryty element).

  5. Zgodnie z odpowiedzią Philnasha elementy z kryciem: 0 są nadal odczytywane przez czytniki ekranu, podczas gdy są widoczne: elementy ukryte nie.

  6. Zgodnie z odpowiedzią Chrisa Noe , widoczność ma więcej opcji (takich jak zwijanie), a elementy, które nie są widoczne, nie reagują już na kliknięcia i nie można ich zakładać.

(Uczynienie tego wiki społeczności, ponieważ zapożyczanie z istniejących odpowiedzi nie byłoby sprawiedliwe w innym przypadku).


4

Nie jestem tego do końca pewien, ale myślę, że czytniki ekranu nie czytają rzeczy, które są ustawione na ukrytą widoczność, ale mogą czytać rzeczy niezależnie od ich krycia.

To jedyna różnica, jaką przychodzi mi do głowy.


Jaki miałby to wpływ na wynik? Może jeśli chodzi o to, co zawiera DOM? Moje przypadki testowe pokazują, że Mozilla nie odrzuca widoczności: ukryte elementy.
Chris Noe,

Elementy znajdowałyby się w DOM niezależnie od stylu CSS, mam na myśli, że niewidomi użytkownicy korzystający z czytników ekranu mogą mieć odczytany tekst w elemencie krycie: 0, podczas gdy nie, gdyby ten sam element miał widoczność: ukryty. To naprawdę problem z dostępnością, ponieważ wynik jest inny.
philnash

przydatna uwaga, jest to jeden z rezultatów ustawienia widoczności na ukrytą, ale to tylko wierzchołek góry lodowej. Mówiąc dokładniej, visibility: hidden sprawia, że ​​(pozornie) znika z dom, zachowując jednocześnie jego układ na stronie.
Nishant

4

Nie jestem do końca pewien, ale tak robię przezroczystość między przeglądarkami:

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

obiekty z widocznością: ukryte nadal mają kształt, po prostu nie są widoczne. Elementy nieprzezroczystości zero można nadal klikać i reagować na inne zdarzenia.


Co to znaczy mieć kształt i być niewidzialnym?
Chris Noe

@chris, to znaczy, że nadal zajmują miejsce na stronie
Mitchel Sellers,

2
krycie służy do decydowania, w jaki sposób element jest rysowany na tle. Przy opactiy ustawionym na 0 element naturalnie zajmuje przestrzeń, ale nic nie jest rysowane, ponieważ 0% koloru elementu jest zmieszane ze 100% tła, co powoduje, że nie pojawia się nic nowego. ukryci i podobni znajomi oznaczają, że element jest pomijany podczas rysowania.
mP.

2

Tworząc styl użytkownika, który wpływa na elementy w a contenteditable, zauważyłem, że jeśli ustawisz coś na visibility: hidden, to karetka wejścia tak naprawdę nie chce z tym współdziałać. Np. Jeśli masz

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

... wtedy wydaje się, że jeśli skupisz się na tym div / span, nie możesz w rzeczywistości go wpisać. Podczas opacity: 0gdy wydaje się, że możesz. Nie testowałem tego szczegółowo, ale doszedłem do wniosku, że warto o tym tutaj wspomnieć, ponieważ nikt inny na tej stronie nie mówił o wpływie na wprowadzanie tekstu. Wydaje się to jednak prawdopodobnie związane z wydarzeniami wymienionymi powyżej.



0

Właściwości mają różne znaczenia semantyczne . Chociaż semantyczny CSS brzmi, jakby był głupi, jak wspominali inni użytkownicy, ma on wpływ na urządzenia takie jak czytniki ekranu - gdzie semantyka wpływa na dostępność strony.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.