В чем разница между 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.