Как отключить ссылку, используя только CSS? - PullRequest
807 голосов
/ 19 января 2010

Есть ли способ отключить ссылку с помощью CSS?

У меня есть класс current-page, и я хочу, чтобы ссылки с этим классом были отключены, чтобы при их нажатии не происходило никаких действий.

Ответы [ 20 ]

7 голосов
/ 02 июля 2017

Свойство pointer-events позволяет контролировать, как элементы HTML реагировать на события мыши / касания - в том числе CSS наведения / активные состояния, события клика / касания в Javascript, и есть ли курсор виден.

Это не единственный способ отключить ссылку , но хороший способ CSS, который работает в IE10 + и во всех новых браузерах:

.current-page {
  pointer-events: none;
  color: grey;
}
<a href="#" class="current-page">This link is disabled</a>
5 голосов
/ 21 августа 2015

Я искал по интернету и нашел не лучше, чем это . В основном, чтобы отключить функцию нажатия кнопок, просто добавьте стиль CSS с помощью jQuery, например так:

$("#myLink").css({ 'pointer-events': 'none' });

Затем, чтобы включить его снова, сделайте это

$("#myLink").css({ 'pointer-events': '' });

Проверено на Firefox и IE 11, все заработало.

3 голосов
/ 15 апреля 2017

Вы можете использовать этот CSS:

a.button,button {
    display: inline-block;
    padding: 6px 15px;
    margin: 5px;
    line-height: 1.42857143;
    text-align: center;
    white-space: nowrap;
    vertical-align: middle;
    -ms-touch-action: manipulation;
    touch-action: manipulation;
    cursor: pointer;
    -webkit-user-select: none;
    -moz-user-select: none;
    -ms-user-select: none;
    user-select: none;
    background-image: none;
    border: 1px solid rgba(0, 0, 0, 0);
    border-radius: 4px;
    -moz-box-shadow: inset 0 3px 20px 0 #cdcdcd;
    -webkit-box-shadow: inset 0 3px 20px 0 #cdcdcd;
    box-shadow: inset 0 3px 20px 0 #cdcdcd;
}

a[disabled].button,button[disabled] {
    cursor: not-allowed;
    opacity: 0.4;
    pointer-events: none;
    -webkit-touch-callout: none;
}

a.button:active:not([disabled]),button:active:not([disabled]) {
    background-color: transparent !important;
    color: #2a2a2a !important;
    outline: 0;
    -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, .5);
    box-shadow: inset 0 3px 5px rgba(0, 0, 0, .5);
}
<button disabled="disabled">disabled!</button>
<button>click me!</button>
<a href="http://royansoft.com" disabled="disabled" class="button">test</a>
<a href="http://royansoft.com" class="button">test2</a>
3 голосов
/ 19 сентября 2018

Я использовал:

.current-page a:hover {
pointer-events: none !important;
}

И этого было недостаточно; в некоторых браузерах по-прежнему отображается ссылка, мигающая.

Я должен был добавить:

.current-page a {
cursor: text !important;
}
3 голосов
/ 17 октября 2014

Спасибо всем, кто опубликовал решения, я объединил несколько подходов, чтобы обеспечить более продвинутую disabled функциональность. Вот суть , а код ниже.

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()

Вот класс coffescript:

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
2 голосов
/ 04 октября 2013

Демо здесь
Попробуйте это

$('html').on('click', 'a.Link', function(event){
    event.preventDefault();
});
1 голос
/ 01 апреля 2014

Вы также можете изменить размер другого элемента, чтобы он покрывал ссылки (используя правильный z-index): это «съест» клики.

(Мы обнаружили это случайно, потому что у нас была проблема с внезапно неактивными ссылками из-за «отзывчивого» дизайна, заставляющего H2 покрывать их, когда окно браузера было размером с мобильный телефон.)

0 голосов
/ 22 мая 2018

<a href="#!">1) Link With Non-directed url</a><br><br>

<a href="#!" disabled >2) Link With with disable url</a><br><br>
0 голосов
/ 18 декабря 2017

Возможно сделать это в CSS

.disabled{
  cursor:default;
  pointer-events:none;
  text-decoration:none;
  color:black;
}
<a href="https://www.google.com" target="_blank" class="disabled">Google</a>

См .:

Обратите внимание, что text-decoration: none; и color: black; не нужны, но это делает ссылку больше похожей на обычный текст.

0 голосов
/ 16 ноября 2017

pointer-events:none отключит ссылку:

.disabled {
       pointer-events:none;
}
<a href="#" class="disabled">link</a>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...