Reguły CSS visibility:hidden
i display:none
oba powodują, że element nie jest widoczny. Czy to są synonimy?
css
visibility
Chris Noe
źródło
źródło
visibility: hidden
idisplay: none
będzie równie wydajny, ponieważ oba układy ponownego uruchamiania , farby i kompozyty. Jest to jednakopacity: 0
funkcjonalnie równoważnevisibility: hidden
i nie powoduje ponownego uruchomienia kroku układu, więc radzę użyć tego, jeśli nie przeszkadza ci przydzielenie pustej przestrzeni (w przeciwnym razie użyjdisplay: none
).opacity: 0
należy zachować ostrożność podczas obchodzenia się z danymi wejściowymi lub przyciskami, ponieważ nadal istniałyby i prawdopodobnie powodowałyby dziwne interakcje użytkownika.Nie są synonimami.
display:none
usuwa element z normalnego przepływu strony, umożliwiając wypełnienie innych elementów.visibility:hidden
pozostawia element w normalnym przepływie strony tak, że nadal zajmuje miejsce.Wyobraź sobie, że czeka cię kolejka do wesołego miasteczka, a ktoś w kolejce robi się tak hałaśliwy, że ochrona wyrywa go z linii. Wszyscy w kolejce przesuną się następnie o jedną pozycję do przodu, aby wypełnić puste miejsce. To jest jak
display:none
.Porównaj to z podobną sytuacją, ale ktoś przed tobą zakłada pelerynę niewidzialności. Podczas przeglądania linii będzie wyglądać, jakby była pusta przestrzeń, ale ludzie tak naprawdę nie mogą wypełnić tej pustej przestrzeni, ponieważ ktoś nadal tam jest. To jest jak
visibility:hidden
.źródło
Jedną z rzeczy, które warto dodać, choć nie zadawano tego pytania, jest to, że istnieje trzecia opcja uczynienia obiektu całkowicie przezroczystym. Rozważać:
(Aby zobaczyć wynik, kliknij przycisk „Uruchom fragment kodu” powyżej).
Różnica między 1 a 2 została już wskazana (a mianowicie, 2 nadal zajmuje miejsce). Istnieje jednak różnica między 2 a 3: w przypadku 3 mysz nadal przełącza się na dłoń po najechaniu kursorem na link, a użytkownik nadal może kliknąć link, a zdarzenia JavaScript nadal będą się uruchamiać na łączu. Zwykle nie jest to pożądane zachowanie (ale może czasem tak jest?).
Inna różnica polega na tym, że jeśli zaznaczysz tekst, a następnie skopiujesz / wkleisz jako zwykły tekst, otrzymasz:
W przypadku 3 tekst zostanie skopiowany. Może byłoby to przydatne w przypadku pewnego rodzaju znaku wodnego lub chciałbyś ukryć informację o prawach autorskich, która pojawiłaby się, gdyby niedbale użytkownik skopiował / wkleił Twoje treści?
źródło
display:none
usuwa element z przepływu układu.visibility:hidden
ukrywa to, ale opuszcza przestrzeń.źródło
Istnieje duża różnica, jeśli chodzi o węzły potomne. Na przykład: jeśli masz div rodzica i zagnieżdżoną div dziecka. Więc jeśli napiszesz w ten sposób:
W takim przypadku żaden div nie będzie widoczny. Ale jeśli napiszesz w ten sposób:
Wtedy div div będzie widoczny, a div div nie zostanie pokazany.
źródło
Nie są synonimami -
display: none
usuwa element z przepływu strony, a reszta strony płynie tak, jakby jej nie było.visibility: hidden
ukrywa element z widoku, ale nie przepływ strony, pozostawiając miejsce na stronie.źródło
display: none
usuwa element ze strony całkowicie, a strona jest budowana tak, jakby elementu w ogóle nie było.Visibility: hidden
pozostawia miejsce w obiegu dokumentów, nawet jeśli go nie widać.To może, ale nie musi, mieć dużej różnicy w zależności od tego, co robisz.
źródło
Gdy
visibility:hidden
obiekt nadal zajmuje pionową wysokość na stronie. Dziękidisplay:none
temu jest całkowicie usuwany. Jeśli masz tekst pod obrazem i tak się dziejedisplay:none
, tekst zostanie przesunięty w górę, aby wypełnić miejsce, w którym znajdował się obraz. Jeśli zrobisz widoczność: ukryty tekst pozostanie w tej samej lokalizacji.źródło
display:none
ukryje element i zwinie zajmowaną przestrzeń, podczas gdyvisibility:hidden
ukryje element i zachowa przestrzeń elementów. display: żaden nie wpływa również na niektóre właściwości dostępne z javascript w starszych wersjach IE i Safari.źródło
Oprócz wszystkich innych odpowiedzi, istnieje istotna różnica dla IE8: Jeśli używasz
display:none
i próbujesz uzyskać szerokość lub wysokość elementu, IE8 zwraca 0 (podczas gdy inne przeglądarki zwracają rzeczywiste rozmiary). IE8 zwraca poprawną szerokość lub wysokość tylko dlavisibility:hidden
.źródło
visibility:hidden
zachowuje przestrzeń;display:none
nie.źródło
Nie będzie dostępny na stronie i nie zajmuje miejsca.
ukrywa element, ale nadal będzie zajmować taką samą przestrzeń jak poprzednio. Element zostanie ukryty, ale nadal wpływa na układ.
visibility: hidden
zachowaj przestrzeń,display: none
ale nie zachowaj przestrzeni.Wyświetl brak Przykład: https://www.w3schools.com/css/tryit.asp?filename=trycss_display_none
Ukryty przykład widoczności: https://www.w3schools.com/cssref/tryit.asp?filename=trycss_visibility
źródło
Jeśli ustawiono właściwość widoczności
"hidden"
, przeglądarka nadal będzie zajmować miejsce na stronie, nawet jeśli jest niewidoczna.Ale kiedy ustawimy obiekt na
"display:none"
, przeglądarka nie przydziela miejsca na stronie na jego zawartość.Przykład:
Pokaż szczegóły
źródło
visibility:hidden
zatrzyma element na stronie i zajmie to miejsce, ale nie wyświetli się użytkownikowi.display:none
nie będzie dostępny na stronie i nie zajmuje miejsca.źródło
Inna różnica polega na tym, że
visibility:hidden
działa w naprawdę starych przeglądarkach idisplay:none
nie:https://www.w3schools.com/cssref/pr_class_visibility.asp
https://www.w3schools.com/cssref/pr_class_display.asp
źródło
Różnica wykracza poza styl i jest odzwierciedlona w tym, jak zachowują się elementy podczas manipulowania za pomocą JavaScript.
Skutki i skutki uboczne
display: none
:clientWidth
,clientHeight
,offsetWidth
,offsetHeight
,scrollWidth
,scrollHeight
,getBoundingClientRect()
,getComputedStyle()
, cały zysk0
S.Skutki i skutki uboczne
visibility: hidden
:innerText
(ale nieinnerHTML
) elementu docelowego i potomków zwraca pusty ciąg.źródło
display:none;
nie wyświetli elementu ani nie przydzieli miejsca na element na stronie, natomiastvisibility:hidden;
nie wyświetli elementu na stronie, ale przydzieli miejsce na stronie. W obu przypadkach możemy uzyskać dostęp do elementu w DOM. Aby lepiej to zrozumieć, spójrz na następujący kod: display: none vs. visibility: hiddenźródło
Jest tu wiele szczegółowych odpowiedzi, ale pomyślałem, że powinienem dodać to, aby rozwiązać problem dostępności, ponieważ są to implikacje.
display: none;
ivisibility: hidden;
może nie być odczytane przez wszystkie programy do odczytu ekranu. Pamiętaj, czego doświadczą użytkownicy niedowidzący.Pytanie dotyczy także synonimów.
text-indent: -9999px;
to jeden, który jest z grubsza równoważny. Ważną różnicątext-indent
jest to, że często będą czytane przez czytniki ekranu. Może to być trochę nieprzyjemne, ponieważ użytkownicy mogą nadal przechodzić między zakładkami a linkiem.Dla ułatwienia dostępu widzę dziś kombinację stylów służących do ukrywania elementu, a jednocześnie widoczną dla czytników ekranu.
Świetną praktyką jest utworzenie linku „Przejdź do treści” do kotwicy głównej treści. Użytkownicy niedowidzący prawdopodobnie nie chcą słuchać pełnego drzewa nawigacji na każdej stronie. Uczyń link wizualnie ukrytym. Użytkownicy mogą po prostu nacisnąć klawisz Tab, aby uzyskać dostęp do linku.
Aby uzyskać więcej informacji na temat dostępności i ukrytej zawartości, zobacz:
źródło