: hover에 반대되는 CSS 의사 클래스가 있습니까?


91

지정할 CSS에 의사 클래스가 있습니까?

:not(:hover)

아니면 그것이 호버링되지 않는 항목을 지정하는 유일한 방법입니까?

여러 CSS3 참조를 살펴 봤는데 : hover의 반대를 지정하는 CSS 의사 클래스에 대한 언급이 없습니다.


1
대신에 element:not(:hover)사용 element.
lmgonzalves 2015 년

5
@lmgonzalves 작동하지 않습니다. 호버 상태와 비 호버 상태 모두에서 스타일을 강제합니다.
마스크 RockPaperLz- 그것을 또는 관

왜 안돼 :not(:hover)?
Oriol

@Oriol 부정이 아닌 의사 클래스만큼 깨끗하지 않고 해당 목적으로 설계된 의사 클래스보다 계산적으로 더 비쌀 수 있기 때문입니다.
RockPaperLz- Mask it 또는 Casket 2015

답변:


146

예, 사용합니다 :not(:hover)

.child:not(:hover){
  opacity: 0.3;
}

jsBin 데모

다른 예시; 나는 당신이 원한다고 생각한다 : "하나를 가리키면 다른 모든 요소는 어둡게" .

내 가정이 맞고 모든 선택기가 동일한 부모 안에 있다고 가정하면 :

.parent:hover .child{
    opacity: 0.2;      // Dim all other elements
}
.child:hover{
   opacity: 1;         // Not the hovered one
}

그렇지 않으면 ... 단순히 기본 로직을 사용하십시오.

.child{
   opacity: 0.2;
}
.child:hover{
   opacity: 1;
}

첫 번째 문장 (정확하다고 가정합니다!)이 답처럼 들립니다. 감사! 아직 존재하지 않아야하므로 적절한 CSS 의사 클래스를 찾을 수 없습니다. 제공 한 예제는 내가 작업중인 작업에 적용 할 수 없지만 상관없이 매우 유용하고 도움이됩니다. 거의 모든 것과 일치하는 첫 번째 예가 얼마나 비쌀 지 궁금합니다. 이견있는 사람?
마스크 RockPaperLz- 그것을 또는 관

@RockPaperLizard 잘, 만약 당신이 1000 개의 자식 요소를 사용한다면 im은 조금 느려질 수 있습니다. jsbin.com/hazega/1/edit?html,css,output 그렇지 않으면 100, 200 개의 요소가 정말 잘 작동합니다.
Roko C. Buljan

감사. :not(:disabled)너무 작동하며 다른 유사한 속성을 가정합니다.
환불 불가 반품 불가

3

그런 의사 클래스는 없습니다. 을 사용할 수있을 때 그럴 필요가 없습니다 :not(:hover). :not()의사 클래스의 요점은 요소가 의사 클래스와 일치하거나 일치하지 않을 수있는 모든 기존 (및 미래) 동적 의사 클래스의 별도 부정을 지정하지 않고도 작성자가 부정을 작성할 수 있도록하는 것입니다.

예를 들어 일부 요소 만 :enabled또는 일 수 있습니다. :disabled대부분의 요소는 의미론이 적용 되지 않기 때문에 해당되지 않습니다.하지만 요소는 포인팅 장치 ( :hover) 에 의해서만 지정되거나 지정 되지 않을 수 있습니다 ( :not(:hover)). 사용하여 이미 직접 달성 할 수있는 부정을 제공하는 것은 :not()그 유용성을 크게 훼손 할 수 있습니다 (여전히 다른 단순 선택기 또는 전체 복잡한 선택기 를 부정하는 데 사용할 수 있음 ).

그러한 의사 클래스가 계산적으로 더 저렴할 것이라는 주장은 매우 약합니다. 그러한 의사 클래스의 가장 순진한 구현은 리터럴 검사일 :not(:hover)것입니다. 더 복잡하거나 최적화 된 구현이 있으면 공급 업체에.보다 빠르거나 더 빠른 의사 클래스를 구현하도록 요청 :not(:hover)하고 있습니다. 이는 캐스 케이 딩과 같은 다른 옵션을 고려할 때 이미 충분히 드문 사용 사례 :not(:hover)입니다. 캐스 케이 딩이 옵션이 아닐 때마다) 쉽게 액세스 할 수 있습니다. 그것은 단순히 스펙에 시간과 노력을 정당화 구현하고 적어도 하나의 다른 기존의 100 % 기능적으로 동일 방법 (및 적용 일에 대한 대안을 테스트하지 않습니다 적어도시나리오의 80 %). 그리고 그러한 의사 클래스의 이름을 지정하는 문제도 있습니다. 여러분은 이름을 제안하지 않았고 좋은 이름도 생각할 수 없습니다. :not-hover2 바이트 만 더 짧고 입력 작업이 약간 적습니다. 어떤 경우에는 잠재적있어 이상 혼란 :not(:hover).

당신이 특이성에 대해 걱정하는 경우,주의 의사 클래스 자체가 특이하기위한 계산되지 않습니다; 가장 구체적인 인수는 입니다. 와 동일하게 다릅니다. 따라서 특이성도 문제가되지 않습니다.:not():not(:hover):hover

브라우저 지원에 대해 걱정이되는 경우 이러한 가상 클래스가 도입 된 경우 :not()CSS2 ( :hover처음 소개 된 지 17 년 이상)에 나타나지 않았기 때문에 와 함께 또는 이후 수준의 선택기에서 도입되었을 수 있습니다. 이전에 IE4에서 처음 구현되었습니다. 나중에 :not(:hover)브라우저가이 새로운 가상 클래스를 구현하기 시작할 때까지 작성자가 계속 사용하도록 강요 당하고 전환 할 이유가 없기 때문에 이후 수준에서 도입하는 것은 의미가 없습니다.

이것은 이벤트 대 상태에 대해 이야기하는 다음 질문과 동일하지 않다는 점에 유의하십시오 (원래는에 대한 :focus것이 아니라 :hover동일한 원칙이 적용됨). CSS에 : blur 선택자 (의사 클래스)가 있습니까?


1

다른 것을 가리킬 때만 무언가를 표시하려면 다음을 사용할 수 있습니다.

selector:not(:hover)

이렇게 :

section{
   font-size:3em;
}

div:not(:hover) + section{
 display:none;
}
<div>Hover on me</div>

<section>Peek A Boo!</section>

사용할 때 염두에 두어야 할 몇 가지 비정상적인 효과 와 결과 :not()가 있습니다.

  • :not(:not(...)), :not(p::before)불가능
  • :not(*) 분명히 적용되지 않을 것입니다
  • :not(.foo)가 아닌 것은 일치 .foo와 같은 태그를 포함하여, <HTML><body>
  • : 예를 들어, 규칙의 특이성을 증가 #foo:not(#bar)간단한과 같은 요소를 일치 #foo하지만, 더 높은 특이성을 가지고있다.

and작업 :not:

  • 요소가 <div>아닌 <span>요소 : body :not(div):not(span){}

or을 (를) 사용한 작업 :not은 아직 잘 지원되지 않습니다.

  • .crazy또는 .fancy다음 이 아닌 요소 :body :not(.crazy, .fancy){}

소스 MDN


0
a {
  /*styles*/
} 

정상 (마우스로 가리 키지 않은 링크)

a:hover {
  /*styles*/
} 

마우스를 올려 놓은 링크입니다.


2
이것은 정확하지 않습니다. 첫 번째 항목은 두 번째 항목도 지정되지 않는 한 마우스를 가져 갔을 때와 가져 가지 않았을 때 항목의 스타일을 지정합니다. 그럼에도 불구하고 첫 번째는 두 상태 모두에 적용되고 두 번째는 두 상태 중 하나에서 무시됩니다.
마스크 RockPaperLz- 그것을 또는 관

당신 말이 맞습니다. 그러나 그것은 그것이 수행되는 방법이며 또한 CSS로 수행하는 유일한 방법입니다. 실제로 달성하고 싶은 것은 무엇입니까?
nikola_wd

감사. 다른 SO 사용자가 귀하와 동일한 질문을했기 때문에 위의 주요 질문 섹션에 귀하의 질문에 대한 답변을 추가했습니다.
마스크 RockPaperLz- 그것을 또는 관
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.