Was ist der Unterschied zwischen visibility:collapse
und display:none
?
83
Kurzfassung:
Ersteres wird verwendet, um Tabellenelemente vollständig auszublenden. Letzteres wird verwendet, um alles andere vollständig zu verbergen.
Lange Version :
visibility: collapse
Blendet 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: collapse
wird, verhält es sich wie folgt visibility: hidden
. Dies macht ein Element unsichtbar, nimmt jedoch weiterhin Platz im Layout ein.
display: none
Blendet ein Element vollständig aus , sodass es keinen Platz im Layout einnimmt, sollte jedoch nicht für Tabellenelemente verwendet werden.
display: none
die nicht für Tabellenelemente verwendet werden sollte, wäre eine nette Ergänzung.display: none;
ist, weil es Tabellen mitcolspan
und brichtrowspan
.visibility: collapse
verhält sich genau wievisibility: hidden
in 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: collapse
sich wie verhaltendisplay: 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: none
mit Tabellen verwenden" ist eine wertvolle Faustregel, die jedoch nicht die ganze Geschichte erzählt.display: none
Sie diese Option, wenn Sie nicht möchten, dass Ihre versteckten Elemente in irgendeiner Weise am Layoutprozess der Tabelle (oder der flexiblen Linie) beteiligt sind.visibility: collapse
Sie 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: none
undvisibility: collapse
für eine Tabellenzeile zeigt:Code-Snippet anzeigen
.show-right-border { border-right: 1px black solid; }
<h3>visibility: collapse</h3> <table class="show-right-border"> <tr> <td>Short text.</td> <td style="visibility: collapse;">Loooooooooong text.</td> </tr> </table> <h3>display: none</h3> <table class="show-right-border"> <tr> <td>Short text.</td> <td style="display: none;">Loooooooooong text.</td> </tr> </table>
quelle
visibility:collapse
funktioniert nicht für Tabellen in Safari. Ich fanddisplay:none
, dass es in Tabellenzeilen (einschließlich in Safari) gut funktioniert, obwohl die obigen Kommentare zur Spaltenbreite korrekt sindvisibility:collapse
sollte nur für Tabellen verwendet werden. Auf anderen Elementen wird es alsvisibility:hidden
.visibility:hidden
Blenden Sie das Element aus, nehmen Sie jedoch den Platz des Elements ein, währenddisplay:none
der Platz nicht einmal beibehalten wird.Ressourcen:
Zum gleichen Thema:
quelle
visibility:collapse
hat eindisplay:none
Verhalten nur für Tabellenelemente. Auf anderen Elementen sollte es als rendernhidden
.quelle
Sie können
visibility: collapse
ein Element auch unter einem Flexbox-Container (einem Flex-Element) anwenden . Es verhält sich so, als würden Sie es auf ein Element mitdisplay: table-row
oder anwendendisplay: table-column
quelle