CSS에`pointer-events : hoverOnly` 또는 이와 유사한 것이 있습니까?


103

pointer-eventsCSS에서 속성을 가지고 놀았습니다 .

div제외한 모든 마우스 이벤트에 표시되지 않도록하고 싶은이 있습니다 :hover.

따라서 모든 클릭 명령은 div아래 의 명령으로 이동 하지만 div는 마우스가 그 위에 있는지 여부를보고 할 수 있습니다.

이것이 가능하다면 누구든지 말해 줄 수 있습니까?

HTML :

<div class="layer" style="z-index:20; pointer-events:none;">Top layer</div>
<div class="layer" style="z-index:10;">Bottom layer</div>

CSS :

.layer {
    position:absolute;
    top:0px;
    left:0px;
    height:400px;
    width:400px;
}

2
참고 로 IEpointer-events 에서는 잘 지원 되지 않습니다 .
Vucko 2014 년

2
자바 스크립트가 필요한 것 같네요
Pete

Pete와 동의합니다. 이것이 구체적으로 CSS를 요구한다는 것을 알고 있지만 동일한 문제가 있었고 가장 쉬운 해결책은 자녀가 javascript stackoverflow.com/questions/35872534/…
Jerry Sha

답변:


12

CSS만으로는 목표를 달성 할 수 없다고 생각합니다. 그러나 다른 기여자들이 언급했듯이 JQuery에서 쉽게 할 수 있습니다. 내가 한 방법은 다음과 같습니다.

HTML

<div
  id="toplayer"
  class="layer"
  style="
    z-index: 20;
    pointer-events: none;
    background-color: white;
    display: none;
  "
>
  Top layer
</div>
<div id="bottomlayer" class="layer" style="z-index: 10">Bottom layer</div>

CSS (변경되지 않음)

.layer {
    position:absolute;
    top:0px;
    left:0px;
    height:400px;
    width:400px;
}

JQuery

$(document).ready(function(){
    $("#bottomlayer").hover(
        function() {
            $("#toplayer").css("display", "block");
        },
        function() {
            $("#toplayer").css("display", "none");
        }
    );
});

다음은 JSFiddle입니다. http://www.jsfiddle.net/ReZ9M


107

호버 만. 많이 쉽다. No JS ... 링크 기본 작업도 방지합니다.

a:hover {
	color: red;
}
a:active {
	pointer-events: none;
}
<a href="www.google.com">Link here</a>

편집 : IE 11 이상에서 지원 http://caniuse.com/#search=pointer-events


23
이것은 '작동'합니다. 그러나 아래 요소에 대한 클릭 스루를 허용하지 않습니다 (적어도 해당 요소가 YouTube 동영상 인 경우에는 해당되지 않음). 이것이 아마도 처음부터 그 동작이 필요한 유일한 이유 일 것입니다
Simon_Weaver

1
추가 포인터 이벤트를 비활성화하기 위해 요소를 클릭해야하지 않습니까?
Mindwin dec

3
이 beutifull입니다
user2860957

2
@PriyanshuJain 사용자가 버튼을 클릭하면 어떻게 될 것이라고 생각합니까?
Свободен Роб

1
영리한 💐 (그게 내가 말해야하는 전부입니다)
Davious

24

Xanco의 대답을 "훔치기"하지만 그 추악하고 추악한 jQuery가 없습니다.

스 니펫 : DIV가 역순임을 알 수 있습니다.

.layer {
  position: absolute;
  top: 0px;
  left: 0px;
  height: 400px;
  width: 400px;
}

#bottomlayer {
  z-index: 10
}

#toplayer {
  z-index: 20;
  pointer-events: none;
  background-color: white;
  display: none
}

#bottomlayer:hover~#toplayer {
  display: block
}
<div id="bottomlayer" class="layer">Bottom layer</div>
<div id="toplayer" class="layer">Top layer</div>


2
죄송합니다, 어쨌든 못생긴 jquery를 사용하고 있습니다. 하지만 CSS 전용 솔루션에 대한 찬성 투표를하세요!
Jimmery 2014 년

이 중대하다 - 바닥 층은 iframe이 포함 된 경우 단지 참고 불행하게도이 제대로 작동하지 않습니다 jsfiddle.net/ReZ9M/82
Simon_Weaver

1
이것이 질문을 어떻게 해결합니까? OP는 처음에 보이는 요소를 통과하기 위해 클릭 명령을 요청했습니다. 솔루션에서 그들은 아닌 "탑 레이어"텍스트가 강조되지 않을 수있는 방법을 통지 할 ...
Trever 톰슨

6

또한 다른 요소에서 마우스 오버를 감지하고 해당 자식에 스타일을 적용하거나 인접한 자식 등과 같은 다른 CSS 선택기를 사용할 수 있습니다.

하지만 귀하의 경우에 따라 다릅니다.

부모 요소를 가리 킵니다. 내가 했어:

.child {
    pointer-events: none;
    background-color: white;
}

.parent:hover > .child {
    background-color: black;
}

1

내가 사용하는 :hover내 오버레이 사업부를 통해 호버를 시뮬레이션하기 위해 동일한 크기의 부모 / 컨테이너의 의사 요소를 다음 오버레이의 설정 pointer-events으로는 none아래의 요소에 클릭을 통과 할 수 있습니다.


0

요청에 대한 순수한 CSS 솔루션 (불투명도 속성은 전환의 필요성을 설명하기위한 것입니다) :

.hoverOnly:hover {
    pointer-events: none;
    opacity: 0.1;
    transition-delay: 0s;
}
.hoverOnly {
    transition: ,5s all;
    opacity: 0.75;
    transition-delay: 2s;
}

기능 :

마우스가 상자에 들어가면 :hover상태가 트리거 됩니다. 그러나이 상태에서는 포인터 이벤트가 비활성화됩니다.

그러나 전환 타이머를 설정하지 않으면 div는 마우스가 움직일 때 호버 상태를 취소합니다. 마우스가 요소 내부로 이동하는 동안 호버 상태가 깜박입니다. 불투명도 속성과 함께 위의 코드를 사용하여이를인지 할 수 있습니다.

호버 상태에서 전환 지연을 설정하면 문제가 해결됩니다. 2s값은 사용자의 요구에 맞게하기 위해 약간 변형 될 수있다.

전환에 대한 크레딧 조정할 : patad을이 대답 .


이 솔루션을 시도했을 때 요소가 "hover"상태로 멈춰 있습니다.
Flimm

0

순수한 CSS 만 있으면 jquery 가 필요하지 않습니다 .

div:hover {pointer-events: none}
div {pointer-events: auto}

안녕하세요-많은 감사합니다-답변에 데모를 추가 할 수 있습니까 (예 : 코드 스 니펫 또는 codepen 또는 jsfiddle의 링크)-어떤 종류의 호환성이 있는지 알고 있습니까? 새로운 CSS3 기능입니까? 이 작동하면 나는 확실히 당신에게 틱 :) 줄 것이다
Jimmery

데모를 만들 수 없습니다. 그러나 내 논리에서는 확실히 모든 브라우저에서 작동합니다 (ie가 없기 때문에 모르겠습니다). 그리고, 그것은 : CSS1에서 지원
Bariq Dharmawan

caniuse.com/#feat=pointer-events-11을 제외한 어떤 IE에서도 작동하지 않을 것입니다 ... 여기서 의미하는 작업 데모를 만들면 codepen.io 내가 테스트하고 작동한다면 정답과 함께 상을 - 미안, 나는이 이론 코드 캔트 상 - 만 작업 데모
Jimmery

@brillout 스 니펫을 추가 할 수 있습니까? Bcz 그것은 나를 위해 일합니다
Bariq Dharmawan
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.