Jaka jest różnica między visibility: hidden a display: none?

Reguły CSS visibility:hidden i display:none powodują, że element nie jest widoczny. Czy to synonimy?

 1238
Author: Kip, 2008-09-25

19 answers

display:none oznacza to, że dany tag w ogóle nie pojawi się na stronie (chociaż nadal można z nim wchodzić w interakcje za pośrednictwem dom). Nie będzie dla niej miejsca między innymi tagami.

visibility:hidden oznacza to, że w przeciwieństwie do display:none, znacznik nie jest widoczny, ale miejsce jest dla niego przydzielane na stronie. Znacznik jest renderowany, po prostu nie jest widoczny na stronie.

Na przykład:

test | <span style="[style-tag-value]">Appropriate style in this tag</span> | test

Zastąpienie [style-tag-value] przez display:none daje:

test |   | test

Zastąpienie [style-tag-value] przez visibility:hidden Wyniki w:

test |                        | test
 1541
Author: kemiller2002,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-02-12 13:29:53

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 taki, że nadal zajmuje miejsce.

Wyobraź sobie, że jesteś w kolejce do przejażdżki w parku rozrywki, a ktoś w kolejce robi się tak hałaśliwy, że ochrona wyrywa go z kolejki. Wszyscy w kolejce posuwają się do przodu o jedną pozycję, aby wypełnić puste miejsce. To jest jak display:none. Kontrast z podobną sytuacją, ale ktoś przed tobą zakłada pelerynę niewidzialności. Podczas oglądania linii będzie ona wyglądać tak, jakby była pusta przestrzeń, ale ludzie nie mogą tak naprawdę wypełnić tej pustej przestrzeni, ponieważ ktoś nadal tam jest. To jest jak visibility:hidden.
 253
Author: user22151,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-02-12 13:31:09

Jedną rzeczą wartą dodania, choć nie pytano, jest to, że istnieje trzecia opcja uczynienia obiektu całkowicie przezroczystym. Consider:

1st <a href="http://example.com" style="display: none;">unseen</a> link.<br />
2nd <a href="http://example.com" style="visibility: hidden;">unseen</a> link.<br />
3rd <a href="http://example.com" style="opacity: 0;">unseen</a> link.

(Kliknij przycisk" Uruchom fragment kodu " powyżej, aby zobaczyć wynik.)

Różnica między 1 A 2 została już wskazana(mianowicie, 2 nadal zajmuje miejsce). Jednak jest różnica między 2 a 3: w przypadku 3, mysz nadal przełącza się na rękę po najechaniu kursorem na link, a użytkownik nadal można kliknąć na link, A zdarzenia Javascript nadal będą uruchamiane na link. Zazwyczaj jest tonie zachowanie, które chcesz (ale może czasami tak jest?).

Kolejna różnica polega na tym, że jeśli zaznaczysz tekst, a następnie skopiujesz / wkleisz jako zwykły tekst, otrzymasz:

1st link.
2nd  link.
3rd unseen link.

W przypadku 3 tekst zostanie skopiowany. Może byłoby to przydatne dla pewnego rodzaju znaku wodnego lub jeśli chcesz ukryć informację o prawach autorskich, która pojawi się, jeśli niedbale użytkownik skopiuje / wklei Twoje zadowolona?

 117
Author: Kip,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2020-05-21 14:53:29

display:none usuwa element z przepływu układu.

visibility:hidden ukrywa go, ale pozostawia przestrzeń.

 91
Author: mmaibaum,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-10-16 00:01:41

Istnieje duża różnica, jeśli chodzi o węzły potomne. Na przykład: jeśli masz rodzic div I zagnieżdżony potomny div. Więc jeśli piszesz tak:

<div id="parent" style="display:none;">
    <div id="child" style="display:block;"></div>
</div>

W tym przypadku żaden z div nie będzie widoczny. Ale jeśli napiszesz TAK:

<div id="parent" style="visibility:hidden;">
    <div id="child" style="visibility:visible;"></div>
</div>

Wtedy potomny div będzie widoczny, podczas gdy rodzic div nie będzie widoczny.

 74
Author: Govinda,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2020-04-19 10:50:15

Nie są synonimami - display: none usuwa element z przepływu strony, a reszta strony płynie tak, jakby go nie było.

visibility: hidden ukrywa element z widoku, ale nie przepływ strony, pozostawiając miejsce na niego na stronie.

 19
Author: ConroyP,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-09-25 12:41:15

display: none usuwa element ze strony CAŁKOWICIE, a strona jest zbudowana tak, jakby elementu w ogóle nie było.

Visibility: hidden pozostawia miejsce w obiegu dokumentu, nawet jeśli nie można go już zobaczyć.

To może, ale nie musi mieć znaczenia, w zależności od tego, co robisz.
 15
Author: wcm,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-10-16 00:03:23

Z visibility:hidden obiekt nadal zajmuje pionową wysokość na stronie. Z display:none jest całkowicie usunięty. Jeśli masz tekst pod obrazem i wykonasz display:none, tekst ten przesunie się w górę, aby wypełnić miejsce, w którym znajdował się obraz. Jeśli zrobisz widoczność: ukryty tekst pozostanie w tym samym miejscu.

 11
Author: Steven Williams,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-10-16 00:02:37

display:none ukryje element i zwinie zajmowaną przestrzeń, podczas gdy visibility:hidden ukryje element i zachowa przestrzeń elementów. display: none wpływa również na niektóre właściwości dostępne w javascript w starszych wersjach IE i Safari.

 9
Author: slashnick,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-09-25 12:41:45

visibility:hidden zachowuje przestrzeń; display:none nie.

 8
Author: Pearl,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-12-11 06:54:50

Oprócz wszystkich innych odpowiedzi, Istnieje istotna różnica dla IE8: jeśli użyjesz display:none i spróbujesz uzyskać szerokość lub Wysokość elementu, IE8 zwróci 0 (podczas gdy inne przeglądarki zwrócą rzeczywiste rozmiary). IE8 zwraca poprawną szerokość lub wysokość tylko dla visibility:hidden.

 7
Author: szeryf,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-04-01 17:42:43
display: none; 

Nie będzie on dostępny na stronie i nie zajmuje miejsca.

visibility: hidden; 

Ukrywa element, ale nadal zajmuje tę samą przestrzeń, co wcześniej. Element będzie ukryty, ale nadal wpływa na układ.

visibility: hidden zachowaj przestrzeń, podczas gdy display: none nie zachowuje przestrzeni.

Display None przykład: https://www.w3schools.com/css/tryit.asp?filename=trycss_display_none

Visibility Hidden Example : https://www.w3schools.com/cssref/tryit.asp?filename=trycss_visibility

 6
Author: Anu,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-05-03 09:17:12

Jeśli właściwość visibility ustawiona na "hidden", przeglądarka nadal zajmie miejsce na stronie dla zawartości, nawet jeśli jest niewidoczna.
Ale gdy ustawimy obiekt na "display:none", przeglądarka nie przydziela miejsca na stronie dla jego zawartości.

Przykład:

<div style="display:none">
Content not display on screen and even space not taken.
</div>

<div style="visibility:hidden">
Content not display on screen but it will take space on screen.
</div>

Zobacz szczegóły

 5
Author: Shubelal Kumar,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-12-27 05:34:23

visibility:hidden zachowa element na stronie i zajmuje to miejsce, ale nie pokazuje się użytkownikowi.

display:none nie będzie dostępny na stronie i nie zajmuje miejsca.

 5
Author: Ramesh,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-10-15 23:57:10

Inną różnicą jest to, że visibility:hidden działa w naprawdę, naprawdę starych przeglądarkach, a display:none nie:

Https://www.w3schools.com/cssref/pr_class_visibility.asp

Https://www.w3schools.com/cssref/pr_class_display.asp

 3
Author: Dave Burton,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-12-04 12:28:08

Różnica wykracza poza styl i znajduje odzwierciedlenie w tym, jak elementy zachowują się podczas manipulowania za pomocą JavaScript.

Efekty i skutki uboczne display: none:

    Element docelowy jest usuwany z obiegu dokumentu (nie ma wpływu na układ innych elementów); [18]}dotyczy to wszystkich potomków (również nie są wyświetlane i nie mogą "otrząsnąć się" z tego dziedzictwa);
  • pomiarów nie można dokonać dla elementu docelowego ani dla jego potomków – nie są oddane w ogóle, stąd ich clientWidth, clientHeight, offsetWidth, offsetHeight, scrollWidth, scrollHeight, getBoundingClientRect(), getComputedStyle(), wszystkie return 0 s.

Efekty i skutki uboczne visibility: hidden:

    Element docelowy jest ukryty przed widokiem, ale nie jest wyjęty z przepływu i wpływa na układ, zajmując jego normalną przestrzeń.]}
  • innerText (ale nie innerHTML) elementu docelowego i potomków zwraca pusty łańcuch.
 2
Author: Adam Jagosz,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2019-06-20 16:44:51

display:none; visibility:hidden; nie wyświetli elementu, ani nie przydzieli miejsca dla elementu na stronie, podczas gdy visibility: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ć, zapoznaj się z poniższym kodem: display: none vs visibility: hidden

 1
Author: Pritam Bohra,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-04-02 05:09:42

Jest tu wiele szczegółowych odpowiedzi, ale pomyślałem, że powinienem dodać to do kwestii dostępności, ponieważ istnieją implikacje.

display: none; i visibility: hidden; nie mogą być odczytywane przez wszystkie programy czytnika ekranu. Należy pamiętać, czego doświadczą użytkownicy niedowidzący.

Pytanie dotyczy również synonimów. text-indent: -9999px; jest jednym innym, który jest mniej więcej równoważny. Ważną różnicą w stosunku do text-indent jest to, że często czytany jest przez czytniki ekranu. Może to być trochę złe doświadczenie jako użytkownicy nadal można zakładkę do łącza.

W odniesieniu do dostępności, to, co widzę dziś, to kombinacja stylów, aby ukryć element, będąc widocznym dla czytników ekranu.

{
  clip: rect(1px, 1px, 1px, 1px);
  clip-path: inset(50%);
  height: 1px;
  width: 1px;
  margin: -1px;
  overflow: hidden;
  padding: 0;
  position: absolute;
}

Świetną praktyką jest tworzenie 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. Spraw, aby link był wizualnie Ukryty. Użytkownicy mogą po prostu nacisnąć tab, aby uzyskać dostęp do linku.

Więcej o dostępności i ukryte treści, patrz:

 0
Author: cleaver,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2020-03-04 15:48:20

Display: none

Usunie element z normalnego przepływu strony, umożliwiając wypełnienie innych elementów.

Element w ogóle nie pojawi się na stronie, ale nadal możemy z nim współdziałać poprzez DOM. Nie będzie dla niej miejsca między innymi elementami.

Visibility: hidden

Pozostawi element w normalnym przepływie strony taki, który nadal zajmuje przestrzeń.

Element nie jest widoczne i miejsce elementu jest przeznaczone dla niego na stronie.

Inne sposoby ukrywania elementów

Użyj z-index

#element {
   z-index: -11111;
}

Przenieś element ze strony

#element {
   position: absolute; 
   top: -9999em;
   left: -9999em;
}

Ciekawe informacje o widoczności: Ukryta i wyświetlanie: brak właściwości

visibility: hidden i display: none będą równie wydajne, ponieważ oba ponownie uruchamiają układ, farbę i kompozycję. Jednak {[4] } jest funkcjonalnością równoważną {[2] } i nie ponownie uruchom krok układu.

I właściwość CSS-transition jest również ważną rzeczą, o którą musimy zadbać. Ponieważ przełączanie z visibility: hidden na visibility: visible pozwala na użycie CSS-transitions, podczas gdy przełączanie z display: none na display: block nie. visibility: hidden ma dodatkową zaletę, że nie przechwytuje zdarzeń JavaScript, podczas gdy opacity: 0 przechwytuje zdarzenia

 0
Author: Seshu Vuggina,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2020-12-04 15:15:59