如果你不使用特征检测,是否真的需要Modernizr?

dar*_*her 30 javascript jquery modernizr

我一直跳进Mod​​ernizr位于头部的项目,但它没有被使用(至少对于特征检测).现在,我喜欢Modernizr,我经常使用它进行特征检测,并对需要它的项目进行回退; 然而,我进入它的最后三个项目一直没有调用任何特征检测类.这些项目使用的是vanilla javascript 和/或根本不需要jQuery polyfill. 1那就是说...如果你没有使用特征检测并且真的不需要加载jQuery库 2,那么Modernizr除了要添加额外的HTTP请求和资源之外还做了什么吗?

我对jQuery/javascript不够强大,无法理解它是否会影响其他任何内容.


编辑

1&2 - Modernizr是javascript,不需要jQuery库(这让我想知道为什么还要加载jQuery库,至少在这些情况下).

Modernizr.min只有#-shiv-cssclasses-load7.57 KB而html5shiv.min只有3 KB.

Nil*_*son 37

一般来说,Modernizr做了三件事.

  1. 它添加了指示功能支持的类,允许您根据元素支持的功能将不同的样式应用于元素.
  2. 它允许您运行特征检测以决定是否运行脚本/运行polyfill.
  3. 它注入了html5shiv,它允许旧浏览器理解HTML5元素.

如果您不使用任何这些功能,那么包括Modernizr就没有意义了.如果你只将它用于html5shiv那么你可能只需要包含它来保存几个字节,尽管我怀疑它有相关的大小差异.

也就是说,您不应该在不使用的modernizr构建中包含功能检测.这只不过是浪费.


Roy*_*mir 12

Modernizr还包括垫片,可以帮助您自己定义或包含其他库.

Modernizr的主要目标是通过类使用检测.所以你可以这样做:

例如,您希望根据客户端是否支持flash来更改行为:

.flash #flashdiv
{
  display:block;
}   

.no-flash #flashdiv
{
  display:none;
}
Run Code Online (Sandbox Code Playgroud)

它真的可以帮助您动态处理不同客户端浏览器的功能.

此外,您可以使用Modernizr检测HTML5功能并提供回退(polyfill).

例如:

<script>
  if (Modernizr.canvas) {
    alert("This browser supports HTML5 canvas!"); //you can load js here. or use yepnope)
  }
</script>
Run Code Online (Sandbox Code Playgroud)