Клавиша / esc

Атрибут hidden

Скрывает элемент безо всякого CSS.

Время чтения: меньше 5 мин

Кратко

Скопировано

Железобетонный способ скрыть элемент в тех случаях, когда не подходят opacity или visibility. В отличие от двух других способов этот применяется прямо в HTML-разметке. Не лучшая практика: влиять на внешний вид страницы через разметку, но иногда именно это и нужно. По сути, это display: none — именно так он описан в браузерных стилях.

Пример

Скопировано
        
          
          <p hidden>  Этот текст будет невиден на странице. Хотя элемент в разметке будет!</p>
          <p hidden>
  Этот текст будет невиден на странице. Хотя элемент в разметке будет!
</p>

        
        
          
        
      

Как пишется

Скопировано

Поскольку атрибут hidden глобальный, его можно добавить к абсолютно любому тегу, чтобы скрыть его от глаз пользователя. Просто поставьте его после имени самого тега до закрывающей треугольной скобки. Собственно, как и все прочие атрибуты.

Этот атрибут булевый, у него может быть значение true — элемент спрятан, или false — элемент видим. Но обычно его пишут без значения, что приравнивается к true по умолчанию. Значения могут пригодиться, если вы будете менять их при помощи JavaScript.

Очень важно знать, что тег, спрятанный при помощи атрибута hidden становится невидим не только для пользователя, но и для скринридеров.

По причине того, что тег с этим атрибутом пропадает совсем как от пользователя, так и от скринридеров, стоит использовать этот приём аккуратно, понимая последствия.

Подсказки

Скопировано

💡 Как и с display: none, такое скрытие нельзя анимировать ☹️

💡 Атрибут пишется в одно слово, без значения, если вы хотите спрятать элемент.

💡 Элемент скрывается от глаз не только пользователя, но и вообще как будто не существует. Его не видят скринридеры, на него нельзя установить ссылку.

💡 Элемент с атрибутом hidden остаётся виден поисковым роботам и будет ими проиндексирован.

На практике

Скопировано

DrakesWeb советует

Скопировано

🛠 Работа атрибута hidden на примере показа рекламы пользователям без премиума.

Идея простая: если пользователь имеет статус премиум — прячем рекламный блок и блок с кнопкой «Стать премиумом» через hidden. Если не премиум — показываем их. Переключать состояние можно с помощью JavaScript, меняя булевый атрибут.

        
          
          <section class="controls" aria-label="Переключатель премиума">  <button id="become-premium" type="button">Стать премиум</button>  <button id="cancel-premium" type="button" hidden>Отменить премиум</button>  <p id="premium-msg" role="status" hidden>Вы премиум! Реклама скрыта.</p></section><aside id="ad" class="ad" aria-label="Рекламный блок">  Реклама: купите слона 🐘 — только сегодня скидка 50%!</aside><section class="content">  <p>Это основное содержимое. Когда включён премиум, реклама скрывается с помощью булевого атрибута <code>hidden</code>.</p></section>
          <section class="controls" aria-label="Переключатель премиума">
  <button id="become-premium" type="button">Стать премиум</button>
  <button id="cancel-premium" type="button" hidden>Отменить премиум</button>
  <p id="premium-msg" role="status" hidden>Вы премиум! Реклама скрыта.</p>
</section>

<aside id="ad" class="ad" aria-label="Рекламный блок">
  Реклама: купите слона 🐘 — только сегодня скидка 50%!
</aside>

<section class="content">
  <p>Это основное содержимое. Когда включён премиум, реклама скрывается с помощью булевого атрибута <code>hidden</code>.</p>
</section>

        
        
          
        
      
        
          
          let isPremium = falseconst ad = document.getElementById('ad')const upsell = document.getElementById('upsell')const premiumMsg = document.getElementById('premium-msg')const becomeBtn = document.getElementById('become-premium')const cancelBtn = document.getElementById('cancel-premium')function render() {  ad.hidden = isPremium  premiumMsg.hidden = !isPremium  // Кнопки: показываем нужную  becomeBtn.hidden = isPremium  cancelBtn.hidden = !isPremium}becomeBtn.addEventListener('click', () => { isPremium = true; render() })cancelBtn.addEventListener('click', () => { isPremium = false; render() })render()
          let isPremium = false
const ad = document.getElementById('ad')
const upsell = document.getElementById('upsell')
const premiumMsg = document.getElementById('premium-msg')
const becomeBtn = document.getElementById('become-premium')
const cancelBtn = document.getElementById('cancel-premium')

function render() {
  ad.hidden = isPremium
  premiumMsg.hidden = !isPremium
  // Кнопки: показываем нужную
  becomeBtn.hidden = isPremium
  cancelBtn.hidden = !isPremium
}
becomeBtn.addEventListener('click', () => { isPremium = true; render() })
cancelBtn.addEventListener('click', () => { isPremium = false; render() })
render()

        
        
          
        
      
Открыть демо в новой вкладке

Обратите внимание: hidden полностью убирает элемент из потока документа и из дерева доступности — скринридеры его не увидят.

На собеседовании

Скопировано
Задать вопрос в рубрику
🤚 Я знаю ответ

Матвей Романов  отвечает

Скопировано
  1. hidden — это HTML-атрибут, который предназначен для скрытия элемента на странице. Это означает, что элемент не будет отображаться в пользовательском интерфейсе и скроется от вспомогательных технологий, но он все ещё существует в DOM.
  2. aria-hidden="true" — это атрибут ARIA (Accessible Rich Internet Applications), который используется для указания, что элемент должен быть скрыт от вспомогательных технологий, таких как скринридеры. Это означает, что элемент не будет доступен для слушателей событий или считывания содержимого вспомогательными технологиями, но он все ещё виден в пользовательском интерфейсе.
  3. role="presentation" — это ARIA-атрибут, который указывает, что элемент является частью представления или дизайна и не имеет никакой роли в вспомогательных технологиях. Это означает, что роль элемента будет игнорироваться такими технологиями.
  4. role="none" — это синоним role="presentation", который тоже указывает, что элемент не имеет роли для вспомогательных технологий. Это означает, что роль элемента не будет доступна для слушателей событий или механизмов навигации вспомогательными технологиями.