Должна ли ссылка использоваться или нет, имеет более семантическую, чем презентационная ценность. Его следует отключать не через CSS, а через использование hiddenатрибута, применимого к любому элементу HTML. Затем CSS можно использовать для выбора, например, a[hidden]привязки и стиля соответственно.
amn
@amn , но я не думаю , что браузеры будут отображать элемент с атрибутом скрытого таким стиль становится спорным.
user1794469
1
@ user1794469 Они будут, если вы проинструктируете их, используя CSS display: block, например, или какое-либо другое значение для display. Но hiddenэто не всегда применимо - это для элементов, не имеет значения , и от вопроса не неясно , почему ссылка должна быть отключена. Это, вероятно, случай проблемы XY.
атп
Ответы:
1348
Ответ уже есть в комментариях к вопросу. Для большей наглядности я копирую это решение здесь:
Предупреждение: использование pointer-eventsв CSS для не-SVG элементов является экспериментальным. Раньше эта функция была частью черновой спецификации пользовательского интерфейса CSS3, но из-за многих открытых проблем была отложена до CSS4.
Кроме того, это не мешает переходить по ссылке, затем вводить.
Джоно
4
Если бы вы немного его стилизовали, чтобы пользователь мог видеть, что он отключен. Дайте ему некоторую непрозрачность: .2
DNRN
4
Теперь это работает во всех современных браузерах, включая IE 11. Если вам нужна поддержка для IE 10 и ниже, вы можете использовать JavaScript, такой как этот .
Кивон
26
Важное примечание: при этом отключается только нажатие, а не сама ссылка. Вы все еще можете использовать Tab + Enter, чтобы «нажать» ссылку.
Pikamander2
11
Использование pointer-events: none;не идеально. Он также отключает другие события, такие как наведение, которое требуется для отображения title="…"или всплывающих подсказок. Я обнаружил, что решение JS лучше (использует event.preventDefault();) вместе с некоторыми CSS ( cursor: default; opacity: 0.4;) и всплывающей подсказкой, объясняющей, почему ссылка отключена.
Для стиля, попробуйте изменить pointer-events:none;на pointer-events:unset;. Затем курсор можно изменить на cursor:not-allowed;. Это дает лучшее представление о том, что происходит с пользователем. Кажется, работает в FF, Edge, Chrome, Opera и Brave с сегодняшнего дня.
Саблефост
@Sablefoste Это не работает для меня в Chrome 60. Курсор действительно not-allowed, но ссылка остается активной.
суп 20
122
CSS может использоваться только для изменения стиля чего-либо. Лучшее, что вы можете сделать с чистым CSS - это вообще скрыть ссылку.
Что вам действительно нужно, так это какой-то JavaScript. Вот как вы можете делать то, что вы хотите, используя библиотеку jQuery.
Не забудьте предотвращения поведения по умолчанию: function(ev){ ev.preventDefault(); ev.stopPropagation(); return false;.
ldiqual
5
@Idiqual, return falseделает это
Nickf
1
return falseработает только если действие установлено с помощью hrefатрибута
Джастин
Также эта версия может использоваться для отключения щелчков при сохранении других событий указателя, таких как: hover или: focus! Топ ответ!
Чарли Тупман
Хотя это работает во всех браузерах, отключено только нажатие на ссылку. Имейте в виду, что многие пользователи используются для открытия ссылок из контекстного меню или с помощью средней кнопки мыши.
Александру Северин
33
CSS не может этого сделать. CSS только для презентации. Ваши варианты:
Не включайте hrefатрибут в свой<a> теги.
Используйте JavaScript, чтобы найти элементы привязки с этим class, и удалите их hrefили onclickатрибуты соответственно. JQuery поможет вам в этом (NickF показал, как сделать что-то похожее, но лучше).
Это неправильный ответ - указатель-события: нет; CSS может отключить его.
pie6k
Я не думал об этом! Или, может быть, атрибут еще не существовал в 2010 году? В любом случае это правда, что pointer-events: noneможно отключить события мыши. Однако это не отключает основную ссылку. В тесте, который я пробовал в Chrome 81, я все еще могу активировать такую ссылку, нажав на нее и введя клавишу возврата.
Здесь любая ссылка, содержащаяся /keyword/в пути, будет отключена
<ahref="//website.com/keyword/in/path">Contains in path</a>
[href*="/keyword/"]{
pointer-events: none;
}
Отключить ссылку, которая начинается с: ^=
[attribute^=value]целевой оператор атрибут , который начинается со значением конкретного. Позволяет отказаться от веб-сайтов и корневых путей.
<ahref="//website.com/begins/with/path">Begins with path</a>
[href^="//website.com/begins/with"]{
pointer-events: none;
}
Вы даже можете использовать его для отключения не-https ссылок. Например :
a:not([href^="https://"]){
pointer-events: none;}
Отключить ссылку, которая заканчивается на: $=
[attribute$=value]Оператор целевого атрибута , который заканчивается значением удельного. Это может быть полезно, чтобы отказаться от расширений файлов.
<ahref="/path/to/file.pdf">Link to pdf</a>
[href$=".pdf"]{
pointer-events: none;
}
Или любой другой атрибут
Css может предназначаться для любого атрибута HTML. Может быть rel, target, data-customи так далее ...
Чтобы фактически отключить его, aвам придется заменить его щелчком или href, как описано другими.
PS: Просто чтобы прояснить, я бы посчитал это довольно неопрятным решением, и для SEO это тоже не самое лучшее, но я считаю, что это лучшее с чисто CSS.
Свойство указателя-событий позволяет контролировать, как элементы HTML реагируют на события мыши / касания, в том числе при наведении / активных состояниях CSS, событиях нажатия / касания в Javascript, а также на то, виден ли курсор или нет.
Это не единственный способ отключить ссылку , это хороший способ CSS, который работает в IE10 + и во всех новых браузерах:
.current-page {pointer-events: none;color: grey;}
<ahref="#"class="current-page">This link is disabled</a>
Я искал по интернету и не нашел ничего лучше этого . В основном, чтобы отключить функцию нажатия кнопок, просто добавьте стиль CSS с помощью jQuery, например так:
Спасибо всем, кто опубликовал решения, я объединил несколько подходов, чтобы предоставить более продвинутую disabledфункциональность Вот суть , а код ниже.
This provides for multiple levels of defense so that Anchors marked as disable actually behave as such.Usingthis 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.Includethis css,as it is the first line of defense.This assumes the selector you useis'a.disabled'
a.disabled {
pointer-events: none;
cursor:default;}2.Next, instantiate thisclass such as(with optional selector):
$ ->newAnchorDisabler()
Вот класс coffescript:
classAnchorDisablerconstructor:(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)returntrueif target.hasClass('disabled')returntrueif target.attr('disabled')is'disabled'returnfalse
onFocus:(ev)=>### if an attempt is made to focus on a disabled element, just move it along to the next focusable one. ###returnunless@isStillDisabled(ev)
focusables = $(':focusable')returnunless focusables
current = focusables.index(ev.target)next=(if focusables.eq(current +1).length then focusables.eq(current +1)else focusables.eq(0))next.focus()ifnext
onClick:(ev)=># disabled could be dynamically removedreturnunless@isStillDisabled(ev)
ev.preventDefault()returnfalse
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
returnunless code is13# disabled could be dynamically removedreturnunless@isStillDisabled(ev)
ev.preventDefault()returnfalse
Вы также можете изменить размер другого элемента, чтобы он покрывал ссылки (используя правильный z-index): это «съест» клики.
(Мы обнаружили это случайно, потому что у нас была проблема с внезапно неактивными ссылками из-за «отзывчивого» дизайна, заставляющего H2 покрывать их, когда окно браузера было размером с мобильный телефон.)
Твоя скрипка не работает! Ссылка все еще активна в Chrome.
Мэтт Бирн
Чтобы исправить этот код, поменяйте местами первые два параметра, переданные on (): $ ('html'). On ('click', 'a.Link', function (event) {event.preventDefault ();});
2C-B
1
Привет !!, ответ о CSSнет JSили что-нибудь еще!
Мехди
0
Еще один трюк - поместить над ним невидимый элемент. Это также отключит любые эффекты при наведении
hidden
атрибута, применимого к любому элементу HTML. Затем CSS можно использовать для выбора, например,a[hidden]
привязки и стиля соответственно.display: block
, например, или какое-либо другое значение дляdisplay
. Ноhidden
это не всегда применимо - это для элементов, не имеет значения , и от вопроса не неясно , почему ссылка должна быть отключена. Это, вероятно, случай проблемы XY.Ответы:
Ответ уже есть в комментариях к вопросу. Для большей наглядности я копирую это решение здесь:
Для поддержки браузера, пожалуйста, смотрите https://caniuse.com/#feat=pointer-events . Если вам нужна поддержка IE, есть обходной путь; увидеть этот ответ .
Предупреждение: использование
pointer-events
в CSS для не-SVG элементов является экспериментальным. Раньше эта функция была частью черновой спецификации пользовательского интерфейса CSS3, но из-за многих открытых проблем была отложена до CSS4.источник
pointer-events: none;
не идеально. Он также отключает другие события, такие как наведение, которое требуется для отображенияtitle="…"
или всплывающих подсказок. Я обнаружил, что решение JS лучше (используетevent.preventDefault();
) вместе с некоторыми CSS (cursor: default; opacity: 0.4;
) и всплывающей подсказкой, объясняющей, почему ссылка отключена.источник
pointer-events:none;
наpointer-events:unset;
. Затем курсор можно изменить наcursor:not-allowed;
. Это дает лучшее представление о том, что происходит с пользователем. Кажется, работает в FF, Edge, Chrome, Opera и Brave с сегодняшнего дня.not-allowed
, но ссылка остается активной.CSS может использоваться только для изменения стиля чего-либо. Лучшее, что вы можете сделать с чистым CSS - это вообще скрыть ссылку.
Что вам действительно нужно, так это какой-то JavaScript. Вот как вы можете делать то, что вы хотите, используя библиотеку jQuery.
источник
function(ev){ ev.preventDefault(); ev.stopPropagation(); return false;
.return false
делает этоreturn false
работает только если действие установлено с помощьюhref
атрибутаCSS не может этого сделать. CSS только для презентации. Ваши варианты:
href
атрибут в свой<a>
теги.class
, и удалите ихhref
илиonclick
атрибуты соответственно. JQuery поможет вам в этом (NickF показал, как сделать что-то похожее, но лучше).источник
pointer-events: none
можно отключить события мыши. Однако это не отключает основную ссылку. В тесте, который я пробовал в Chrome 81, я все еще могу активировать такую ссылку, нажав на нее и введя клавишу возврата.Bootstrap Disabled Link
Кнопка Bootstrap отключена, но выглядит как ссылка
источник
Вы можете установить
href
атрибутjavascript:void(0)
источник
Я использовал:
И было недостаточно; в некоторых браузерах по-прежнему отображается ссылка, мигает.
Я должен был добавить:
источник
a[disabled]:active { pointer-events: none !important; }
лучше.Если вы хотите придерживаться формы HTML / CSS, другой вариант - использовать кнопку. Стиль это и установить
disabled
атрибут.Например, http://jsfiddle.net/cFTxH/1/
источник
Если вы хотите, чтобы это был только CSS, логика отключения должна быть определена CSS.
Чтобы переместить логику в определениях CSS, вам придется использовать селекторы атрибутов. Вот некоторые примеры :
Отключить ссылку с точным href:
=
Вы можете отключить ссылки, содержащие определенное значение href, например:
Отключите ссылку, содержащую часть пути:
*=
Здесь любая ссылка, содержащаяся
/keyword/
в пути, будет отключенаОтключить ссылку, которая начинается с:
^=
[attribute^=value]
целевой оператор атрибут , который начинается со значением конкретного. Позволяет отказаться от веб-сайтов и корневых путей.Вы даже можете использовать его для отключения не-https ссылок. Например :
Отключить ссылку, которая заканчивается на:
$=
[attribute$=value]
Оператор целевого атрибута , который заканчивается значением удельного. Это может быть полезно, чтобы отказаться от расширений файлов.Или любой другой атрибут
Css может предназначаться для любого атрибута HTML. Может быть
rel
,target
,data-custom
и так далее ...Объединение селекторов атрибутов
Вы можете связать несколько правил. Допустим, вы хотите отключить все внешние ссылки, но не те, которые указывают на ваш сайт:
Или отключите ссылки на pdf файлы определенного сайта:
Поддержка браузера
Селекторы атрибутов поддерживаются начиная с IE7.
:not()
Селектор с IE9.источник
Один из способов сделать это с помощью CSS - это установить CSS на обертку,
div
которую вы настроили исчезать, и что-то еще занимает ее место.Например:
С CSS, как
Чтобы фактически отключить его,
a
вам придется заменить его щелчком илиhref
, как описано другими.PS: Просто чтобы прояснить, я бы посчитал это довольно неопрятным решением, и для SEO это тоже не самое лучшее, но я считаю, что это лучшее с чисто CSS.
источник
Попробуй это:
источник
Это не единственный способ отключить ссылку , это хороший способ CSS, который работает в IE10 + и во всех новых браузерах:
источник
Я искал по интернету и не нашел ничего лучше этого . В основном, чтобы отключить функцию нажатия кнопок, просто добавьте стиль CSS с помощью jQuery, например так:
Затем, чтобы включить его снова, сделайте это
Проверено на Firefox и IE 11, все заработало.
источник
Вы можете использовать этот CSS:
источник
Спасибо всем, кто опубликовал решения, я объединил несколько подходов, чтобы предоставить более продвинутую
disabled
функциональность Вот суть , а код ниже.Вот класс coffescript:
источник
CSS
нетJS
или что-нибудь еще!Вы также можете изменить размер другого элемента, чтобы он покрывал ссылки (используя правильный z-index): это «съест» клики.
(Мы обнаружили это случайно, потому что у нас была проблема с внезапно неактивными ссылками из-за «отзывчивого» дизайна, заставляющего H2 покрывать их, когда окно браузера было размером с мобильный телефон.)
источник
Демо здесь
Попробуйте это
источник
CSS
нетJS
или что-нибудь еще!Еще один трюк - поместить над ним невидимый элемент. Это также отключит любые эффекты при наведении
источник
Это можно сделать в CSS
Смотрите на:
Обратите внимание, что
text-decoration: none;
иcolor: black;
не требуется, но это делает ссылку больше похожей на обычный текст.источник
pointer-events:none
отключит ссылку:источник
источник