Добавить свойство курсора CSS при использовании «события-указателя: нет»


95

Я пытаюсь отключить конкретную ссылку и применить стиль курсора, но эта команда CSS cursor: text;не действует. Курсор всегда по умолчанию. Я использую последнюю версию Firefox.

CSS:

pointer-events: none !important;
cursor: text;
color: Blue;

@PHPglue Две вещи: w3fools.com, и он действительно не работает, даже когда это просто этот элемент на странице: jsfiddle.net/brh9r8h6
melancia

Ответы:


121

Использование pointer-events: noneбудет отключить все взаимодействия мыши с этим элементом. Если вы хотите изменить cursorсвойство, вам придется применить изменения к родительскому элементу. Вы можете обернуть ссылку элементом и добавить cursorк нему свойство.

Пример здесь

HTML

<span class="wrapper">
    <a href="#">Some Link</a>
</span>

CSS

.wrapper {
    position: relative;
    cursor: text;  /* This is used */
}
.wrapper a {
    pointer-events: none;
}

Однако есть несколько несоответствий в браузере. Чтобы это работало в IE11, похоже, вам нужен псевдоэлемент. Псевдоэлемент также позволяет выделить текст в FF. Как ни странно, вы можете выделить текст в Chrome и без него.

Обновленный пример

.wrapper:after {
    content: '';
    position: absolute;
    width: 100%; height: 100%;
    top: 0; left: 0;
}

ваш код работает, если я не удалю его родительские теги, но он находится в <div><li> <span>, и в этом случае он по-прежнему является курсором по умолчанию
Dragut

@ user3721912 Не могли бы вы привести пример? Это было бы полезно.
Джош Крозье

да, это именно то, что я хочу сказать, я имею в виду, что мой тег span остается не один, у него есть родители <div> <li>, он обведен тегами <div> <li>
Драгут

23

Это довольно давно исходный вопрос, но это мое решение без какого-либо элемента-оболочки и курсора без событий-указателей:

<!-- Add tabindex="-1" so that element cannot be reached by keyboard -->
<a href="url" class="disabled" tabindex="-1" onfocus="this.blur()">Disabled link</a>

CSS:

/* Adding cursor just works: */
.disabled {
    cursor: not-allowed;
}

/* Makes link non-clickable: */
.disabled:active {
    pointer-events: none;
}

CodePen Пример

РЕДАКТИРОВАТЬ:

  • Chrome начал добавлять фокус при нажатии на элементы с атрибутом tabindex (даже с tabindex = "- 1"). onfocus="this.blur()"Самым быстрым решением будет расфокусировать элемент.
  • Вам необходимо предотвратить фокусировку элемента, иначе он может быть активирован клавишей ввода

Работает хорошо! Умная. Спасибо
Джо Дули

Недооцененный ответ! Спасибо!
trpx 08

Чисто, просто и, самое главное, в самый раз! Благодарность!
Дазаг,

13

Указав, pointer-events:noneвы активно заявляете, что между элементом и курсором нет взаимодействия с мышью. Следовательно, у него также не может быть курсора - он невидим для любого поведения мыши.

Доказательства можно найти здесь .


опять же, плохая логика, чтобы оправдать это. Допустим, вам действительно нужно взаимодействие с мышью, но вы сами реализуете это в JavaScript. Или вы не используете JavaScript, но хотите стилизовать что-то вроде изменения размера текстового поля, добавив курсор <-> в нижний правый угол, но вы не хотите, чтобы это блокировало базовые функции изменения размера, поэтому вы создаете события-указатели: нет;, но это убирает курсор. Бездонная логика. Я не понимаю, как это ответ на вопрос.
Джордж

4

Удалить pointer-events: none !important;. Отключить ссылку с помощью JavaScript:

anchorElement.onclick = function(){
  return false;
}

Если вы не знаете, что JavaScript anchorElement- это сам узел или элемент. Самый распространенный способ получить элемент - использовать idатрибут HTML . Допустим, у нас есть:

<a id='whatever' href='#'>Text Here</a>

Ваш код может быть:

document.getElementById('whatever').onclick = function(){
  return false;
}

Есть несколько других способов получить Nodes.


это кажется логичным, но я плохо разбираюсь в JavaScript. Было бы неплохо, если бы вы показали пример использования
Драгут

0

Моим вариантом использования был перетаскиваемый элемент, который не мог иметь ни одного события-указателя, ни какого-либо родительского элемента с событием-указателем.

Я решил это, условно применив глобальный стиль, заставляя курсор захвата только при перетаскивании. (Я использую React и стилизованные компоненты, но та же логика может быть применена к vanilla js).

const SetDraggingCursor = createGlobalStyle`
  * {
    cursor: grabbing !important;
  }
`;

// ...

{isDragging && <SetDraggingCursor />}

0

вы можете создать еще один div и разместить его точно на своем последнем div и создать такой CSS:

.example{
    background-color: rgba(255, 255, 255, 0); //opacity:0
    z-index: 1;
    cursor: not-allowed;
}

0

Вместо обертки это можно сделать с помощью чистого CSS изнутри. (Я использую это с веб-компонентом материала, поэтому код становится немного сложнее.)

button:disabled {
    > * {
        cursor: not-allowed;
        pointer-events: initial;
    }

    &::before {
        background-color: #fff0;
    }

    &::after {
        background-color: #fff0;
    }
}
<button>
    <svg .../>
</button>

Я также пытался ::beforeи ::afterс button:disabledнепосредственно, но только не мог заставить это случиться ...

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.