Существует несколько способов скрыть элемент в CSS:
/* Основные способы */
.hidden-display { display: none; }
.hidden-visibility { visibility: hidden; }
.hidden-opacity { opacity: 0; }
.hidden-position { position: absolute; left: -9999px; }Скрытие элементов — это как фокусы в цирке: можно сделать так, что элемент исчезнет полностью, станет невидимым или просто переместится за кулисы! 🎪
| Метод | Занимает место | Доступен для скринридеров | События | Анимируется |
|---|---|---|---|---|
display: none | ❌ | ❌ | ❌ | ❌ |
visibility: hidden | ✅ | ❌ | ❌ | ✅ |
opacity: 0 | ✅ | ✅ | ✅ | ✅ |
position: absolute | ❌ | ✅ | ✅ | ✅ |
Элемент полностью исчезает из документа:
.element {
display: none; /* Элемент не существует в потоке */
}
/* Показать обратно */
.element.visible {
display: block; /* или flex, inline и т.д. */
}<div class="box">Видимый блок</div>
<div class="box hidden-display">Скрытый блок</div>
<div class="box">Следующий блок поднимется вверх</div>.element {
visibility: hidden; /* Невидим, но место занимает */
}
.element:hover {
visibility: visible; /* Показать при наведении */
}.element {
opacity: 0; /* Полностью прозрачный */
transition: opacity 0.3s ease; /* Плавное появление */
}
.element:hover {
opacity: 1; /* Появляется при наведении */
}.sr-only {
position: absolute;
left: -10000px;
width: 1px;
height: 1px;
overflow: hidden;
}
/* Для доступности */
.visually-hidden {
position: absolute !important;
width: 1px !important;
height: 1px !important;
padding: 0 !important;
margin: -1px !important;
overflow: hidden !important;
clip: rect(0, 0, 0, 0) !important;
white-space: nowrap !important;
border: 0 !important;
}.element {
clip-path: inset(50%); /* Обрезает элемент */
}
.element {
clip-path: circle(0%); /* Круглая обрезка до нуля */
}.element {
transform: scale(0); /* Уменьшает до нуля */
transform: translateX(-100vw); /* Выносит за экран */
transform: rotateY(90deg); /* Поворачивает ребром */
}.element {
width: 0;
height: 0;
overflow: hidden; /* Скрывает содержимое */
}
.element {
max-height: 0;
overflow: hidden;
transition: max-height 0.3s ease;
}
.element.expanded {
max-height: 200px; /* Плавное раскрытие */
}.modal {
position: fixed;
top: 0;
left: 0;
width: 100%;
height: 100%;
background: rgba(0, 0, 0, 0.5);
opacity: 0;
visibility: hidden;
transition: all 0.3s ease;
}
.modal.active {
opacity: 1;
visibility: visible;
}.dropdown {
position: relative;
}
.dropdown-menu {
position: absolute;
top: 100%;
left: 0;
background: white;
box-shadow: 0 2px 10px rgba(0, 0, 0, 0.1);
transform: translateY(-10px);
opacity: 0;
visibility: hidden;
transition: all 0.2s ease;
}
.dropdown:hover .dropdown-menu {
transform: translateY(0);
opacity: 1;
visibility: visible;
}.accordion-content {
max-height: 0;
overflow: hidden;
transition: max-height 0.3s ease-out;
}
.accordion.active .accordion-content {
max-height: 500px; /* Достаточно для контента */
}/* Скрыть от всех, включая скринридеры */
.hidden {
display: none;
}
/* Скрыть визуально, но оставить для скринридеров */
.sr-only {
position: absolute;
width: 1px;
height: 1px;
padding: 0;
margin: -1px;
overflow: hidden;
clip: rect(0, 0, 0, 0);
white-space: nowrap;
border: 0;
}<div aria-hidden="true">Скрыто от скринридеров</div>
<div hidden>Скрыто полностью (HTML5)</div>opacity и transform 🎬visually-hidden класс 👁️display: none для больших блоков ⚡visibility: hidden 🖱️❌ Неправильно:
.element {
opacity: 0;
/* События всё ещё работают! */
}✅ Правильно:
.element {
opacity: 0;
pointer-events: none; /* Отключаем события */
}Выбор метода скрытия зависит от задачи:
display: noneopacity + transformvisibility: hiddenПомните: каждый метод имеет свои особенности влияния на layout, доступность и производительность! 🎯