Разница между «видимость: свернуть» и «отображение: нет»

Ответы:

100

Укороченная версия:

Первый используется для полного скрытия элементов таблицы. Последний используется, чтобы полностью скрыть все остальное.

Длинная версия :

visibility: collapseскрывает элемент полностью (чтобы он не занимал места в макете), но только тогда, когда элемент является элементом таблицы .

При использовании с элементами, отличными от элементов таблицы, visibility: collapseбудет действовать как visibility: hidden. Это делает элемент невидимым, но он все равно будет занимать место в макете.

display: noneШкуры элемент полностью , поэтому она не занимает никакого места в макете, но она не должна быть использована на элементах таблицы.

Ссылка W3C

Пекка
источник
7
Это полезно, но цитата или объяснение утверждения, которое display: noneне следует использовать в элементах таблицы, было бы хорошим дополнением.
Марк Эмери
@MarkAmery Хорошая причина не использовать display: none;, потому что он разбивает таблицы с помощью colspanи rowspan.
Дай
34

visibility: collapseведет себя точно так же, как и visibility: hiddenв большинстве контекстов форматирования: пространство, необходимое для элемента, «зарезервировано» в макете, но сам элемент не отображается, оставляя пустое пространство там, где он был бы.

Я знаю три исключения: строки таблицы, столбцы таблицы и гибкие элементы, в которых visibility: collapseведет себя как display: none, но с одним существенным отличием: стойка. Вы можете думать о стойке как о заполнителе нулевого размера, который не требует никакого собственного пространства в процессе макета, но, тем не менее, все еще является частью структуры форматирования и участвует в некоторых вычислениях размера.

Например, свернутая строка таблицы не будет занимать какое-либо вертикальное пространство в таблице, но столбцы таблицы все равно будут иметь размеры, как если бы свернутая строка и ее содержимое были фактически видимы. Это сделано для того, чтобы столбцы не «раскачивались» при включении и выключении строк. Точно так же свернутый гибкий элемент не занимает места вдоль главной оси, но все же способствует поперечному размеру гибкой линии.

«Не использовать display: noneс таблицами» - ценное практическое правило, но оно не раскрывает всей картины.

  • Используйте, display: noneесли вы не хотите, чтобы ваши скрытые элементы каким-либо образом участвовали в процессе компоновки таблицы (или гибкой линии).
  • Использовать visibility: collapse если вы хотите динамически отображать и скрывать элементы, не дестабилизируя макет таблицы (или гибкой линии).

Вот фрагмент кода, демонстрирующий разницу между строкой таблицы display: noneи visibility: collapseдля нее:

Матье Ренда
источник
2
Только один, рассказывающий всю историю. @Mathieu Renda, вы должны отредактировать основной ответ, добавив все эти знания.
Áxel Costas Pena
visibility:collapseне работает для таблиц в Safari. Я обнаружил, display:noneчто работает нормально со строками таблицы (в том числе в Safari), хотя приведенные выше комментарии о ширине столбца верны
roadnottaken
19

visibility:collapseследует использовать только на таблицах. На других элементах он будет действовать как visibility:hidden.

visibility:hiddenскрыть элемент, но по-прежнему занимать пространство элемента display:none, даже не сохраняя пространство.


Ресурсы :

По той же теме:

Колин Хеберт
источник
3

visibility:collapseимеет display:noneповедение только для элементов таблицы. Для других элементов он должен отображаться как hidden.

знеак
источник
0

Вы также можете применить visibility: collapseк элементу в контейнере flexbox (гибкий элемент). Он будет действовать так же, как вы применяете его к элементу с помощью display: table-rowилиdisplay: table-column

Владынь
источник