Właściwości CSS: wyświetlanie a widoczność


Odpowiedzi:


111

visibilityNieruchomość tylko informuje przeglądarkę, czy pokazywać element lub nie. Jest albo widoczny ( visible- możesz to zobaczyć), albo niewidoczny ( hidden- nie możesz tego zobaczyć).

displayNieruchomość informuje przeglądarkę, jak rysować i pokazać element, jeśli w ogóle - czy powinny być wyświetlane jako inlineelementu (tj płynie z tekstu i innych elementów inline) lub block-level elementu (czyli ma właściwości wysokość i szerokość, które można ustawić, to floatable itp), albo inline-block(czyli działa jak pudełko bloku ale układa inline zamiast) i inni ( list-item, table, table-row, table-cell, flex, etc).

Kiedy ustawisz element na, display: blockale także ustawisz visibility: hidden, przeglądarka nadal traktuje go jako element blokowy, z wyjątkiem tego, że go po prostu nie widzisz. Trochę tak, jak układasz czerwone pudełko na niewidzialnym pudełku: czerwone pudełko wygląda tak, jakby unosiło się w powietrzu, podczas gdy w rzeczywistości znajduje się na fizycznym pudełku, którego nie widać.

Innymi słowy, oznacza to, że elementy z wartością displaynie nonebędą nadal wpływać na przepływ elementów na stronie, niezależnie od tego, czy są widoczne, czy nie. Ramki otaczające element za pomocą display: nonebędą się zachowywać tak, jakby tego elementu nigdy tam nie było (chociaż pozostanie w DOM).


1
.. czy wyświetlacz nie ma nic wspólnego z DOM? na przykład ... jeśli tak display: none;, to ten element zostanie usunięty z DOM? czy jestem całkowicie zdezorientowany?
Hristo

3
@Hristo: Właściwie tak nie jest. Nigdy nie możesz wpłynąć na pozycję lub obecność elementu w DOM za pomocą samego CSS.
BoltClock

@BoltClock ... tak, masz rację. Zdałem sobie sprawę, że nigdy nie można wyjąć elementu z DOM, a jedynie wpłynąć na to, jak jest wyświetlany w odniesieniu do DOM. czy to brzmi dokładniej?
Hristo

Należy zauważyć, że używając metody hide () jQuery, która wewnętrznie ustawia display na none, nie możesz uzyskać pozycji tego elementu. Korzystając z widoczności, jesteś w stanie to zrobić.
p0rsche

21

widoczność: ukryta;

  • element nie zostanie pomalowany ORAZ nie otrzyma zdarzeń kliknięcia / dotyku, ale zajmowana przez niego przestrzeń jest nadal zajęta
  • ponieważ nadal jest tam do celów układu, możesz go zmierzyć bez widoczności
  • zmiana treści nadal będzie kosztować czas ponownego przepływu / układu strony
  • widoczność jest dziedziczona, więc oznacza to, że możesz sprawić, że poddzieci będą widoczne, nadając im widoczność: widoczne;

Nie wyświetla się;

  • sprawi, że element nie będzie uczestniczył w przepływie / układzie
  • może (w zależności od używanej przeglądarki) zabijać filmy Flash i ramki iframe (które zostaną ponownie uruchomione / załadowane po ponownym wyświetleniu), chociaż możesz temu zapobiec za pomocą ramek iframe
  • element nie zajmie miejsca. dla celów układu jest tak, jakby nie istniał
  • sprawi, że niektóre przeglądarki / urządzenia (takie jak iPad) będą bezpośrednio pobierać pamięć używaną przez ten element, powodując drobne problemy, jeśli przełączysz się między brakiem a inną wartością podczas animacji

dodatkowe uwagi:

  • obrazy w ukrytej zawartości: we wszystkich popularnych przeglądarkach obrazy są nadal ładowane, mimo że znajdują się w jakimkolwiek elemencie z widocznością: ukryte; lub wyświetlacz: brak;
  • czcionki w ukrytej zawartości: przeglądarki webkit (Chrome / Safari) mogą opóźniać ładowanie niestandardowych czcionek, które są używane tylko w ukrytych elementach, w tym przez widoczność lub wyświetlanie. Może to spowodować, że będziesz mierzyć elementy, które nadal używają czcionki zastępczej, dopóki czcionka niestandardowa nie zostanie załadowana.

19

display: none usuwa element z przepływu kodu HTML, podczas gdy visibility: hidden nie.


2

Nie wyświetla się; usunie styl wizualny / przestrzeń fizyczną elementów DOM z DOM, gdzie widoczność: ukryta; nie usunie elementu, ale po prostu go ukryje. Zatem element div zajmujący 300px pionowej przestrzeni w Twoim DOM NADAL będzie zajmował 300px pionowej szerokości po ustawieniu na visibility: hidden; ale gdy ustawione na wyświetlanie: brak; jego style wizualne i zajmowana przez nie przestrzeń są ukryte, a przestrzeń jest następnie „uwalniana” z braku lepszego słowa.

[EDYCJA] - To było jakiś czas temu, kiedy napisałem powyższe i czy nie miałem wystarczającej wiedzy, czy miałem zły dzień, nie wiem, ale w rzeczywistości element NIGDY nie jest usuwany z hierarchii DOM. Wszystkie „style” wyświetlania na poziomie bloków są całkowicie „ukryte” podczas korzystania z display: none, podczas gdy w przypadku visibility: hidden; sam element jest ukryty, ale nadal zajmuje wizualną przestrzeń w DOM. Mam nadzieję, że to wszystko wyjaśnia


4
Nie, display: nonebędzie nie usunąć element z DOM. Element nadal tam jest, po prostu nie jest wyświetlany .
BoltClock
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.