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

时间:2014-02-02 14:26:30

标签: javascript jquery modernizr

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

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


修改

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

只有#-shiv-cssclasses-load

Modernizr.min 为7.57 KB,而 html5shiv.min 仅为3 KB。

2 个答案:

答案 0 :(得分:33)

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

  1. 它添加了表示功能支持的类,允许您根据元素支持的功能对元素应用不同的样式。
  2. 它允许您运行特征检测以决定是否运行脚本/运行polyfill。
  3. 它注入html5shiv,允许旧版浏览器理解HTML5元素。
  4. 如果您不使用任何这些功能,那么根本不包括Modernizr。如果你只将它用于html5shiv,那么你可能只需要包含它来保存几个字节,尽管我怀疑它有相关的大小差异。

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

答案 1 :(得分:12)

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

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

示例,您希望根据客户端是否支持Flash更改行为:

.flash #flashdiv
{
  display:block;
}   

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

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

此外,您可以使用Modernizr检测HTML5功能并提供后备(polyfill)。

例如:

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