Скрываемые элементы: display: none, visibility: hidden, opacity
Разница между display: none, visibility: hidden и opacity ️♂️
В CSS есть три популярных способа спрятать элемент, но каждый работает по-своему. Давай разберём их на атомы!
/* Примеры для сравнения */
.hide-display { display: none; } /* Исчезает полностью */
.hide-visibility { visibility: hidden; } /* Невидим, но место занимает */
.hide-opacity { opacity: 0; } /* Прозрачный, но кликабельный */
display: none — полное исчезновение ✨
Элемент полностью удаляется из потока документа. Браузер ведёт себя так, будто его никогда не существовало.
.ghost-button {
display: none; /* Пощёл — и нету! */
}
Что происходит:
- Элемент не отображается.
- Не занимает место в макете.
- Не реагирует на события (клики, ховеры).
- Анимации и переходы не работают.
💡 Идеально для динамического скрытия/показа через JS без сохранения пространства.
visibility: hidden — невидимый, но важный 👻
Элемент становится невидимым, но продолжает влиять на вёрстку, как призрак.
.invisible-man {
visibility: hidden; /* Спрятался, но тень осталась */
}
Особенности:
- Место в документе сохраняется.
- Содержимое недоступно для взаимодействия.
- Можно анимировать свойство
visibility(появляется/исчезает плавно).
🔥 Профессиональный лайфхак: комбинируй с
opacityдля плавных переходов!
.fade-in {
visibility: hidden;
opacity: 0;
transition: opacity 0.3s, visibility 0.3s;
}
.fade-in.active {
visibility: visible;
opacity: 1;
}
opacity: 0 — элемент-призрак 👀
Элемент становится полностью прозрачным, но остаётся полноценным участником документа.
.ghost-element {
opacity: 0; /* Ничего не видно, но он здесь! */
}
Ключевые моменты:
- Занимает место в макете.
- Остаётся кликабельным и интерактивным.
- Идеально для анимаций появления/исчезновения.
- Можно использовать с
pointer-events: noneдля отключения взаимодействия.
Сравнительная таблица
| Свойство | Место в потоке | Интерактивность | Анимация | DOM-присутствие |
|---|---|---|---|---|
display: none |
❌ Нет | ❌ Нет | ❌ Нет | ❌ Нет |
visibility: hidden |
✅ Да | ❌ Нет | ✅ Да | ✅ Да |
opacity: 0 |
✅ Да | ✅ Да | ✅ Да | ✅ Да |
Когда что использовать?
Выбираем display: none когда:
- Нужно полностью убрать элемент из потока (модальные окна, табы).
- Требуется максимальная производительность (скрытие сложных компонентов).
Выбираем visibility: hidden когда:
- Важно сохранить макет (например, скрытые колонки таблицы).
- Нужен плавный переход без "прыжков" вёрстки.
Выбираем opacity: 0 когда:
- Элемент должен оставаться интерактивным (кастомные чекбоксы).
- Нужны сложные анимации (постепенное исчезновение).
Практический пример: меню-аккордеон 🎹
<div class="accordion">
<button class="accordion-btn">Раздел 1</button>
<div class="accordion-content">
<p>Скрытый контент, который появится при клике</p>
</div>
</div>
.accordion-content {
max-height: 0;
opacity: 0;
visibility: hidden;
overflow: hidden;
transition: all 0.3s ease;
}
.accordion-content.active {
max-height: 500px;
opacity: 1;
visibility: visible;
}
Почему так круто?
Комбинация свойств даёт плавную анимацию высоты и прозрачности без "дёрганий" вёрстки!
Частые ошибки и как их избежать 🚧
-
Использование
display: noneдля анимаций
Не работает — элемент мгновенно исчезает. Вместо этого стартуй сopacity: 0. -
Забыть про
visibilityпри анимациях
Без него прозрачный элемент (opacity: 0) остаётся кликабельным! -
Ненужные рефловы при toggle
display
Частое переключениеdisplay: none↔blockвызывает пересчёт макета — это дорого для производительности.
Попробуй применить эти знания в своём следующем проекте — результат тебя удивит! 🔥