亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > HTML > 正文

使用Modernizr探測HTML5/CSS3新特性

2024-08-26 00:18:05
字體:
來源:轉載
供稿:網友

HTML5, CSS3以及相關技術(例如canvas和web sockets)帶來了非常有用的特性,可以讓我們的web程序提升一個新的level。這些新技術允許我們只用HTML,CSS和JavaScript就可以構建包括在平板和移動設備上能夠運行的多樣化表單頁面。HTML5雖然提供了很多新特性,但是如果我們不考慮舊版本的瀏覽器就是用這些新技術也不太現實,老版本瀏覽器已經使用了很多年,我們依然需要考慮這些版本的兼容性問題。本文要解決的問題就是:在我們使用HTML5/CSS3技術的時候,如何更好地處理不支持HTML5/CSS3特性的舊版本瀏覽器問題。


盡管我們可以自己寫代碼來判斷瀏覽器是否支持某些HTML5/CSS3特性,但是代碼都不是很簡單。例如:寫代碼判斷瀏覽器支付支持canvans,我們的代碼可能和下面的類似:

<script>    window.onload = function () {        if (canvasSupported()) {            alert('canvas supported');        }    };            function canvasSupported() {        var canvas = document.createElement('canvas');        return (canvas.getContext && canvas.getContext('2d'));    }</script>

如果要判斷是否支持本地存儲(local storage),代碼可能和下面的類似,但是很容易再Firefox下產生bug。

<script>    window.onload = function () {        if (localStorageSupported()) {            alert('local storage supported');        }    };    function localStorageSupported() {        try {            return ('localStorage' in window && window['localStorage'] != null);        }        catch(e) {}        return false;    }</script>

前面2個例子都是分別檢查一個特性,如果有很多HTML5/CSS3特性的話,我們不得不寫多份代碼來判斷,不過還算幸運的是這些代碼沒有依賴順序。Modernizr可以讓你用很少的代碼來實現上述復雜的功能,讓我們來看一下Modernizr的一些重要特性:

開始使用Modernizr

第一次我聽到Modernizr的時候,我以為它的意思是modernized,可以在舊版本瀏覽器上添加一些HTML5/CSS3的新特性。事實上,Modernizr不是干這個的,它是幫助我們提高開發實踐的,使用一個非常時髦的方法來幫助探測瀏覽器是否支持某種新特性,甚至可以加載額外的script腳本。如果你是一個web開發人員的話,那對你來說它就是一件很牛逼的兵器。

Modernizr官方站點:http://modernizr.com,2個類型的腳本你都可以使用(開發版和自定義的生產版本)。網站提供了一個自定義需求的工具來生成僅僅你需要的探測功能,而不是一個什么都可以探測的大而全的版本,就是說你可以讓你的腳本最小化。下圖是官方網站生成工具的界面,可以看到很多HTML5/CSS3和相關技術的探測功能都可以選擇上。

使用Modernizr探測HTML5/CSS3新特性

下載完你自定義的腳本以后,你就可以像引用普通js文件一樣引用它了,然后就可以用了。

<script src="Scripts/Modernizr.js" type="text/javascript"></script>

 

Modernizr和HTML元素

添加完Modernizr引用以后,它就立即生效了。運行的時候它會在html元素上添加一批CSS的class名稱,這些class名稱標記當前瀏覽器支持哪些特性和不支持哪些特性,支持的特性就直接顯示該天特性的名稱作為一個class(例如:canvas,websockets),不支持的特性顯示的class是“no-特性名稱”(例如:no-flexbox)。下面這段代碼是運行在Chrome下的效果:

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

下面這段代碼是運行在IE9下的效果:

<html class=" js no-flexbox 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 localstorage sessionstorage         no-webworkers no-applicationcache svg inlinesvg smil svgclippaths">

使用Modernizr,有可能會出現下面代碼的情況(添加no-js名稱到class里):

<html class="no-js">

你可以訪問(http://html5boilerplate.com)站點查看HTML5 Boilerplate相關的內容,或者(http://initializr.com)查看Initializr相關的內容,添加no-js class到html元素下,是告訴瀏覽器是否支持JavaScript,如果不支持就顯示no-js,如果支持就把no-js刪掉。非常爽,對吧?

結合HTML5/CSS3特性一起使用

你可以直接使用Modernizr在<html>元素里生成的class名稱,在你的css文件里定義相應的屬性以便支持當前瀏覽器。例如,下面的代碼可以屬性,在支持shadow陰影的瀏覽器顯示shadow,不支持的瀏覽器顯示標準的邊框:

.boxshadow #MyContainer {    border: none;    -webkit-box-shadow: #666 1px 1px 1px;    -moz-box-shadow: #666 1px 1px 1px;}    .no-boxshadow #MyContainer {    border: 2px solid black;}

因為如果瀏覽器支持box-shadows的話,Modernizr就會將boxshadow class添加到<html>元素,然后你可以將它管理到一個相應的div的id上。如果不支持,Modernizr就會將no-boxshadow class添加到<html>元素,這樣顯示的就是一個標準的邊框。這樣我們就可以很方便地在支持CSS3特性的瀏覽器上使用CSS3新功能,不支持的瀏覽器上繼續使用以前的方式。

Modernizr除了添加相應的class到<html>元素以外,還提供一個全局的Modernizr JavaScript對象,該對象提供了不同的屬性來表示某種新特性在當前瀏覽器下是否支持。例如,下面的代碼可以用于判斷瀏覽器是否支持canvas和local storag。對于多個開發人員在多版本瀏覽器下開發測試的時候很有好處的,大家可以統一代碼。

$(document).ready(function () {    if (Modernizr.canvas) {        //Add canvas code    }    if (Modernizr.localstorage) {        //Add local storage code    }});

全局的Modernizr對象也可以用來探測是否支持CSS3特性,下面的代碼用于測試是否支持border-radius 和CSS transforms:

$(document).ready(function () {    if (Modernizr.borderradius) {        $('#MyDiv').addClass('borderRadiusStyle');    }            if (Modernizr.csstransforms) {        $('#MyDiv').addClass('transformsStyle');    }});

其它的一些CSS3特性可以探測到結果,例如:opacity, rgba, text-shadow, CSS animations, CSS transitions, multiple backgrounds等等,Modernizr支持的完整的HTML5/CSS3可探測列表可以在如下http://www.modernizr.com/docs找到。

使用Modernizr加載Script腳本

在某些不支持新特性的瀏覽器上,Modernizr不僅僅提供了上述方式告訴你,也提供了load功能允許你加載一些shim/polyfill腳本來達到支持的目的(關于shim/polyfill的信息請訪問:https://github.com/Modernizr/Modernizr/wiki/HTML5-Cross-Browser-Polyfills)。Modernizr提供了一個腳本加載器來判斷一個功能,如果不支持就加載相應的腳本。單獨的腳本也可以在http://yepnopejs.com找到。

可以使用Modernizr的load()函數來動態加載腳本,該函數的test屬性是表明要測試是否支持的新特性,如果測試成功支持的話,就加載yep屬性設置的腳本,如果不支持就加載nope屬性設置的腳本,不管是否支持,both屬性里設置的腳本都會加載的。例子代碼如下:

Modernizr.load({    test: Modernizr.canvas,    yep:  'html5CanvasAvailable.js’,    nope: 'excanvas.js’,     both: 'myCustomScript.js' });

在該例子里,Modernizr會判斷當前瀏覽器是否支持canvas特性,如果支持,那就會加載html5CanvasAvailable.js和myCustomScript.js這兩個腳本,如果不支持,就會加載excanvas.js(用于IE9之前的版本)腳本文件以讓該瀏覽器支持canvas功能,然后再加載myCustomScript.js腳本。

因為Modernizr可以加載腳本,所以你還可以用于其它的用途,比如,如果你引用的第三方腳本(例如提供CDN服務的Google和Microsoft提供jquery的托管)加載失敗的情況下,可以加載備用的文件。下面的代碼是Modernizr提供的一個加載jquery的示例:

Modernizr.load([    {        load: '//ajax.googleapis.com/ajax/libs/jquery/1.6.4/jquery.js',        complete: function () {            if (!window.jQuery) {                Modernizr.load('js/libs/jquery-1.6.4.min.js');            }        }    },    {        // This will wait for the fallback to load and        // execute if it needs to.        load: 'needs-jQuery.js'    }]);

該代碼會首先從Google CDN加載jQuery文件,如果下載或加載失敗,complete函數就會執行,首先判斷jQeury對象是否存在,如果不存在,Modernizr就會加載定義好的本機js文件,如果連 complete里的文件都加載不成功,就會加載needs-jQuery.js文件。

總結:


如果你正在使用最新的HTML5/CSS3來構建你的程序,Modernizr絕對是一個必需的工具。使用它你可以節約很多代碼以及測試工作量,甚至可以對一些不支持新特性的瀏覽器通過額外加載腳本的形式來實現相應的新特性。

原文地址:http://weblogs.asp.net/dwahlin/archive/2011/11/16/detecting-html5-css3-features-using-modernizr.aspx

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
亚洲永久免费观看| 98精品国产高清在线xxxx天堂| 国产精品一区二区电影| 亚洲国产成人精品电影| 国产亚洲精品激情久久| www国产91| 国产精品扒开腿做爽爽爽视频| 午夜精品福利电影| 午夜剧场成人观在线视频免费观看| 久久久综合av| 国产在线高清精品| 在线精品国产欧美| 亚洲高清色综合| 国产午夜精品一区理论片飘花| 日韩一区二区在线视频| 国产精品国产三级国产专播精品人| 欧美性在线视频| 亚洲激情中文字幕| 欧美精品手机在线| 日韩av色综合| 久久在线免费视频| 国产精品精品一区二区三区午夜版| 92福利视频午夜1000合集在线观看| 欧美激情手机在线视频| 精品久久久国产精品999| 日韩乱码在线视频| 91精品视频观看| 国产区亚洲区欧美区| 日韩av电影在线免费播放| 亚洲欧美日韩天堂一区二区| 91免费在线视频| 亚洲免费电影一区| 国产一区二区丝袜高跟鞋图片| 成人免费高清完整版在线观看| 欧美老女人xx| 欧美一级片一区| 成人精品一区二区三区电影免费| 亚洲精品久久久久久久久久久| 久久久久久久久久久久久久久久久久av| 国产黑人绿帽在线第一区| 久久韩剧网电视剧| 亚洲成人av在线播放| 亚洲人av在线影院| 国产婷婷97碰碰久久人人蜜臀| 日韩中文字幕欧美| 国产婷婷97碰碰久久人人蜜臀| 亚洲午夜av电影| 在线观看国产精品91| 成人免费在线网址| 欧美黑人一级爽快片淫片高清| 欧美电影免费观看大全| 日韩在线免费观看视频| 久久精品视频中文字幕| 国产情人节一区| 久久五月情影视| 成人免费视频xnxx.com| 中文国产成人精品久久一| 97av在线播放| 一区三区二区视频| 亚洲最新中文字幕| 色噜噜狠狠狠综合曰曰曰88av| 亚洲人成77777在线观看网| 国产日韩欧美在线视频观看| 国产手机视频精品| 中文字幕亚洲字幕| 日韩精品免费在线播放| 欧美成在线观看| 欧美一区二区视频97| 亚洲欧美中文在线视频| 91tv亚洲精品香蕉国产一区7ujn| 久久手机精品视频| 成人国产在线激情| 97国产精品免费视频| 欧美日韩一区二区免费视频| 亚洲精品欧美一区二区三区| 亚洲成人动漫在线播放| 91麻豆桃色免费看| 亚洲欧洲一区二区三区久久| 精品国产一区二区在线| 中文字幕在线观看亚洲| 欧美在线欧美在线| 亚洲美女在线看| 日韩欧美高清在线视频| 国语对白做受69| 亚洲国产另类久久精品| 精品久久久久久久久久国产| 欧美激情一级精品国产| 日韩午夜在线视频| 国产精品久久久久久久久久ktv| 亚洲国产欧美久久| 亚洲精品国产精品国自产观看浪潮| 中文字幕精品久久| 色综合久久久久久中文网| 欧美电影免费观看高清完整| 欧美成人精品一区二区三区| 欧美二区乱c黑人| 亚洲精品xxxx| 成人网中文字幕| 亚洲国产高清自拍| 久久国产精品久久精品| 国产aⅴ夜夜欢一区二区三区| 成人免费福利在线| 国产精品久久久久久久电影| 日韩av不卡电影| 国产不卡一区二区在线播放| 国产精品av网站| 自拍偷拍亚洲一区| 精品国产一区二区三区久久狼5月| 98视频在线噜噜噜国产| 日韩人体视频一二区| 色偷偷av一区二区三区乱| 久久久亚洲影院你懂的| 亚洲国产日韩一区| 久久精品最新地址| 成人天堂噜噜噜| 精品国产精品三级精品av网址| 国产美女搞久久| 久久久久九九九九| 91精品久久久久久久久久久久久久| 国产午夜精品一区理论片飘花| 成人欧美一区二区三区在线| 欧美日韩国产页| 高清日韩电视剧大全免费播放在线观看| 久久综合久中文字幕青草| 欧美美女操人视频| 成人a免费视频| 欧美精品在线极品| 日韩一二三在线视频播| 日韩欧美一区视频| 国产精品aaaa| 91精品国产精品| 91免费国产网站| 亚洲精品久久久一区二区三区| 91精品国产高清久久久久久久久| 日韩av毛片网| 欧美一区二区三区免费视| 亚洲国产精品成人一区二区| 亚洲第一免费网站| 日韩av在线免费看| 欧美激情网友自拍| 国产日韩av在线| 一区二区三区视频观看| 欧美激情视频网址| 中文字幕免费精品一区高清| 激情成人在线视频| 久久精品国产久精国产思思| 亚洲男人天堂古典| 在线国产精品播放| 青青草一区二区| 久久久女人电视剧免费播放下载| 中文字幕久久久av一区| 欧美成aaa人片在线观看蜜臀| 北条麻妃一区二区在线观看| 亚洲最新av在线| 亚洲国产精品一区二区三区| 高清在线视频日韩欧美| 亚洲精品www久久久| 久久在线免费视频| 成人av.网址在线网站| 欧美精品videosex极品1| 国产精品第七影院| 北条麻妃在线一区二区| 欧美最近摘花xxxx摘花| 欧美国产视频日韩|