Encodera

Спасибо, что читаете!

Пожертвуйте сайту, мы стараемся ради вас.

Как сделать элемент некликабельным

Короткий ответ

pointer-events: none делает элемент «прозрачным» для мыши: щелчки проходят сквозь него к тому, что ниже:

<style>
  .box { position: relative; width: 220px; }
  .label { position: absolute; inset: 0; display: grid; place-items: center; background: rgb(255 255 255 / 0.6); pointer-events: none; }
</style>
 
<div class="box">
  <button onclick="this.textContent = 'Clicked!'">Click through the layer</button>
  <div class="label">A layer on top</div>
</div>

Так поступают с декоративными слоями, подписями и иконками поверх кнопок и полей.

Заблокировать целую область

Атрибут inert отключает блок целиком: по нему нельзя щёлкнуть, внутрь нельзя попасть клавишей Tab, а скринридер его пропускает:

<div inert style="opacity: 0.5;">
  <button>Not available</button>
  <a href="#">Neither is this link</a>
</div>
<button>Available</button>

Это удобно для части формы, которая ещё недоступна, или для страницы под открытым окном.

Кнопки и поля

Для одной кнопки или поля есть атрибут disabled — он ещё и сообщает браузеру и скринридеру, что элемент неактивен.

Частая ошибка

Кнопку или ссылку «отключают» свойством pointer-events: none. Мышью нажать нельзя, но с клавиатуры элемент по-прежнему получает фокус и срабатывает по Enter. Для элементов управления используйте disabled или inert, а pointer-events оставьте для оформления.

Функции из этого ответа

  • pointer-events — Реагирует ли элемент на щелчки и касания или пропускает их к тому, что под ним.
  • inert — Делает часть страницы неактивной: по ней нельзя кликнуть, перейти клавишей Tab или выделить текст.
  • disabled — Отключает элемент формы: с ним нельзя взаимодействовать, и его значение не отправляется.
  • cursor — Вид указателя мыши над элементом.

Спасибо, что читаете!

Пожертвуйте сайту, мы стараемся ради вас.