"pointer-events : none"사용시 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>에
있으며이

@ user3721912 예를 들어 주시겠습니까? 도움이 될 것입니다.
Josh Crozier 2014 년

네, 정확히 제가 말하고 싶은 말입니다. 내 스팬 태그는 혼자가 아니라 <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()"요소의 초점을 맞추지 않도록 설정 하는 것입니다.
  • 요소에 초점을 맞추지 않도록해야합니다. 그렇지 않으면 Enter 키로 활성화 할 수 있습니다.

잘 작동합니다! 영리한. 감사합니다
Joe Dooley

과소 평가 된 답변! 감사합니다!
trpx

깨끗하고 간단하며 가장 중요합니다. 감사!
Dazag

13

지정 pointer-events:none하면 요소와 커서 사이에 마우스 상호 작용이 없음을 적극적으로 선언합니다. 따라서 커서도 가질 수 없습니다 . 모든 마우스 동작에 보이지 않습니다 .

여기에서 찾을 수있는 증거 .


다시 말하지만, 이것을 정당화하는 잘못된 논리입니다. 마우스 상호 작용을 원하지만 JavaScript에서 직접 구현한다고 가정 해 보겠습니다. 또는 JavaScript를 사용하고 있지 않지만 오른쪽 하단에 <-> 커서를 추가하여 텍스트 영역 크기 조정과 같은 스타일을 지정하고 싶지만 기본 크기 조정 기능을 차단하지 않으려면 포인터 이벤트를 만듭니다. 없음; 그러나 커서가 제거됩니다. 심연의 논리. 이것이 질문에 대한 답인지 알 수 없습니다.
George

4

제거 pointer-events: none !important;. JavaScript를 사용하여 링크 비활성화 :

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

JavaScript anchorElement가 노드 또는 요소 자체 라는 것을 모르는 경우 . 요소를 얻는 가장 일반적인 방법은 HTML id속성 을 사용하는 것입니다. 다음이 있다고 가정 해 보겠습니다.

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

코드는 다음과 같습니다.

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

노드를 얻는 다른 방법이 많이 있습니다.


논리적으로 보이지만 JavaScript는 잘 못합니다. 샘플 사용법을 보여 주면 좋을 것입니다
Dragut 2014 년

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직접,하지만 그냥 그렇게 할 수 없었다 ...

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.