В чем разница между visibility:collapse
и display:none
?
84
Укороченная версия:
Первый используется для полного скрытия элементов таблицы. Последний используется, чтобы полностью скрыть все остальное.
Длинная версия :
visibility: collapse
скрывает элемент полностью (чтобы он не занимал места в макете), но только тогда, когда элемент является элементом таблицы .
При использовании с элементами, отличными от элементов таблицы, visibility: collapse
будет действовать как visibility: hidden
. Это делает элемент невидимым, но он все равно будет занимать место в макете.
display: none
Шкуры элемент полностью , поэтому она не занимает никакого места в макете, но она не должна быть использована на элементах таблицы.
display: none
не следует использовать в элементах таблицы, было бы хорошим дополнением.display: none;
, потому что он разбивает таблицы с помощьюcolspan
иrowspan
.visibility: collapse
ведет себя точно так же, как иvisibility: hidden
в большинстве контекстов форматирования: пространство, необходимое для элемента, «зарезервировано» в макете, но сам элемент не отображается, оставляя пустое пространство там, где он был бы.Я знаю три исключения: строки таблицы, столбцы таблицы и гибкие элементы, в которых
visibility: collapse
ведет себя какdisplay: none
, но с одним существенным отличием: стойка. Вы можете думать о стойке как о заполнителе нулевого размера, который не требует никакого собственного пространства в процессе макета, но, тем не менее, все еще является частью структуры форматирования и участвует в некоторых вычислениях размера.Например, свернутая строка таблицы не будет занимать какое-либо вертикальное пространство в таблице, но столбцы таблицы все равно будут иметь размеры, как если бы свернутая строка и ее содержимое были фактически видимы. Это сделано для того, чтобы столбцы не «раскачивались» при включении и выключении строк. Точно так же свернутый гибкий элемент не занимает места вдоль главной оси, но все же способствует поперечному размеру гибкой линии.
«Не использовать
display: none
с таблицами» - ценное практическое правило, но оно не раскрывает всей картины.display: none
если вы не хотите, чтобы ваши скрытые элементы каким-либо образом участвовали в процессе компоновки таблицы (или гибкой линии).visibility: collapse
если вы хотите динамически отображать и скрывать элементы, не дестабилизируя макет таблицы (или гибкой линии).Вот фрагмент кода, демонстрирующий разницу между строкой таблицы
display: none
иvisibility: collapse
для нее:Показать фрагмент кода
.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>
источник
visibility:collapse
не работает для таблиц в Safari. Я обнаружил,display:none
что работает нормально со строками таблицы (в том числе в Safari), хотя приведенные выше комментарии о ширине столбца верныvisibility:collapse
следует использовать только на таблицах. На других элементах он будет действовать какvisibility:hidden
.visibility:hidden
скрыть элемент, но по-прежнему занимать пространство элементаdisplay:none
, даже не сохраняя пространство.Ресурсы :
По той же теме:
источник
visibility:collapse
имеетdisplay:none
поведение только для элементов таблицы. Для других элементов он должен отображаться какhidden
.источник
Вы также можете применить
visibility: collapse
к элементу в контейнере flexbox (гибкий элемент). Он будет действовать так же, как вы применяете его к элементу с помощьюdisplay: table-row
илиdisplay: table-column
источник