之前提到,Modernizr 是 HTML5 和 CSS3 的特性检测工具,这里简单介绍一下它的用法。最简单的用法是在页面的 <head> 中添加 Modernizr 的 JavaScript 文件:

<!doctype html>
<html>
<head>
<script src="modernizr-2.6.2.js"></script>
</head>
<body>
</body>
</html>

Modernizr 脚本执行后,你会发现页面类似下面的样子(以 IE9 为例):

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

可以看到,Modernizr 检测了数十个 HTML5 和 CSS3 特性之后,将结果记录在 html 标签的 class 属性中,其中带 no 前缀的表示浏览器不支持该特性,不带 no 前缀的表示浏览器支持该特性。这样,我们就可以根据 html 标签的这些 class 属性,在 CSS 文件中针对不同的特性应用不同的样式。例如 .no-touch #someid:hover #menu {display: block;}

Modernizr 脚本运行后也生成了一个 Modernizr 对象,以布尔值记录了上面所有这些特性。因此,我们就可以在 JavaScript 中简单地利用诸如 if (Modernizr.touch) {...} 这样的代码针对触屏设备作优化。

但使用 CSS 的样式限制和 JavaScript 的条件判断,还是有个缺点:我们需要将各种可能性对应的代码都包含在 CSS 和 JavaScript 文件中,这样文件就变得很臃肿。针对这个问题,Modernizr 中包含了 YepNope.js 这个条件加载器,可以针对不同的特性加载不同的 CSS 和 JavaScript 文件。例如:

Modernizr.load({
test: Modernizr.touch,
yep : ['touch.css', 'touch.js'],
nope: ['mouse.css', 'mouse.js'],
complete: function() {
doSomeThing();
}
});

或者我们对缺乏某功能的浏览器加载 Polyfill(填充)库:

Modernizr.load({
test: Modernizr.geolocation,
yep : 'geo.js',
nope: 'geo-polyfill.js'
});

参考资料:
[1] Modernizr: the feature detection library for HTML5/CSS3
[2] yepnope.js | A Conditional Loader For Your Polyfills!
[3] HTML5 Cross Browser Polyfills · Modernizr/Modernizr Wiki
[4] What is a Polyfill? - remy sharp’s b:log
[5] The Developer’s Guide To Writing Cross-Browser JavaScript Polyfills
[6] 图灵社区 : 阅读 : HTML5逸事:一袋“腻子粉”的故事

Modernizr 与 Polyfill的更多相关文章

  1. 一种基于ES5的JavaScript继承

    关于JavaScript继承,方式非常多,包含compile-to-javascript的语言TypeScript, CoffeeScript以及站点MDN, GitHub, Modernizr各种p ...

  2. 使用Modernizr探测HTML5/CSS3新特性(转载)

    转载地址:http://www.cnblogs.com/TomXu/archive/2011/11/18/detecting-html5-css3-features-using-modernizr.h ...

  3. [转]Modernizr的介绍和使用

    转载自:http://blog.chinaunix.net/uid-21633169-id-4286857.html 传统浏览器目前不会被完全取代,令你难以将最新的 CSS3 或 HTML5 功能嵌入 ...

  4. Modernizr的介绍和使用

    传统浏览器目前不会被完全取代,令你难以将最新的 CSS3 或 HTML5 功能嵌入你的网站. Modernizr 正是为解决这一难题应运而生,作为一个开源的 JavaScript 库,Moderniz ...

  5. 前端的瑞士军刀:Modernizr.js

    前言 Modernizr.js既能给老版本浏览器打补丁,又能保证新浏览器渐进增强的用户体验. 作用: 从实际操作来看,Modernizr默认做的事情很少,除了(在你选择的情况下)给不支持html5的标 ...

  6. 使用Modernizr探测HTML5/CSS3新特性

    [转] HTML5, CSS3以及相关技术(例如canvas和web sockets)带来了非常有用的特性,可以让我们的web程序提升一个新的level.这些新技术允许我们只用HTML,CSS和Jav ...

  7. 为 Html 5 和 CSS 3.0 而生——Modernizr的介绍和使用

    传统浏览器目前不会被完全取代,令你难以将最新的 CSS3 或 HTML5 功能嵌入你的网站. Modernizr 正是为解决这一难题应运而生,作为一个开源的 JavaScript 库,Moderniz ...

  8. 浏览器向下兼容之polyfill[阅后即瞎]

    我们入门JavaScript的时候都写过polyfill: 比如手写一个弹窗, 手动模拟实现一个表格, 这些魔力的对象都是浏览器原生支持的, 虽然当我成为JS专家之后再也没造过轮子, 但是最近才发现我 ...

  9. 腻子脚本polyfill

    腻子脚本 具体是指一段可以给老版本浏览器(ie9以前的版本)带来新特性的javascript脚本代码.如轻量级的脚本代码或Modernizr,Modernizr除了能让ie支持html5新元素之外,还 ...

随机推荐

  1. Android 内核初识(1)下载源码需求与教程

    官方文档: http://source.android.com/source/requirements.html  Requirements The Android build is routinel ...

  2. Windows 7/8 自带定时关机命令

    快捷键“Windows + R”,输入cmd打开cmd.exe程序,输入以下对应命令.   两种定时关机方式: 定时任务法 输入命令“at hh:mm shutdown -s”,Enter——添加了一 ...

  3. mysql系列命令解释

    mysqld - the MySQL server mysql - the MySQL command-line tool mysqlaccess - client for checking acce ...

  4. 三维软件转Unity的系统单位设置研究

    Unity的系统单位为米,其他3D软件的模型导入,而保持和Unity的比例一致是非常重要的,下面对各软件进行测试: ㈠. 3dsmax 转 Unity的比例为100:1:也就是说Unity单位是3ds ...

  5. UVa 1451 (数形结合 单调栈) Average

    题意: 给出一个01串,选一个长度至少为L的连续子串,使得串中数字的平均值最大. 分析: 能把这道题想到用数形结合,用斜率表示平均值,我觉得这个想法太“天马行空”了 首先预处理子串的前缀和sum,如果 ...

  6. 在SQL Server实现最短路径的搜索

    开始 这是去年的问题了,今天在整理邮件的时候才发现这个问题,感觉顶有意思的,特记录下来. 在表RelationGraph中,有三个字段(ID,Node,RelatedNode),其中Node和Rela ...

  7. Ajax时代 SQL注入依然是隐患

    许多网站程序在编写时,没有对用户输入数据的合法性进行判断,使应用程序存在安全隐患.用户可以提交一段数据库查询代码(一般是在浏览器地址栏进行,通过正常的www端口访问),根据程序返回的结果,获得某些想得 ...

  8. 创业实战go语言制作网站(转)

    简单介绍一下之前的整个职业生涯,挺典型的,工程师 –> 资深工程师 –> 架构师 –> 项目经理 –> 部门经理,可以说,产品研发过程中的所有角色我都走了一遍,任职的公司也越来 ...

  9. 多线程程序设计学习(11)Two-phapse-Termination pattern

    Two-phapse-Termination[A终止B线程] 一:Two-phapse-Termination的参与者--->A线程--->B线程 二:Two-phapse-Termina ...

  10. web框架之Spring-MVC环境搭建

    spring框架配置 1.web.xml配置 <?xml version="1.0" encoding="UTF-8"?> <web-app ...