2012-01-30 13 views
1

私は古いWebサイトを作り直しており、Javascript/jQueryを可能な限り控えめにすることに重点を置いています。私はプロジェクトの一部について助言を求めています.UJは、ブラウザでJavascriptをオフにすると、すべてのサイトコンテンツをユーザーが利用できることを要求しています。私のサイトの1つの部分には大きなアイテムのリストがあります。リストの各項目には独自の説明があり、CSSのdisplay:noneを使用してデフォルトで非表示にします。アイテムをクリックすると、jQuery .toggle():を使用して説明の表示を切り替えます.Javascriptを使用できない人は、何の理由でも表示されません。説明を隠すためにCSSではなくJavascript/jQueryを使用すると、ページが読み込まれたときにそれらがすべて一時的に表示されるので、避けたいものです。だから最高の解決策は何ですか?控えめなJavascriptを実装する

+0

リストのコードを少し見せてください... – Teemu

答えて

3

は、基本的には、あなたはとても

<html class="no-js" lang="en"> 

のように、あなたのhtml要素に「ノー-JS」クラスを挿入することができますし、JavaScriptはクライアント上で有効になっている場合、あなたはすぐにmodernizrを使用してそのクラス(または単純なコードスニペットを削除します

を:あなたは FOUC (flash of unstyled content)は、単にそのようなCSSルールで .no-js.jsクラスの使用を避けることができ、このようによう

<head> 
    <script> 
    (function(d) { 
     d.className = d.className.replace(/(^|\b)no-js(\b|$)/, 'js'); 
    }(document.documentElement)); 
    </script> 
    ... 
</head> 

あなたが最初のコードやスタイルになる「プログレッシブ・エンハンスメント」と「控えめなJavaScriptの」の観点で考える:

.yourlistitems { 
    display: block; 
} 
.js .yourlistitems { 
    display: none; 
} 

このアプローチは、あなたが本当に各ルールに.no-jsクラスを付加する必要はありませんH5BP
ノートでも使用されていますjavascriptなしで動作するページの場合は、機能を追加します(.jsクラスの前にスタイルの特殊性を追加します)

+0

ありがとうございます - それは完璧に動作します。関数内の/(^ | \ b)と(\ b | $)/の正確な内容を教えてください。 –

+0

正規表現は、別のクラスに属していない正確なクラス "no-js"を部分文字列(xxxno-jsまたはno-jsxxxxなど)として検索します。 – fcalderan

1

Modernizrで実装された方法のような方法を考えましたか?

CSSクラスは、異なるCSSセレクタを一致させるスクリプトによってHTMLタグに追加されます。これは本当にため、潜在的な非同期操作でできますが、あなたは、プレーンJS、ないのjQueryを使用してnone !importantに関連するすべての表示を切り替えるするあなたの<style> with display: (block|inline|whatever)を付加<script>を追加する可能性がある場合

<html> 
<head> 
    <!-- 
    Putting this script in the head adds the "js" 
    class to the html element before the page loads. 
    --> 
    <script type="text/javascript" language="javascript"> 
     document.documentElement.className = "js"; 
    </script> 
    <style type="text/css"> 
     /* 
     Only apply the hidden style to elements within the HTML element 
     that has the js class 
     */ 
     .js .description {display:none;} 
    </style> 
</head> 
<body> 
    <span class="description">Example</span> 
</body> 
</html> 
0

は言うことはできません。

JSの場合、CSSの表示設定はあらかじめオーバーライドされています。

関連する問題