- Как отключить ссылку, используя только CSS?
- 18 ответов
- Отключенная ссылка Bootstrap
- Кнопка отключения Bootstrap, но она выглядит как ссылка
- Отключить ссылку с точным href: =
- Отключите ссылку, содержащую фрагмент пути: *=
- Отключите ссылку, которая начинается с: ^=
- Отключить ссылку, которая заканчивается на: $=
- Или любой другой атрибут
- Объединение селекторов атрибутов
- Поддержка браузера
- Как запретить переход по ссылке через css и js
- Как сделать блокировку ссылок
- Просто не делайте этого
- Надежный способ: удалите href
Как отключить ссылку, используя только CSS?
Есть ли способ отключить ссылку с помощью CSS? У меня есть класс под названием current-page и хочу, чтобы ссылки с этим классом были отключены, чтобы при нажатии на них не выполнялось никаких действий.
после долгих поисков я получил идеальный ответ на этот вопрос css-tricks.com/pointer-events-current-nav
Должна ли ссылка использоваться или нет, имеет более семантическую, чем презентационная ценность. Его следует отключать не через CSS, а через использование hidden атрибута, применимого к любому элементу HTML. Затем можно использовать CSS, чтобы выбрать, например, a[hidden] якорь и соответствующим образом оформить его.
@amn, но я не думаю, что браузеры будут отображать элемент со скрытым атрибутом так стайлинг становится спорным.
@ user1794469 Они будут, если вы проинструктируете их, с помощью CSS, использовать display: block , например, или какое-либо другое значение для display . Но hidden не всегда применим — он относится к элементам, которые не имеют значения , и из вопроса неясно, почему ссылка должна быть отключена. Это, вероятно, случай проблемы XY.
18 ответов
Ответ уже в комментариях к вопросу. Для большей видимости я копирую это решение здесь:
Для поддержки браузера см. http://caniuse.com/#search=pointer-events *, если вам нужно поддерживать IE, есть обходной путь, см. этот ответ.
Предупреждение. Использование pointer-events в CSS для элементов, отличных от SVG, является экспериментальным. Эта функция была частью спецификации CSS-интерфейса CSS3, но из-за многих открытых проблем была отложена до CSS4. *
Вы всегда можете использовать polyfill для поддержки IE, мне часто нужны события указателя: не часто.
Если бы вы немного его стилизовали, чтобы пользователь мог видеть, что он отключен. Дайте ему некоторую непрозрачность: .2
Теперь это работает во всех современных браузерах, включая IE 11. Если вам нужна поддержка IE 10 и ниже, вы можете использовать JavaScript, такой как этот .
Важное примечание: при этом отключается только нажатие, а не сама ссылка. Вы все еще можете использовать Tab + Enter, чтобы «нажать» ссылку.
Использование pointer-events: none; не идеален Он также отключает другие события, такие как наведение, которое требуется для отображения title=»…» или всплывающих подсказок. Я обнаружил, что решение JS лучше (с использованием event.preventDefault(); ) вместе с некоторыми CSS ( cursor: default; opacity: 0.4; ) и всплывающей подсказкой, объясняющей, почему ссылка отключена.
Также стоит изменить цвет текста и подчеркнуть его, чтобы он больше не выглядел как ссылка: color:#000; text-decoration: none;
По крайней мере, в Chrome свойство «курсор» не имеет смысла при использовании «указатель-события: нет». AFAIK, это просто игнорируется. Попробуйте, например, установить «указатель-события: нет; курсор: не разрешен;», и курсор будет оставаться по умолчанию все время.
Любой способ изменить курсор, если я использую pointer-events: none; , Я пытаюсь использовать cursor: not-allowed; но это не работает.
Кроме того, это не предотвращает пузыри, поэтому, если у вас есть элемент под ним, он все еще срабатывает
Это именно то, что я искал: pointer-events: none; Это был отсутствующий мир в моей загадке. Большое спасибо.
CSS можно использовать только для изменения стиля чего-либо. Лучшее, что вы могли бы сделать с помощью чистого CSS, — это полностью скрыть ссылку.
Вам действительно нужен javascript. Вот как вы будете делать то, что хотите, используя библиотеку jQuery.
$('a.current-page').click(function() < return false; >);
Не забывайте предотвращать поведение по умолчанию: function(ev)< ev.preventDefault(); ev.stopPropagation(); return false; ,
Также эта версия может использоваться для отключения щелчков при сохранении других событий указателя, таких как: hover или: focus! Топ ответ!
Хотя это работает во всех браузерах, отключено только нажатие на ссылку. Имейте в виду, что многие пользователи открывают ссылки из контекстного меню или с помощью средней кнопки мыши.
хорошая, но остерегайтесь поддержки браузера событий указателя (например, Для стиля попробуйте изменить pointer-events:none; на pointer-events:unset; , Затем курсор можно изменить на cursor:not-allowed; , Это дает лучшее представление о том, что происходит с пользователем. Кажется, работает в FF, Edge, Chrome, Opera и Brave с сегодняшнего дня. @Sablefoste Это не работает для меня в Chrome 60. Курсор действительно not-allowed , но ссылка остается активной. CSS не может этого сделать. CSS предназначен только для презентации. Ваши варианты: Вы можете установить атрибут href на javascript:void(0) @nickf true, однако, это изящное решение, и оно лучше, чем полагаться на плохой стиль IE по умолчанию, если он отключен. Я думаю, что это может быть немного сложнее, чем это. Вот решение snook.ca/archives/javascript/clear_links_to_1 Если вы хотите придерживаться только HTML/CSS в форме, другой вариант — использовать кнопку. Стиль его и установите атрибут disabled . Только так, как вы могли бы сделать это без CSS, было бы установить CSS на обертке div, который заставил бы вас исчезнуть и что-то еще заняло бы место. Чтобы фактически отключить A, вам нужно будет заменить его событие click или href, как описано другими. PS: Просто уточнить, я бы счел это довольно неопрятным решением, а для SEO это тоже не самое лучшее, но я считаю, что это лучше всего с чисто CSS. Свойство указатель-события позволяет контролировать, как элементы HTML реагировать на события мыши/касания — включая наведение/активные состояния CSS, нажмите/коснитесь событий в Javascript, и будет ли курсор видны. Этот не единственный способ, которым вы отключили ссылку, но хороший способ CSS, который работает в IE10 + и всех новых браузерах: Я искал через Интернет и нашел не лучше this. В основном, чтобы отключить функциональность нажатия кнопок, просто добавьте стиль CSS, используя jQuery, например: Затем, чтобы снова включить его, выполните Проверено на Firefox и IE 11, это сработало. Если вы хотите, чтобы это был только CSS, логика отключения должна определяться CSS. Чтобы переместить логику в определениях CSS, вам придется использовать селектора атрибутов. Вот несколько примеров: Вы можете отключить ссылки, которые содержат определенное значение href, например: Здесь любая ссылка, содержащая /keyword/ в пути, будет отключена Оператор [attribute^=value] нацелен на атрибут, начинающийся с определенного значения. Позволяет отбрасывать веб-сайты и корневые пути. Вы можете даже использовать его для отключения ссылок, отличных от https. Например: Оператор [attribute$=value] нацелен на атрибут, который заканчивается определенным значением. Может быть полезно отменить расширения файлов. Css может настраивать любой атрибут html. Может быть rel , target , data-custom и так далее. Вы можете связать несколько правил. Скажем, что вы хотите отключить любую внешнюю ссылку, но не те, которые указывают на ваш сайт: Или отключить ссылки на pdf файлы определенного веб-сайта: Селектора атрибутов поддерживаются с IE7. :not() селектор с IE9. Благодаря всем, кто разместил решения, я объединил несколько подходов для обеспечения более продвинутых функциональных возможностей disabled . Вот суть, и код ниже. Время от времени необходимо запретить пользователю переход по ссылке. Чаще всего я использую этот метод, если например, на какую-то ссылку назначен красивый стиль, а переделывать ее в другой тег желания нет. Также бывает необходимо, чтобы при нажатии на ссылке срабатывал скрипт. В этом случае можно в href поставить #, но тогда при клике на ссылку страница проматывается вверх. Запретить переход по ссылке можно с помощью css свойства или js скрипта. css примеры блокировки переходы по ссылке. Для этого используется свойство pointer-events: none, которое запрещает события указателя мыши для элементов с псевдоклассами active, click, hover. Особенность этого свойства в том, что если на эту ссылку назначено выполнение скрипта onclick, то он тоже не выполнится (пример, 2). Для более универсального использования, можно задать класс и назначить ему это свойства, а затем в той ссылке, где нужно ограничить переход просто ставить этот класс. Запретить переход по ссылке через Java Script Здесь имеется множество вариантов. Все они кроссбраузерные. Бонус на заметку Кстати, за счет pointer-events вы можете немного защитить картинку от копирования. Чаще всего пользователи нажимают правой кнопкой мыши по картинке и выбирают «Сохранить изображение». Но если сделать так: То при нажатии правой кнопкой мыши на картинку из контекстного меню исчезнут пункты «Открыть картинку в новой вкладке» и «Сохранить картинку». Согласитесь, это очень простой способ легкой защиты картинок от копирования без скриптов. Конечно, от всех он не защитит, но большая часть обычных пользователей не сможет копировать картинки вашего сайта. От автора: недавно на работе была поднята тема того, как делается блокировка ссылок. В прошлом году каким-то образом к стилям наших шрифтов был добавлен якорь disabled, пока я этого не видел. Есть проблема: в HTML нет реального способа заблокировать тег a (с валидным атрибутом href). А зачем вообще это делать? Ссылки лежат в основе веба. В какой-то момент я понял, что моим коллегам это не понравится, поэтому я начал думать, как реализовать блокировку ссылок. Понимая, что это потребует много времени, я хотел доказать, что затея не стоит тех усилий и кода, который придется поддерживать. Но я боялся, что если покажу, что это все-таки сделать можно, они проигнорируют все мои предупреждения и просто используют мой пример как доказательство того, что все в порядке. Меня это не потрясло, но я подумал, что вам может пригодиться мое исследование. Заблокированная ссылка уже не ссылка, это текст. Вам нужно пересмотреть дизайн, если в нем есть заблокированные ссылки. В BootStrap есть примеры применения класса .disabled к якорям, я их ненавижу. По крайней мере, они сказали, что этот класс всего лишь добавляет стиль disabled. Формулировка вводит в заблуждение. Чтобы реально отключить ссылку, недостаточно просто придать ей вид отключенной ссылки. Онлайн курс по JavaScript Научитесь создавать приложения со сложными интерфейсами Это основной язык для современной веб-разработки — почти 100% сайтов работает на JavaScript. Освойте его с нуля всего за 4 месяца, и вы сможете зарабатывать от 70 000 рублей. Если вы приняли решение игнорировать мои предупреждения и все еще хотите заблокировать ссылку, то лучший способ, который я знаю – удалите href атрибут. Из спецификации Hyperlink: «Атрибут href в тегах a и area необязателен; когда атрибут отсутствует, эти элементы не создают гиперссылки.» У MDN определение попроще: «Для создания плейсхолдер ссылки этот атрибут можно пропустить (в HTML5). Плейсхолдер ссылка похожа на обычную ссылку, но она никуда не ведет.» Стандартный JS код вставки и удаления атрибута href: Отключенная ссылка Bootstrap
Кнопка отключения Bootstrap, но она выглядит как ссылка
.disabled a.toggleLink < display: none; >span.toggleLink < display: none; >.disabled span.toggleLink
Отключить ссылку с точным href: =
Отключите ссылку, содержащую фрагмент пути: *=
Отключите ссылку, которая начинается с: ^=
Отключить ссылку, которая заканчивается на: $=
Или любой другой атрибут
Объединение селекторов атрибутов
Поддержка браузера
This provides for multiple levels of defense so that Anchors marked as disable actually behave as such. Using this approach, you get an anchor that you cannot: - click - tab to and hit return - tabbing to it will move focus to the next focusable element - it is aware if the anchor is subsequently enabled 1. Include this css, as it is the first line of defense. This assumes the selector you use is 'a.disabled' a.disabled < pointer-events: none; cursor: default; >2. Next, instantiate this class such as (with optional selector): $ -> new AnchorDisabler()
class AnchorDisabler constructor: (selector = 'a.disabled') -> $(selector).click(@onClick).keyup(@onKeyup).focus(@onFocus) isStillDisabled: (ev) => ### since disabled can be a class or an attribute, and it can be dynamically removed, always recheck on a watched event ### target = $(ev.target) return true if target.hasClass('disabled') return true if target.attr('disabled') is 'disabled' return false onFocus: (ev) => ### if an attempt is made to focus on a disabled element, just move it along to the next focusable one. ### return unless @isStillDisabled(ev) focusables = $(':focusable') return unless focusables current = focusables.index(ev.target) next = (if focusables.eq(current + 1).length then focusables.eq(current + 1) else focusables.eq(0)) next.focus() if next onClick: (ev) => # disabled could be dynamically removed return unless @isStillDisabled(ev) ev.preventDefault() return false onKeyup: (ev) => # 13 is the js key code for Enter, we are only interested in disabling that so get out fast code = ev.keyCode or ev.which return unless code is 13 # disabled could be dynamically removed return unless @isStillDisabled(ev) ev.preventDefault() return false
Как запретить переход по ссылке через css и js
Как сделать блокировку ссылок
Просто не делайте этого
Надежный способ: удалите href