Unterschied zwischen "Sichtbarkeit: Zusammenbruch" und "Anzeige: Keine"

83

Was ist der Unterschied zwischen visibility:collapseund display:none?

Veera
quelle

Antworten:

97

Kurzfassung:

Ersteres wird verwendet, um Tabellenelemente vollständig auszublenden. Letzteres wird verwendet, um alles andere vollständig zu verbergen.

Lange Version :

visibility: collapseBlendet ein Element vollständig aus (damit es keinen Platz im Layout einnimmt), sondern nur, wenn das Element ein Tabellenelement ist .

Wenn es für andere Elemente als Tabellenelemente verwendet visibility: collapsewird, verhält es sich wie folgt visibility: hidden. Dies macht ein Element unsichtbar, nimmt jedoch weiterhin Platz im Layout ein.

display: noneBlendet ein Element vollständig aus , sodass es keinen Platz im Layout einnimmt, sollte jedoch nicht für Tabellenelemente verwendet werden.

W3C-Referenz

Pekka
quelle
7
Dies ist nützlich, aber ein Zitat oder eine Erklärung für die Behauptung, display: nonedie nicht für Tabellenelemente verwendet werden sollte, wäre eine nette Ergänzung.
Mark Amery
@ MarkAmery Ein guter Grund, nicht zu verwenden, display: none;ist, weil es Tabellen mit colspanund bricht rowspan.
Dai
34

visibility: collapseverhält sich genau wie visibility: hiddenin den meisten Formatierungskontexten: Der vom Element benötigte Platz ist im Layout "reserviert", aber das Element selbst wird nicht gerendert, sodass an der Stelle, an der es gewesen wäre, ein Leerzeichen verbleibt.

Es gibt drei Ausnahmen, die ich kenne: Tabellenzeilen, Tabellenspalten und Flex-Elemente, die visibility: collapsesich wie verhalten display: none, aber mit einem großen Unterschied: der 'Strebe'. Sie können sich die Strebe als einen Platzhalter mit der Größe Null vorstellen, der im Layoutprozess keinen eigenen Platz beansprucht, aber dennoch Teil der Formatierungsstruktur ist und an einigen Größenberechnungen teilnimmt.

Eine reduzierte Tabellenzeile nimmt beispielsweise keinen vertikalen Platz in der Tabelle ein, aber die Tabellenspalten werden weiterhin so dimensioniert, als ob die reduzierte Zeile und ihr Inhalt tatsächlich sichtbar wären. Dies soll verhindern, dass Spalten beim Ein- und Ausschalten von Zeilen "wackeln". Ebenso nimmt ein zusammengeklapptes Flex-Element keinen Platz entlang der Hauptachse ein, trägt aber dennoch zur Quergröße der Flex-Linie bei.

"Nicht display: nonemit Tabellen verwenden" ist eine wertvolle Faustregel, die jedoch nicht die ganze Geschichte erzählt.

  • Verwenden display: noneSie diese Option, wenn Sie nicht möchten, dass Ihre versteckten Elemente in irgendeiner Weise am Layoutprozess der Tabelle (oder der flexiblen Linie) beteiligt sind.
  • Verwenden visibility: collapseSie diese Option, wenn Sie Elemente dynamisch anzeigen und ausblenden möchten, ohne das Layout der Tabelle (oder der flexiblen Linie) zu destabilisieren.

Hier ist ein Codefragment, das den Unterschied zwischen display: noneund visibility: collapsefür eine Tabellenzeile zeigt:

Mathieu Renda
quelle
2
Nur einer erzählt die ganze Geschichte. @ Mathieu Renda Sie sollten die Hauptantwort bearbeiten und all dieses Wissen hinzufügen.
Áxel Costas Pena
visibility:collapsefunktioniert nicht für Tabellen in Safari. Ich fand display:none, dass es in Tabellenzeilen (einschließlich in Safari) gut funktioniert, obwohl die obigen Kommentare zur Spaltenbreite korrekt sind
Roadnottaken
19

visibility:collapsesollte nur für Tabellen verwendet werden. Auf anderen Elementen wird es als visibility:hidden.

visibility:hiddenBlenden Sie das Element aus, nehmen Sie jedoch den Platz des Elements ein, während display:noneder Platz nicht einmal beibehalten wird.


Ressourcen:

Zum gleichen Thema:

Colin Hebert
quelle
3

visibility:collapsehat ein display:noneVerhalten nur für Tabellenelemente. Auf anderen Elementen sollte es als rendern hidden.

zneak
quelle
0

Sie können visibility: collapseein Element auch unter einem Flexbox-Container (einem Flex-Element) anwenden . Es verhält sich so, als würden Sie es auf ein Element mit display: table-rowoder anwendendisplay: table-column

Vladyn
quelle