2014-12-11 7 views
2

최근에 : hover 의사 클래스 선택기가 일반적으로 브라우저에서 구현되는 방법에 대해 동료와 토론했습니다. 질문은 실제로 포인터가 웹 사이트의 요소를 가리키며 장면 뒤에서 실제로 발생하는 것과 관련이 있습니다. ": 터치 장치에 마우스를 올려 놓는 것"은 문제이며 이미 철저히 논의했습니다.방법 : 브라우저에서 호버 구현

웹 사이트에서 표준 동작을 처리 할 때 마우스 오버/마우스 아웃 이벤트를 트리거하고 지루한 JavaScript 코드 줄을 저장하는 것을 의미하는 : 호버 선택기가 웹 사이트의 표준 동작을 처리하기 위해 구현되었습니다.

제 동료는 아무런 사건도 없다고 말했습니다. 결국 인식되고 처리되는 요소의 상태 변화보다는 더 이상 발생하지 않습니다.

은 드디어 웹을 파고 결국 :

http://www.w3.org
https://developer.mozilla.org

그러나 나는이 질문에 대한 진정한 해답을 찾을 수 없습니다.
그래서 나는 마침내 커뮤니티에 물어 봅니다!

편집 :

첫 번째 답장을 보내 주셔서 감사합니다. 하지만이 나를 다시 생각하게 무엇을 하나 발견에도 깊이 파고 :
http://www.prowebdesign.ro/how-to-deal-with-hover-on-touch-screen-devices/
경우 : 가시성 조작과 함께 호버는 결국 이벤트 인 더블 탭, 트리거, 여전히 사이에 어떤 연결이있을 것 같습니다 주 및 이벤트. 버그 일지라도.

+1

자바 스크립트 처리기가있는 경우를 대비하여 이벤트가 트리거되지만 브라우저가 내부적으로 처리하는 방식과는 독립적입니다. 이는 구현에 따라 다릅니다. – Barmar

+1

CSS 사양에 관한 한 실제로는 상태입니다. 마우스 포인터가 요소 (': hover') 위에 있거나, (': not (: hover)') 아닙니다. http://estackoverflow.com/questions/11703241/does-css-have-a-blur-selector-pseudo-class * 구현 방법은 소스 코드를 읽음으로써 만 발견 할 수 있습니다. – BoltClock

+5

이 질문은 실용적인 프로그래밍 문제가 아니라 브라우저 구현에 관한 내용이므로 주제가 아닌 것으로 보입니다. –

답변

0

: 호버는 CSS (Cascading Style Sheets) 언어의 일부입니다. Safari의 경우이 언어는 브라우저의 레이아웃 엔진 인 Webkit에 구현됩니다. 다른 브라우저의 경우 other layout engines 목록을 참조하십시오. 의사 클래스 (pseudo class)에 대한 지원 : 웹킷에서 마우스를 가져 가면 C++로 끝납니다. 소스 코드 here을 검토 할 수 있습니다.

다음과 같이 웹킷의 소스 코드는 0의 값을 갖는 플래그 열거 목록에서 숫자 값으로 PseudoClassHover을 정의

DEPRECATED_DEFINE_STATIC_LOCAL(String, hover, (ASCIILiteral("hover"))); 

결정 :

PseudoClassHover = 1 << 0, 

또 다른 기능은 다음과 같은 정의를 추가 의사 클래스가 포함되는지 여부 : 루프에 중첩 된 다음 else-if 문에서 호버가 결정됩니다.

else if (pseudoClass == hover) 
      result |= PseudoClassHover; 

스 니펫은 결과 변수와 비트 OR을 수행하는 대입 연산자와 생성 된 값을 첫 번째 변수 결과에 할당하는 PseudoClassHover를 보여줍니다.

다음 소스 코드 부분은 동료가 최소한 Safari와 관련하여 정확하다는 것을 나타냅니다. 상태의 변경은 비트 AND를 적용한 후 값을 반환하는 것을 기반으로 발생합니다.

case CSSSelector::PseudoClassHover: 
     return forcedPseudoState & PseudoClassHover; 

본인은이 답변이 부분적으로 문제를 해결한다는 점을 인정합니다. 완전히 다른 브라우저가 사용하는 다른 모든 레이아웃 엔진의 소스 코드를 검사하여 유사한 구현 여부를 확인해야하므로 완전히 대답하기 란 쉽지 않습니다.소스 코드를 검사하는 것은 opensource 소프트웨어의 경우처럼 코드를 하나씩 볼 수 있도록 제공하는 것이 좋습니다.

+1

말하기 : 마우스를 올리면 브라우저에 구현되지 않으므로 HTML, CSS 및 JS가 브라우저에 구현되어 있지 않습니다. 그렇다면 브라우저는 어떻게 작동합니까? – BoltClock

+0

브라우저가 상위 레벨이 아닌 * 레이아웃 엔진 * 또는 브라우저의 다른 구성 요소 (즉, "브라우저"가 소프트웨어의 사용자 측 부분)에 구현되었다고 말하지 않는 한 말입니다. 당신의 대답에서 아주 명확하지 않습니다. 어느 쪽이든, 뭔가 작동하도록 구현되어야합니다. – BoltClock

+0

이 경우 "구현"이라는 용어는 "지원"과 동의어입니다. 기능이 브라우저에서 지원되는 경우 해당 기능을 준수하는 브라우저가 제공됩니다. 문제는이 구현이 얼마나 정확하게 수행되었는지를 묻는 것입니다. 그러나 위의 주석에서 언급했듯이 이는 소스를 보면 대답 할 수 있으며 구현마다 다릅니다. – BoltClock