17

Modernizr 2を使用してメディアクエリが存在するかどうかを検出し、必要に応じてrespond.jsにロードしようとしています。

これをscript.jsファイルに入れました...

Modernizr.load({
  test: Modernizr.mq,
  yep : '',
  nope: 'mylibs/respond.js'
});

私は何が間違っているのですか?Modernizrサイトのメディアクエリでこれを行う方法の例がないことに本当に驚いています。これが私が使用しているModernizrのバージョンです...

http://www.modernizr.com/download/#-backgroundsize-borderradius-boxshadow-iepp-respond-mq-cssclasses-teststyles-testprop-testallprops-prefixes-domprefixes-load

4

2 に答える 2

19

それ!!Modernizr.mq === trueは、常に間違ったことをテストしているからです!

ドキュメントに従って:

ブラウザがメディア クエリをまったくサポートしていない場合 (例: oldIE)、mq() は常に false を返します。

しかし、これModernizr.mq()falseあまりにもです!実際に何かをテストする必要があります。ここで、allキーワードはまさにあなたが必要とするものです(またはonly allポールが提案するように):

Modernizr.load({
  test: Modernizr.mq('only all'),
  nope: 'polyfill.js'
});

ただし、 Respond.jsを含むModernizr 2.0.xのすべてのカスタム ビルドには、代わりに別のポリフィルをロードする場合を除いて、実際にこれをテストする必要はありません。その場合、ビルドから Respond.js を無効化/削除する必要があります。mq

モダナイザー 2.5.x

Modernizr 2.5.x の登場により、上記は当てはまりません。省略された変更ログは、次のことを指定します。

IE8 でクラッシュの競合が発生していたため、ビルダーに Respond.js を含めなくなりました。プロジェクトでまだ Respond.js が必要な場合は、手動で含めてください。

これは、今戻ってくるModernizr.mq('only all') 可能性があることfalseを意味します...

于 2011-09-28T09:15:09.693 に答える
2

フェリックスの回答のコメントでこの結論に達していることに気づきました 。私のような他の訪問者がそれを受け取らなかった場合に備えて、ここに回答を残しておきます。

これがまだ問題であるかどうかはわかりませんが、Modernizr v2.0.6をロードしている場合は、このテストを実行する必要はありません。ページに追加するだけで、respond.jsが自動的に起動し、メディアクエリが機能し始めます。

IE8で「真」が返され続けて以来、私もこれに頭を悩ませてきました!Modernizrサイトでは説明が不十分ですが、http://html5boilerplate.com/(最初のインスタンス)でほのめかされています

于 2011-10-10T10:35:23.170 に答える