Содержание статьи

Ссылки в HTML по умолчанию интерактивны: они реагируют на наведение, клики и обрабатываются браузерами как навигационные элементы. Однако в некоторых случаях требуется сохранить визуальное оформление ссылки, но убрать её функциональность. Например, при временном отключении навигации, в макетах для демонстрации дизайна или при интеграции с JavaScript-логикой, где клик должен обрабатываться иначе.
Основные способы отключения кликабельности включают использование атрибутов pointer-events: none в CSS, href=»#» с preventDefault() в JavaScript или замену тега <a> на <span> с аналогичным стилем. Каждый метод имеет нюансы: pointer-events блокирует все взаимодействия, включая наведение, а preventDefault() требует дополнительного кода для обработки событий.
Для статичных страниц оптимально использовать CSS-решение: добавьте к ссылке класс .disabled-link и примените стиль pointer-events: none; cursor: default;. Если ссылка должна оставаться в DOM для семантики, но не выполнять переход, замените href на href=»javascript:void(0)» и добавьте обработчик события onclick=»return false». В динамических проектах с React или Vue используйте условную отрисовку или пропсы для управления состоянием.
Когда нужно убрать действие ссылки без удаления HTML-кода
Временное отключение ссылок требуется при A/B-тестировании страниц, где часть пользователей должна видеть активные ссылки, а другая – нет. Например, при проверке влияния кнопки «Купить» на конверсию: если ссылка ведет на страницу с ошибкой 500, её кликабельность блокируют через pointer-events: none в CSS или атрибут aria-disabled="true", сохраняя HTML-структуру для аналитики. Это позволяет быстро восстановить функционал после исправления багов без правок в шаблоне.
Ссылки отключают при динамическом контенте, где часть элементов генерируется автоматически, но не всегда должна быть активной. Например, в личном кабинете интернет-магазина ссылка «Оформить возврат» появляется только после подтверждения заказа – до этого её делают некликабельной через JavaScript: document.querySelector('a.return').addEventListener('click', e => e.preventDefault()). Такой подход экономит ресурсы на перерисовку DOM и упрощает поддержку кода.
Блокировка ссылок необходима для соответствия требованиям безопасности или законодательства. В медицинских сервисах ссылки на диагнозы или лекарства могут быть деактивированы для незарегистрированных пользователей через tabindex="-1" и onclick="return false", чтобы избежать некорректного информирования. Это сохраняет семантику HTML для SEO и скринридеров, но предотвращает несанкционированный доступ к конфиденциальным данным.
Способы отключения ссылки с помощью атрибута HTML
Атрибут disabled для тега <a> не работает напрямую, но есть проверенные методы блокировки кликабельности. Первый – использование атрибута aria-disabled="true" в сочетании с CSS-свойством pointer-events: none. Пример:
<a href="example.com" aria-disabled="true" style="pointer-events: none; color: #999;">Ссылка</a>
Этот способ сохраняет семантику ссылки для скринридеров, но визуально и функционально отключает её. Для полной деактивации также применяют JavaScript-обработчик event.preventDefault() на событие click, но это требует дополнительного кода.
Второй метод – замена тега <a> на <span> с атрибутом role="link" и стилизацией под ссылку. Пример:
- Удалите
hrefи добавьтеrole="link". - Стилизуйте через CSS:
span[role="link"] { color: blue; text-decoration: underline; cursor: pointer; }. - Для скринридеров добавьте
tabindex="0", чтобы элемент оставался доступным с клавиатуры.
Использование CSS для блокировки нажатия на ссылку
Самый простой способ отключить кликабельность ссылки – применить свойство pointer-events: none. Этот метод работает во всех современных браузерах (Chrome 2+, Firefox 3.6+, Safari 4+, Edge 12+) и полностью блокирует взаимодействие с элементом, включая наведение курсора, клики и события JavaScript. Достаточно добавить стиль к селектору ссылки: a.disabled { pointer-events: none; }. Однако учтите, что ссылка останется в фокусе при навигации с клавиатуры, что может нарушить доступность.
Для более гибкого решения используйте комбинацию cursor: default и text-decoration: none. Это визуально убирает подчеркивание и меняет курсор на стандартный, но не блокирует события полностью. Чтобы предотвратить переход по ссылке, добавьте обработчик onclick с возвратом false: <a href="#" onclick="return false;">Текст</a>. Такой подход сохраняет семантику ссылки, но требует дополнительного JavaScript для полной блокировки.
Если нужно отключить только визуальную активность, но оставить возможность копирования текста, используйте user-select: none вместе с color: inherit. Это предотвратит выделение ссылки как отдельного элемента, но не помешает взаимодействию. Для полного контроля над поведением рекомендуется комбинировать CSS с атрибутом aria-disabled=»true», чтобы улучшить доступность для скринридеров.
Как сделать ссылку неактивной через JavaScript

Самый простой способ деактивировать ссылку – удалить её атрибут href. Метод removeAttribute() убирает значение целиком, а setAttribute() с пустым значением оставляет атрибут в DOM, но делает его нерабочим. Пример:
document.querySelector(‘a’).removeAttribute(‘href’);
Этот подход сохраняет визуальное оформление ссылки, но лишает её функциональности. Браузеры перестают подсвечивать элемент как кликабельный, а курсор не меняется на указатель.
Если нужно временно заблокировать переход, но сохранить возможность восстановить ссылку позже, используйте свойство pointer-events через style. Добавьте pointer-events: none; к элементу – клики будут игнорироваться, но атрибут href останется нетронутым. Восстановить активность можно удалением этого стиля.
Для динамического управления состоянием ссылок подходит метод preventDefault() в обработчике события click. Пример:
document.querySelector(‘a’).addEventListener(‘click’, function(e) { e.preventDefault(); });
Этот способ полезен, когда нужно блокировать переход по условию, например, при валидации формы. Ссылка остаётся кликабельной визуально, но переход не происходит.
В сложных интерфейсах удобно использовать кастомные атрибуты, например data-disabled. Проверяйте его значение перед выполнением действия:
if (link.getAttribute(‘data-disabled’) === ‘true’) return;
Такой подход позволяет централизованно управлять состоянием ссылок через JavaScript, не затрагивая DOM напрямую.
Отключение клика на ссылке в WordPress и других CMS

В WordPress отключить кликабельность ссылки можно через HTML-редактор, добавив атрибут onclick="return false;" или заменив тег <a> на <span> с аналогичным оформлением. Альтернативный способ – использовать плагин «Disable Link» или «Link Manager», которые позволяют управлять поведением ссылок через интерфейс админки. Для кастомных тем добавьте в файл functions.php фильтр:
add_filter('the_content', function($content) {
return preg_replace('/<a\s([^>]*?)href="([^"]*?)"([^>]*?)>/i', '<span $1$3>', $content);
});
Для других CMS методы отличаются. В Joomla используйте расширение «NoNumber Link Disabler» или вручную редактируйте шаблон, добавляя класс .disabled-link с CSS-правилом pointer-events: none;. В Drupal отключите ссылки через модуль «Link Attributes» или переопределите тему, добавив в hook_preprocess_node() проверку на атрибут data-disabled="true". Сравнение подходов:
| CMS | Способ | Трудоёмкость | Гибкость |
|---|---|---|---|
| WordPress | Плагин / фильтр в functions.php |
Низкая | Высокая |
| Joomla | Расширение / CSS | Средняя | Средняя |
| Drupal | Модуль / переопределение темы | Высокая | Максимальная |
Проблемы с отображением некликабельных ссылок в разных браузерах

Chrome и Edge игнорируют атрибут pointer-events: none для ссылок с пустым href или href="#", если не добавлен tabindex="-1". Firefox и Safari обрабатывают такие случаи корректно, но в Safari 15+ возникает баг: ссылка остаётся кликабельной при наведении, если её стили переопределены через !important. Решение – комбинировать pointer-events: none с user-select: none и cursor: default, чтобы унифицировать поведение.
В старых версиях Opera (до перехода на Chromium) некликабельные ссылки с href="javascript:void(0)" сохраняют подчеркивание и цвет по умолчанию, даже если применён text-decoration: none. Проблема решается принудительным сбросом стилей через a[href="javascript:void(0)"] { color: inherit; text-decoration: none !important; }. Для IE11 требуется отдельный костыль: a.disabled { pointer-events: none; } в сочетании с классом .disabled, так как IE не поддерживает pointer-events для ссылок.
Brave и Vivaldi, основанные на Chromium, наследуют большинство багов Chrome, но добавляют свои: в режиме «Защита от отслеживания» ссылки с pointer-events: none могут неожиданно становиться кликабельными, если они находятся внутри элементов с position: relative. Обходной путь – оборачивать ссылку в с теми же стилями или использовать aria-disabled="true" для явного указания состояния.
Мобильные браузеры на Android (Chrome, Firefox, Samsung Internet) обрабатывают некликабельные ссылки нестабильно: при долгом нажатии контекстное меню всё равно появляется, даже если ссылка заблокирована через CSS. Единственный надёжный метод – удалять href и заменять тег на с аналогичными стилями. Для iOS Safari проблема усугубляется тем, что pointer-events: none не отключает жесты «свайп назад», если ссылка находится в начале страницы.
При тестировании некликабельных ссылок в браузерах используйте инструменты разработчика для проверки computed styles: убедитесь, что pointer-events не переопределён родительскими элементами, а cursor действительно равен default. Для кроссбраузерной стабильности комбинируйте CSS-решения с JavaScript: document.querySelectorAll('a.disabled').forEach(link => link.addEventListener('click', e => e.preventDefault())). Это гарантирует блокировку кликов даже в браузерах с частичной поддержкой CSS-свойств.
Как сохранить стиль ссылки, но убрать её функциональность
Чтобы ссылка выглядела как активная, но не выполняла переход, замените тег <a> на <span> с идентичными CSS-свойствами. Скопируйте стили из существующей ссылки: color: inherit; text-decoration: underline; cursor: pointer;. Добавьте pointer-events: none;, если нужно заблокировать hover-эффекты. Альтернатива – оставить <a>, но удалить атрибут href и добавить role="link" aria-disabled="true" для доступности.
- Для динамических ссылок используйте JavaScript:
event.preventDefault();в обработчикеclick. - В React применяйте
onClick={(e) => e.preventDefault()}или заменяйте<a>на<Link as="span">(Next.js). - В CSS-классах проверьте наличие псевдоклассов
:hover,:active– их нужно продублировать для<span>.
Проверка работоспособности отключённой ссылки после изменений

После применения CSS-свойства pointer-events: none или атрибута onclick="return false;" откройте инструменты разработчика в браузере (F12 или Ctrl+Shift+I) и перейдите на вкладку Elements. Найдите изменённую ссылку в DOM-дереве и убедитесь, что стили или атрибуты применены корректно. Проверьте, отображается ли pointer-events: none в разделе Styles или присутствует ли onclick="return false;" в HTML-коде. Если свойство не отображается, очистите кэш браузера (Ctrl+F5) и повторите проверку.
Протестируйте ссылку в разных браузерах: Chrome, Firefox, Edge и Safari. В Firefox используйте комбинацию Shift+F2 для открытия консоли и введите inspect($0), предварительно выделив ссылку, чтобы проверить её состояние. В Safari включите режим разработчика (Настройки → Дополнения → Показывать меню «Разработка») и используйте Inspect Element. Если ссылка остаётся кликабельной в каком-либо браузере, добавьте резервное решение: cursor: default и text-decoration: none для визуального подтверждения отключения.
