간단하고 유연한 솔루션이 있습니다. Will과 다소 비슷하지만 유효한 html이라는 추가 이점이 있습니다.
본문 요소에 "jsOff"클래스를 지정하십시오. 이것을 JavaScript로 제거 (또는 대체)하십시오. 클래스가 "jsOff"인 상위 요소가있는 "jsOnly"클래스가있는 모든 요소를 숨기려면 CSS를 사용하십시오.
즉, JavaScript가 활성화 된 경우 "jsOff"클래스가 본문에서 제거됩니다. 즉, "jsOnly"클래스를 가진 요소는 "jsOff"클래스를 가진 부모를 가지지 않으므로이를 숨기는 CSS 선택기와 일치하지 않으므로 표시됩니다.
JavaScript가 비활성화 된 경우 "jsOff"클래스 는 본문에서 제거 되지 않습니다 . "jsOnly"와 요소 것 "jsOff"와 부모가 그렇게 할 것이다 가죽 그들을, 따라서 그들이 숨겨져있을 것이라는 CSS 셀렉터와 일치합니다.
코드는 다음과 같습니다.
<html>
<head>
<!-- put this in a separate stylesheet -->
<style type="text/css">
.jsOff .jsOnly{
display:none;
}
</style>
</head>
<body class="jsOff">
<script type="text/javascript">
document.body.className = document.body.className.replace('jsOff','jsOn');
</script>
<noscript><p>Please enable JavaScript and then refresh the page.</p></noscript>
<p class="jsOnly">I am only shown if JS is enabled</p>
</body>
</html>
유효한 html입니다. 간단하다. 유연합니다.
JS가 활성화 된 경우에만 표시하려는 요소에 "jsOnly"클래스를 추가하기 만하면됩니다.
"jsOff"클래스를 제거하는 JavaScript는 가능한 빨리 body 태그 내에서 실행되어야합니다. body 태그가 아직 존재하지 않으므로 더 일찍 실행할 수 없습니다. "jsOnly"클래스가있는 요소는 즉시 표시되지 않을 수 있으므로 나중에 실행해서는 안됩니다 (본문 요소에서 "jsOff"클래스가 제거 될 때까지 해당 요소를 숨기는 CSS 선택기와 일치하기 때문입니다).
이것은 또한 js 전용 스타일링 (예 .jsOn .someClass{}
:) 및 no-js 전용 스타일링 (예 :)에 대한 메커니즘을 제공 할 수 있습니다 .jsOff .someOtherClass{}
. 이를 사용하여 <noscript>
다음에 대한 대안을 제공 할 수 있습니다 .
.jsOn .noJsOnly{
display:none;
}