Скрытие и показ элементов в JavaScript
Уведомление, меню или блок с настройками иногда нужно временно скрыть, а затем снова показать. Для этого используют CSS-класс или атрибут hidden.
Скрытие - не удаление
Скрытый элемент остаётся в DOM: его можно найти через JavaScript, изменить и снова показать. Удалённого элемента в DOM уже нет.
В обычном случае и CSS-правило с display: none, и атрибут hidden убирают элемент из раскладки страницы. Соседние элементы займут освободившееся место.
Скрытие через CSS-класс
Класс сам по себе не скрывает элемент. Он обозначает состояние, а CSS определяет, как это состояние выглядит.
<p class="notice">Настройки сохранены</p>
.notice.is-hidden {
display: none;
}
const notice = document.querySelector('.notice');
notice.classList.add('is-hidden'); // скрыть
notice.classList.remove('is-hidden'); // показать
JavaScript меняет состояние элемента, а CSS решает, как оно будет выглядеть. CSS-класс не обязан использовать display: none: он может менять несколько свойств одновременно.
В этом простом варианте элемент скроется сразу: при обычной смене display плавный переход не запустится. Для плавного визуального эффекта класс чаще меняет opacity или transform, а transition задают в CSS. При opacity: 0 элемент остаётся в раскладке и может получать события, поэтому это не полная замена display: none.
Атрибут hidden
hidden подходит для простого состояния: элемент сейчас нужно показывать или нет.
<p class="notice" hidden>Настройки сохранены</p>
const notice = document.querySelector('.notice');
notice.hidden = false; // показать
notice.hidden = true; // скрыть
Свойство hidden связано с одноимённым HTML-атрибутом. При значении true атрибут добавляется, а при false - удаляется.
hidden=“false”всё равно скрывает элемент: значениеfalseне означает отсутствие атрибута. Чтобы показать элемент, удалите атрибут или задайтеelement.hidden = false.
Что выбрать
- Используйте
hidden, когда элемент нужно просто временно показать или скрыть. - Используйте CSS-класс, когда состояние должно менять несколько CSS-свойств, иметь свой вид или плавный переход.
- Удаляйте элемент из DOM, только если он больше не нужен на странице.
Итого
И CSS-класс, и hidden скрывают элемент без удаления из DOM. hidden подходит для простого состояния, а класс даёт CSS больше возможностей для оформления и переходов.