В чем разница между visibility:collapse
и display:none
?
Разница между "видимостью: коллапсом" и "отображением: нет"
Ответ 1
Краткая версия:
Первый используется для полного скрытия элементов таблицы. Последний используется, чтобы полностью скрыть все остальное.
Длинная версия:
visibility: collapse
полностью скрывает элемент (так что он не занимает какое-либо место в макете), но только когда элемент является элементом таблицы.
Если используется для элементов, отличных от элементов таблицы, visibility: collapse
будет действовать как visibility: hidden
. Это делает элемент невидимым, но он все равно будет занимать место в макете.
display: none
полностью скрывает элемент, поэтому он не занимает какое-либо место в макете, но его нельзя использовать в элементах таблицы.
Ответ 2
visibility:collapse
следует использовать только в таблицах. На других элементах он будет действовать как visibility:hidden
.
visibility:hidden
скрыть элемент, но все же взять пробел элемента, тогда как display:none
даже не сохранит пространство.
Ресурсы:
В той же теме:
Ответ 3
visibility: collapse
ведет себя точно так же, как visibility: hidden
в большинстве контекстов форматирования: пространство, требуемое элементом, является "зарезервировано" в макете, но сам элемент не отображается, оставляя пустое место там, где оно было бы.
Есть три исключения, о которых я знаю: table-rows, table-columns и flex items, в которых visibility: collapse
ведет себя как display: none
, но с одним существенным отличием: "strut". Вы можете думать о расположении как нулевой размер заполнителя, который не претендует на какое-либо свое место в процессе компоновки, но тем не менее все еще является частью структуры форматирования и участвует в вычислениях определенного размера.
Свернутая таблица-строка, например, не займет ни одного вертикального пространства в таблице, но столбцы таблицы по-прежнему будут иметь размер "как-если" свернутая строка, и ее содержимое было фактически видимым. Это делается для того, чтобы предотвратить "колебание" столбцов, когда строки переключаются и выходят. Аналогично, свернутый элемент гибкости не занимает никакого пространства вдоль основной оси, но все же вносит вклад в кросс-размер гибкой линии.
"Не использовать 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>
Ответ 4
visibility:collapse
имеет поведение display:none
только для элементов таблицы. На других элементах он должен отображаться как hidden
.