Добавить свойство курсора CSS при использовании «события-указателя: нет»
95
Я пытаюсь отключить конкретную ссылку и применить стиль курсора, но эта команда CSS cursor: text;не действует. Курсор всегда по умолчанию. Я использую последнюю версию Firefox.
@PHPglue Две вещи: w3fools.com, и он действительно не работает, даже когда это просто этот элемент на странице: jsfiddle.net/brh9r8h6
melancia
Ответы:
121
Использование pointer-events: noneбудет отключить все взаимодействия мыши с этим элементом. Если вы хотите изменить cursorсвойство, вам придется применить изменения к родительскому элементу. Вы можете обернуть ссылку элементом и добавить cursorк нему свойство.
.wrapper {
position: relative;
cursor: text; /* This is used */
}
.wrappera {
pointer-events: none;
}
Однако есть несколько несоответствий в браузере. Чтобы это работало в IE11, похоже, вам нужен псевдоэлемент. Псевдоэлемент также позволяет выделить текст в FF. Как ни странно, вы можете выделить текст в Chrome и без него.
ваш код работает, если я не удалю его родительские теги, но он находится в <div><li> <span>, и в этом случае он по-прежнему является курсором по умолчанию
Dragut
@ user3721912 Не могли бы вы привести пример? Это было бы полезно.
Джош Крозье
да, это именно то, что я хочу сказать, я имею в виду, что мой тег span остается не один, у него есть родители <div> <li>, он обведен тегами <div> <li>
Драгут
23
Это довольно давно исходный вопрос, но это мое решение без какого-либо элемента-оболочки и курсора без событий-указателей:
<!-- Add tabindex="-1" so that element cannot be reached by keyboard --><ahref="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;
}
Chrome начал добавлять фокус при нажатии на элементы с атрибутом tabindex (даже с tabindex = "- 1"). onfocus="this.blur()"Самым быстрым решением будет расфокусировать элемент.
Вам необходимо предотвратить фокусировку элемента, иначе он может быть активирован клавишей ввода
Чисто, просто и, самое главное, в самый раз! Благодарность!
Дазаг,
13
Указав, pointer-events:noneвы активно заявляете, что между элементом и курсором нет взаимодействия с мышью. Следовательно, у него также не может быть курсора - он невидим для любого поведения мыши.
опять же, плохая логика, чтобы оправдать это. Допустим, вам действительно нужно взаимодействие с мышью, но вы сами реализуете это в JavaScript. Или вы не используете JavaScript, но хотите стилизовать что-то вроде изменения размера текстового поля, добавив курсор <-> в нижний правый угол, но вы не хотите, чтобы это блокировало базовые функции изменения размера, поэтому вы создаете события-указатели: нет;, но это убирает курсор. Бездонная логика. Я не понимаю, как это ответ на вопрос.
Джордж
4
Удалить pointer-events: none !important;. Отключить ссылку с помощью JavaScript:
Если вы не знаете, что JavaScript anchorElement- это сам узел или элемент. Самый распространенный способ получить элемент - использовать idатрибут HTML . Допустим, у нас есть:
это кажется логичным, но я плохо разбираюсь в JavaScript. Было бы неплохо, если бы вы показали пример использования
Драгут
0
Моим вариантом использования был перетаскиваемый элемент, который не мог иметь ни одного события-указателя, ни какого-либо родительского элемента с событием-указателем.
Я решил это, условно применив глобальный стиль, заставляя курсор захвата только при перетаскивании. (Я использую React и стилизованные компоненты, но та же логика может быть применена к vanilla js).
Ответы:
Использование
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; }
источник
Это довольно давно исходный вопрос, но это мое решение без какого-либо элемента-оболочки и курсора без событий-указателей:
<!-- 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 Пример
РЕДАКТИРОВАТЬ:
onfocus="this.blur()"
Самым быстрым решением будет расфокусировать элемент.источник
Указав,
pointer-events:none
вы активно заявляете, что между элементом и курсором нет взаимодействия с мышью. Следовательно, у него также не может быть курсора - он невидим для любого поведения мыши.Доказательства можно найти здесь .
источник
Удалить
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.
источник
Моим вариантом использования был перетаскиваемый элемент, который не мог иметь ни одного события-указателя, ни какого-либо родительского элемента с событием-указателем.
Я решил это, условно применив глобальный стиль, заставляя курсор захвата только при перетаскивании. (Я использую React и стилизованные компоненты, но та же логика может быть применена к vanilla js).
const SetDraggingCursor = createGlobalStyle` * { cursor: grabbing !important; } `; // ... {isDragging && <SetDraggingCursor />}
источник
вы можете создать еще один div и разместить его точно на своем последнем div и создать такой CSS:
.example{ background-color: rgba(255, 255, 255, 0); //opacity:0 z-index: 1; cursor: not-allowed; }
источник
Вместо обертки это можно сделать с помощью чистого CSS изнутри. (Я использую это с веб-компонентом материала, поэтому код становится немного сложнее.)
button:disabled { > * { cursor: not-allowed; pointer-events: initial; } &::before { background-color: #fff0; } &::after { background-color: #fff0; } }
<button> <svg .../> </button>
Я также пытался
::before
и::after
сbutton:disabled
непосредственно, но только не мог заставить это случиться ...источник