Modernizr 用法

为什么需要 Modernizr

浏览器的发展参差不齐,以最新版 Firefox、Google Chrome、Safari 来说,它们支持的 HTML5、CSS3 特性恐怕也不尽相同,而况还有用户的情况,不同用户使用不同浏览器的不同版本,于是造成 Web 开发者在开发网站时,要面对数量庞大的浏览器种类。

如果开发时按最低标准,比如 IE6 不支持的特性,我们统统不用,那就没 Modernizr 什么事;但我想这种情况极少,更多的开发,是在现代浏览器上使用它们支持的特性,而在早期浏览器上做一定的降级处理,这就是所谓 “Progressive Enhancement”,也是 Modernizr 要起的主要作用。

Modernizr 的作用

下载引用

首先,下载 Modernizr 文件,然后在页面 <head></head> 中引用

<script src="js/modernizr.js"></script>

需要注意这段代码的位置,放在 <head></head> 部分、所有样式表文件 link 后 – 之所以放样式表后面,是为了不阻塞 CSS 的加载。

放在 <head></head> 中的原因有二:

  1. HTML5 Shiv 需要在 <body> 前执行,这样样式表才能识别 HTML5 中新增的标签
  2. 防止 FOUC

如果这两样你都不介意,那么请随便找个位置添加 modernizr。

添加 no-js

另外,我们还需要在 <html> 标签中添加一个 no-js 类:

<html class="no-js">

如果 Modernizr 正常运行,它会移除 no-js,添加一个 js 类;假如用户浏览器禁用 JavaScript,则 Modernizr 无法运行,html 标签就有 no-js

在 HTML5 Boilerplate 里,<html> 标签是这样写的,比仅加一个 no-js 更复杂:

<!--[if lt IE 7]>
  <html class="no-js lt-ie9 lt-ie8 lt-ie7">
<![endif]-->
<!--[if IE 7]>
  <html class="no-js lt-ie9 lt-ie8">
<![endif]-->
<!--[if IE 8]>
  <html class="no-js lt-ie9">
<![endif]-->
<!--[if gt IE 8]><!-->
  <html class="no-js">
<!--<![endif]-->

页面在加载完 Modernizr.js 后,会自动运行生成一个 JavaScript 对象Modernizr,这个对象中包含浏览器特性支持的真假值,另外,它还会给 <html>标签添加新的类(class),以标明浏览器对 HTML5、CSS3 特性的支持情况。以我的 Firefox 21 for Linux 为例,一个 HTML5 Boilerplate 页面的 <html> 标签在 Modernizr 作用后会变成如下:

<html class="js no-flexbox canvas canvastext webgl no-touch geolocation postmessage no-websqldatabase indexeddb hashchange history draganddrop websockets rgba hsla multiplebgs backgroundsize borderimage borderradius boxshadow textshadow opacity cssanimations csscolumns cssgradients no-cssreflections csstransforms csstransforms3d csstransitions fontface generatedcontent video audio localstorage sessionstorage webworkers applicationcache svg inlinesvg smil svgclippaths">

它表示我的浏览器支持 HTML5 的 geolocation、history,CSS3 的多背景图片等特性,一目了然。

这样,我们在使用 CSS3 时就可以做一定的降级,比如:

body {
    background: url(background-top.png) top left no-repeat;
}
.multiplebgs body {
    background: url(background-top.png) top left no-repeat,
    url(background-bottom.png) bottom left repeat-x;
}

早期的浏览器下,我们使用一张背景图片,而支持多背景图片的浏览器下,我们将使用两张背景图片。

但这只是 Modernizr 的简单应用,它还有复杂应用,比如 HTML5 特性:

if (Modernizr.canvas) {
  // 可以使用 canvas
} else {
  // 浏览器没有原生的 canvas 支持,做一定的降级处理,或是加载 polyfills
}

基本上所有 HTML5 特性都有相应的 Polyfills 进行处理,至于是否必要,那就看项目需要了:有时候,你可以,不一定代表你要。毕竟,在 IE6 上支持 Geolocation 这样的特性意义不大。

另外,Modernizr 脚本中已经添加 HTML5 浏览器支持脚本 html5shiv,我们只要引用 Moernizr.js 文件,IE9 以下的 IE 浏览器就支持 HTML5 添加的语义标签如 nav、section、article 等,也可以使用 CSS 对它们进行样式化。

时间: 2024-11-03 05:34:49

Modernizr 用法的相关文章

Modernizr.js介绍与使用

Modernizr帮助我们检测浏览器是否实现了某个feature,如果实现了那么开发人员就可以充分利用这个feature做一些工作,反之没有实现开发人员也好提供一个fallback.所以,我们要明白的是Modernizr只是帮我们检测feature是否被支持,它并不能够给浏览器添加那些本来不支持的feature. Modernizr在2010和2011年均赢得了 .net Award for Open Source App of the Year ,要知道它的竞争对手都是像Wordpress.D

MVC4 jquery 样式 主题 用法(案例)

MVC4已经自带了jquery,新建的项目,基本上什么都不用添加就可以运行,跑项目.(集成了那么多东西,jquery,modernizr,自带的默认权限,生成的模板,但是缺没有一个统一的文档或者什么去介绍已经集成的东西,怎么个用法 各种百科) 第一步: [项目]-[管理NuGet程序包] 点击更新 输入jquery ui 然后更新jquery ui插件到最新版本 第二步: 在项目中 [view]-[Shared]-[_Layout.cshtml] 公共界面 统一引用 方便以后修改. @Scrip

SVG的用法

转载于   http://www.webhek.com/post/svg.html <如何画出一条会动的线>这篇文章专门介绍了上面这SVG动画是如何简单的实现的. SVG是一种矢量图格式.SVG是Scalable Vector Graphics三个单词的首字母缩写.Adobe Illustrator是专门编辑.制作矢量图的软件工具.SVG是Adobe Illustrator的主要制作目标.你可以在轻松的网页上使用漂亮的SVG图,但SVG有很多的用法你可能还不知道. 观看演示 SVG有什么优势?

1:CSS中一些@规则的用法小结 2: @media用法详解

第一篇文章:@用法小结 第二篇文章:@media用法 第一篇文章:@用法小结 这篇文章主要介绍了CSS中一些@规则的用法小结,是CSS入门学习中的基础知识,需要的朋友可以参考下 at-rule是一个声明,为CSS提供执行或怎么表现的指令.每个声明以@开头,后紧跟一个可用的关键字,这个关键字充当一个标识符,用于表示CSS该做什么.这是一个通用的语法,尽管每个at-rule有其它语法变体.常规规则 常规规则遵循下面的语法: 复制代码 代码如下: @[KEYWORD] (RULE); @charset

video.js的简单用法

今天项目中需要跨浏览器地播放视频,在网上找了一下,找到了video.js,记录一下video.js的简单用法. ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 <html> <head> ... <!-- 引入vide

Modernizr.js入门指南(HTML5&amp;CSS3浏览器兼容插件)

HTML5 和 CSS3 的快速发展,给我们带来了极大的便利,比如从此再也不用花费大量的时间只是为了设计一个圆角的效果. 但是!我们不能像控制机器一样来控制所有的人都一夜之间升级到现代浏览器,因为那些 不够现代的浏览器 诞生之时,HTML5和CSS3尚未被正式推出. 于是,我们的问题来了:针对那些不支持新特性的浏览器而言,我们是直接放弃这些用户群呢,还是直接不用这些新特性,老老实实的用图片拼出圆角的特效? 我想,答案是显而易见的.我们不能放弃那些因为这样那样的原因没法升级他们的浏览器用户,但也不

js中获取时间new date()的用法

js中获取时间new date()的用法 获取时间:   var myDate = new Date();//获取系统当前时间 获取特定格式的时间: 1 myDate.getYear(); //获取当前年份(2位) 2 myDate.getFullYear(); //获取完整的年份(4位,1970-????) 3 myDate.getMonth(); //获取当前月份(0-11,0代表1月) 4 myDate.getDate(); //获取当前日(1-31) 5 myDate.getDay();

20.5 Shell脚本中的逻辑判断;20.6 文件目录属性判断;20.7 if特殊用法;20.8 20.9 cace判断(上下)

扩展: select用法 http://www.apelearn.com/bbs/thread-7950-1-1.html 20.5 Shell脚本中的逻辑判断 格式1:if 条件 ; then 语句; fi 1. 创建if1.sh测试脚本: [[email protected] ~]# vi if1.sh a=5,如果a大于3,满足这个条件,显示ok 添加内容: #!/bin/bash a=5 if [ $a -gt 3 ] then echo ok fi 2. 执行if1.sh脚本: [[e

20.1 Shell脚本介绍;20.2 Shell脚本结构和执行;20.3 date命令用法;20.4 Shell脚本中的变量

20.1 Shell脚本介绍 1. shell是一种脚本语言 aming_linux blog.lishiming.net 2. 可以使用逻辑判断.循环等语法 3. 可以自定义函数 4. shell是系统命令的集合 5. shell脚本可以实现自动化运维,能大大增加我们的运维效率 20.2 Shell脚本结构和执行 1. 开头(首行)需要加: #!/bin/bash 2. 以#开头的行作为解释说明: 3. 脚本的名字以.sh结尾,用于区分这是一个shell脚本 4. 执行.sh脚本方法有两种: