• 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 对它们进行样式化。

  • 相关阅读:
    微信多业务
    jps命令
    三白话经典算法系列 Shell排序实现
    无法识别的属性“targetFramework”。请注意,属性名是大写和小写。错误的解决方案
    Timus 1777. Anindilyakwa 奇怪的问题计数
    tokumx经营报表
    Quartz CronTrigger应用
    HDU 3681 BFS&amp;像缩进DP&amp;二分法
    01背包问题
    Web模板
  • 原文地址:https://www.cnblogs.com/stevenx1987/p/4176285.html
Copyright © 2020-2023  润新知