Додайте властивість курсора CSS при використанні “pointer-events: none”


96

Я намагаюся відключити конкретне посилання та застосувати стиль курсору, але ця команда CSS cursor: text;не вплине. Курсор завжди є типовим. Я використовую останню версію Firefox.

CSS:

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

@PHPglue Дві речі: w3fools.com, і це насправді не працює, навіть коли це лише цей елемент на сторінці: jsfiddle.net/brh9r8h6
melancia

Відповіді:


122

Використання 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>
Dragut

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

Чисто, просто і найголовніше з нього, в самий раз! Дякую!
Дазаг

13

Вказуючи, pointer-events:noneви активно заявляєте, що між елементом та курсором не відбувається взаємодії миші. Тому він також не може мати курсор - він непомітний для всіх типів поведінки миші.

Доказ можна знайти тут .


знову ж таки, погана логіка, щоб це виправдати. Скажімо, ви хочете взаємодії з мишею, але ви реалізуєте це самостійно в JavaScript. Або ви не використовуєте JavaScript, але хочете створити щось на зразок зміни розміру тексту, додавши курсор <-> внизу праворуч, але ви не хочете, щоб це блокувало основну функцію зміни розміру, тому ви робите події покажчика: none ;, але це видаляє курсор. Бездна логіка. Я не бачу, як це відповідь на запитання.
Джордж

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 та styled-компоненти, але та ж логіка може бути застосована і до 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 зсередини. (Я використовую це з веб-компонентом material, тому код стає дещо складнішим.)

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.