CSS hover vs. JavaScript mouseover [닫힘]


84

페이지에서 html 요소의 모양을 제어하기 위해 CSS 요소 (hover 또는 JavaScript onmouseover) 중 하나를 선택할 수있는 경우가 있습니다. div가 입력을 래핑하는 다음 시나리오를 고려하십시오.

<div>
<input id="input">
</div>

마우스 커서를 div 위로 가져갈 때 입력이 배경색을 변경하기를 원합니다. CSS 접근 방식은

<style>
  input {background-color:White;}
  div:hover input {background-color:Blue;}
</style>

<div><input></div>

JavaScript 접근 방식은

<div onmouseover="document.getElementById('input').style.backgroundColor='Blue';">
  <input id="input">
</div>

각 접근 방식의 장점과 단점은 무엇입니까? CSS 접근 방식이 대부분의 웹 브라우저에서 잘 작동합니까? JavaScript가 CSS보다 느립니까?


1
CSS 접근 방식에는 자바 스크립트가 필요하지 않습니다.
pd.

Whatever : hover 사용을 권장합니다 . http://www.xs4all.nl/~peterned/csshover.html
cheeaun

3
"JavaScript가 CSS보다 느린가요?" 눈치 채지 못할 것입니다.하지만 자바 스크립트는 더 많은 리소스를 소비하고 다른 많은 스크립트가 동시에 실행되는 경우 속도가 느려질 수 있습니다 (특히 핸드 헬드 장치, 모바일 웹 사이트의 경우 고려). 반면에 CSS는 리소스를 덜 사용하고 정확하게 표현을위한 것입니다. 자바 스크립트는 웹 사이트 탐색 및 기능을 향상시키기 위해서만 사용해야하지만 js를 사용하지 않는 사용자도 여전히 탐색 할 수 있어야합니다. CSS : hover 접근 방식을 제안합니다.
Jose Faeti 2011

1
이것은 오래된 질문이므로 위의 주석이 더 이상 유효하지 않으며 결코 유효하지 않았을 수 있다는 것은 놀라운 일이 아닙니다. 한 가지 이유는 고성능 상용구를 제공하는 좋은 JS 라이브러리가 부족하기 때문입니다 (Famo.us 참조). 다른 하나는 데스크톱과 모바일 모두 최신 브라우저의 JS 엔진이 매우 빠르다는 것입니다. 네이티브 C 컴파일 코드의 80 % 성능을 측정하는 벤치 마크가 있습니다. 물론 예외적 인 경우도 있지만 브라우저에서 JS의 인상적인 성능은 여전히 ​​유지됩니다. 사람들이 정말로 "의미"하는 것은 DOM이 느리다는 것입니다. JS는 매우 빠르며 결코 깨닫지 못했습니다.
pmont

답변:


59

: hover의 문제는 IE6가 링크에서만 지원한다는 것입니다. 요즘에는 이런 종류의 jQuery를 사용합니다.

$("div input").hover(function() {
  $(this).addClass("blue");
}, function() {
  $(this).removeClass("blue");
});

일을 훨씬 쉽게 만듭니다. IE6, FF, Chrome 및 Safari에서 작동합니다.


나는 빠른 테스트를했다 ... 분명히 IE7은 div : hover를 지원하지 않는다 ??
John

예, IE7은 CSS2를 50 % 지원합니다. 많은 웹 디자이너가 견딜 수없는 이유 중 하나입니다.
Alan

그러나 모든 트래커, 스니퍼 및 해커가 샌드 박스를 이해할 수있는 한 많이 남용합니다. 추적에 도움이되지는 않지만 사람들이 더 어렵게 만들려고한다는 것은 이해할 수 있습니다. 나는 쿠키를 허용하지 않는 사람들을 알고 있습니다. 그리고 그들도 그에 대한 타당한 이유가 있습니다. 나는 사람들이 2013 년에 도착하면 어쨌든 그들이 추적되고 내가 가장 좋아하는 장난감을 활성화한다는 것을 깨닫고 싶기 때문에 여전히 당신의 대답을 찬성했습니다.
jascha 2013 년

metroui가 사용자가 javascript : p를 비활성화 할 수 있는지 궁금합니다.하지만 진지하게 chromeos, mozilla의 os, metroui는 모두 javascript를 사용합니다. html5, css3, webgl 및 javascript는 몇 년 안에 클라이언트 측 앱을 만드는 언어가 될 것입니다. 단지 환자 수, 곧 브라우저 외부가 자바 스크립트 것, 필요 :) 더 이상 다음 브라우저에서 사용 불가능합니다
jascha

32

CSS 하나는 유지 관리가 훨씬 쉽고 읽기 쉽습니다.


18
<a>가 아닌 요소에서 IE6을 지원해야 할 때까지 유지 관리 할 수 ​​있습니다. 그렇다면 JS-hack을 사용해야하기 때문에 고통 스럽습니다. 하지만 CSS는 여전히 제가 선호하는 방법입니다. 1999 년 브라우저를 사용하는 사람들이 1999 년을 경험하게하십시오.
Tyson

4
사람들은 내가 <7 IE를 사용하는 경우 브라우저를 감지 및 업데이트에 알려주는 태그를 추가 제안 ...이 최선의 해결책이다 업데이트해야합니다
트래비스 Pessetto

11

왜 모두? 애니메이션 효과에 jQuery를 사용하고 대체로 CSS를 사용하십시오. 이것은 단계적 저하 로 jQuery의 이점을 제공합니다 .

CSS :

a {color: blue;}
a:hover {color: red;}

jQuery ( jQueryUI 를 사용하여 색상에 애니메이션 적용) :

$('a').hover( 
  function() {
    $(this)
      .css('color','blue')
      .animate({'color': 'red'}, 400);
  },
  function() {
    $(this)
      .animate({'color': 'blue'}, 400);
  }
);

데모


1
CSS 전환을 사용하면 이전 IE 브라우저에서 : Hover가 앵커가 아닌 태그에 적용될 때만 javascript를 대체 수단으로 사용해야한다고 주장합니다.
Adam Youngers 2012 년

jsbin의 일부 변경 사항으로 인해 데모가 작동하지 않습니다. 현재 버전의 jQuery를 참조하도록 데모를 업데이트했으며 모두 다시 작동합니다.
kingjeffrey

10

자바 스크립트에서 수행하는 또 다른 이점은 다른 시점에서 호버 효과를 추가 / 제거 할 수 있다는 것입니다.


감사합니다-이것은 실제로 내가 찾고 있던 질문에 대답했습니다! :-)
Peter S Magnusson

6

매우 큰 차이점은 마우스가 요소 밖으로 이동하면 ": hover"상태가 자동으로 비활성화된다는 것입니다. 결과적으로 마우스 오버시 적용된 모든 스타일은 자동으로 반전됩니다. 반면에 자바 스크립트 접근 방식을 사용하면 "onmouseover"및 "onmouseout"이벤트를 모두 정의해야합니다. "onmouseover"만 정의하는 경우 "onmouseout"을 명시 적으로 정의하지 않는 한 "onmouseover"에 적용된 스타일은 마우스를 놓은 후에도 유지됩니다.


6

편집 :이 대답은 더 이상 사실이 아닙니다. CSS가 잘 지원되고 자바 스크립트 (읽기 : JScript)는 이제 모든 웹 경험에 거의 필요하며 자바 스크립트를 비활성화하는 사람은 거의 없습니다.

2009 년 제 의견으로는 원래 답변입니다.

내 머리 위로 :

CSS를 사용하면 브라우저 지원에 문제가있을 수 있습니다.

JScript를 사용하면 사람들이 jscript를 비활성화 할 수 있습니다.

선호하는 방법은 HTML, CSS를 사용한 레이아웃 및 JScript에서 동적으로 콘텐츠를 수행하는 것입니다. 따라서이 경우 CSS 접근 방식을 사용하고 싶을 것입니다.


3
자바 스크립트를 비활성화하는 이유는 무엇입니까? 천년 이전의 경험이 마음에 드십니까?
알렉스

5
보안 위험이 있고 너무 많은 사이트가 자바 스크립트를 남용하기 때문입니다. 원하는 사이트의 스크립트 만 선택적으로 활성화 할 수있는 "NoScript"라는 멋진 파이어 폭스 플러그인을 사용합니다.
Alan

5

둘 사이에 명심해야 할 또 다른 차이점이 있습니다. CSS를 사용 하면 마우스가 요소에서 벗어날 때 항상:hover 상태가 비활성화됩니다. 그러나 JavaScript를 사용 하면 마우스가 페이지의 나머지 부분이 아닌 브라우저 크롬으로 요소를 이동할 때 이벤트가 시작되지 않습니다.onmouseout

이것은 생각보다 더 자주 발생하며, 특히 사용자 정의 호버 상태로 페이지 상단에 탐색 모음을 만들 때 발생합니다.


4

Internet Explorer에서 : hover 선택기가 <a> 요소가 아닌 다른 요소에서 작동하려면 <! DOCTYPE>을 선언해야합니다.



2

jQuery사용하여 hover를 수행 하는 것에 대한 reguards 에서 나는 항상 HoverIntent 플러그인을 사용합니다. 잠시 동안 요소 위에 일시 중지 할 때까지 이벤트를 발생시키지 않기 때문에 실수로 실행하는 경우 많은 마우스 오버 이벤트가 발생하지 않습니다. 그들 위에 마우스를 올려 놓거나 단순히 옵션을 선택하는 동안.


0

자바 스크립트가 비활성화 된 IE6에 대한 100 % 지원이 필요하지 않은 경우 IE 조건부 주석과 함께 ie7-js 와 같은 것을 사용할 수 있습니다 . 그런 다음 css 규칙을 사용하여 호버 효과를 적용합니다. 나는 그것이 어떻게 작동하는지 정확히 모르지만 자바 스크립트를 사용하여 IE7 및 8에서 정상적으로 작동하지 않는 많은 CSS 규칙을 작동시킵니다.

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