CSS-свойства display: none
и visibility: hidden
могут быть использованы для скрытия элементов на странице. Однако, они работают по-разному и имеют свои особенности. В этой статье мы рассмотрим различия между этими свойствами и как использовать их правильно.
Display: none
Display: none скрывает элемент и удаляет его из потока документа. Это означает, что скрытый элемент не занимает место на странице и не влияет на остальные элементы. Браузер не загружает скрытый элемент и не обрабатывает его, что может ускорить загрузку страницы. Однако, скрытый элемент остается доступен для программного обращения к нему, например, с помощью JavaScript.
Например сделаем такую разметку:
<div class="blocks">
<div class="blocks__item block1">Блок 1</div>
<div class="blocks__item block2">Блок 2</div>
<div class="blocks__item block3">Блок 3</div>
</div>
Добавим немного стилей:
.blocks {
display: flex;
gap: 10px;
}
.blocks__item {
padding: 12px 24px;
background: green;
color: white;
}
И получаем такой результат:
Теперь для .block2
установим display: none
.block2 {
display: none;
}
Поскольку мы использовали display:none
на элемент .block2
, он не отображается в документе. Таким образом, его место на экране освобождается для других элементов.
Visibility: hidden
Свойство visibility: hidden
не удаляет элемент из потока документа. Это означает, что скрытый элемент занимает место на странице и влияет на остальные элементы. Если вы скрываете элемент с помощью visibility:hidden, то он все еще будет влиять на макет страницы и может влиять на расположение других элементов на странице. Это свойство может быть полезным, когда вы хотите временно скрыть элемент, но сохранить его размер и позицию.
Возьмем наш предыдущий пример и вместо display: none
для .block2
добавим visibility: hidden
:
.block2 {
visibility: hidden;
}
Блок 1
Блок 2
Блок 3
Как вы видите, блок скрылся но макет не изменился, оставив место под скрытый блок.
visibility: hidden против opacity: 0
Следующее, о чем вы можете спросить – какая разница между visibility: hidden
и opacity: 0
? Ведь между ними визуально нет никакой разницы.
.block2 {
opacity: 0;
}
Да, визуально разницы нет, но есть разница в поведении элементов.
Элементы с visibility: hidden
не являются интерактивными. Имеется в виду, что пользователи не могут взаимодействовать с такими элементами (например, кликать). Это потому, что такие элементы действительно невидимы.
А элементы с opacity: 0
интерактивны, так как они на самом деле видны, просто очень прозрачны. Свойство opacity
не определяет видимость элемента — оно определяет только прозрачность.
Подведем итоги
свойства display: none
, opacity: 0
и visibility: hidden
могут быть полезными для скрытия элементов на странице, но имеют свои особенности и нужно использовать их с умом. Выбор между этими свойствами зависит от конкретной ситуации и того, что вы хотите достичь.
display: none
отключает расположение элементов, чтобы они не отображались
visibility: hidden
скрывает элементы без изменения разметки
opacity: 0
делает элементы очень прозрачными, но пользователи могут взаимодействовать с ними.