web-dev-qa-db-ja.com

機能検出を使用しない場合、Modernizrは本当に必要ですか?

私はModernizrが頭にあるプロジェクトに飛び込み続けますが、それは(少なくとも機能検出のために)使用されていません。今、私はModernizrが大好きです。それを必要とするプロジェクトの機能検出とフォールバックに頻繁に使用しています。ただし、私がこれまでに参加した最後の3つのプロジェクトは、機能検出クラスが呼び出されることなく、頭の中で行われています。これらのプロジェクトはバニラJavaScriptを使用しています および/またはjQueryポリフィルをまったく必要としません。1 つまり、機能検出を使用していない場合 そしてjQueryライブラリをロードする必要は本当にありません2、Modernizrは、追加のHTTPリクエストとロードするリソースを作成する以外に、実際に何かをしていますか?

私はjQuery/javascriptを十分に使用していないため、内部で何かに影響を与えているかどうかを理解できません。


編集

1 & 2 — Modernizrはjavascriptであり、jQueryライブラリを必要としません(少なくとも、これらのケースでは、なぜjQueryライブラリも読み込まれているのか不思議に思います)。

Modernizr.minのみ#-shiv-cssclasses-loadは7.57 KBですが、html5shiv.minはわずか3 KBです。

31
darcher

一般的に、Modernizrは3つのことを行います。

  1. 機能のサポートを示すクラスを追加し、サポートする機能に応じて要素に異なるスタイルを適用できるようにします。
  2. 機能検出を実行して、スクリプトを実行するか、ポリフィルを実行するかを決定できます。
  3. それは、古いブラウザがHTML5要素を理解できるようにするhtml5shivを注入します。

これらの機能をまったく使用しない場合、Modernizrを含めても意味がありません。 html5shiv にのみ使用する場合は、数バイトを節約するために代わりにそれを含めることができますが、関連するサイズの違いはまったくありません。

とはいえ、使用していないModernizrビルドに機能検出を含めないでください。それは無駄です。

35
Nils Kaspersson

Modernizrには、自分で定義したり、別のライブラリを含めたりする手間を省くシムも含まれています。

Modernizrの主な目的は、クラスを介した検出を使用することです。だからあなたはこのようなことをすることができます:

例、クライアントがフラッシュをサポートしているかどうかに応じて動作を変更する場合:

.flash #flashdiv
{
  display:block;
}   

.no-flash #flashdiv
{
  display:none;
}

これは、さまざまなクライアントブラウザーの機能を動的に処理するのに役立ちます。

また、Modernizrを使用してHTML5機能を検出し、フォールバック(ポリフィル)を提供できます。

例えば:

<script>
  if (Modernizr.canvas) {
    alert("This browser supports HTML5 canvas!"); //you can load js here. or use yepnope)
  }
</script>
12
Royi Namir