私はシンプルで柔軟なソリューションを持っています。これはWillのものにいくぶん似ています(ただし、有効なhtmlであるという追加の利点があります)。
body要素に「jsOff」のクラスを指定します。これをJavaScriptで削除(または置換)します。CSSを使用して、クラスが「jsOnly」の要素と、クラスが「jsOff」の親要素を非表示にします。
これは、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」クラスがbody要素から削除されるまで非表示にするCSSセレクターと一致するため)。
.jsOn .someClass{}
これは、jsのみのスタイリング(例)と非jsのみのスタイリング(例)のメカニズムを提供することもできます.jsOff .someOtherClass{}
。これを使用して、次の代替手段を提供できます<noscript>
。
.jsOn .noJsOnly{
display:none;
}