成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

用Modernizr探測HTML 5/CSS3新特性

開發 前端
本文要解決的問題就是:在我們使用HTML5/CSS3技術的時候,如何更好地處理不支持HTML5/CSS3特性的舊版本瀏覽器問題。

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

51CTO推薦專題:HTML 5 下一代Web開發標準詳解

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

  1. <script> 
  2.     window.onload = function () {  
  3.         if (canvasSupported()) {  
  4.             alert('canvas supported');  
  5.         }  
  6.     };  
  7.           
  8.     function canvasSupported() {  
  9.         var canvas = document.createElement('canvas');  
  10.         return (canvas.getContext && canvas.getContext('2d'));  
  11.     }  
  12. </script> 

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

  1. <script> 
  2.     window.onload = function () {  
  3.         if (localStorageSupported()) {  
  4.             alert('local storage supported');  
  5.         }  
  6.     };  
  7.  
  8.     function localStorageSupported() {  
  9.         try {  
  10.             return ('localStorage' in window && window['localStorage'] != null);  
  11.         }  
  12.         catch(e) {}  
  13.         return false;  
  14.     }  
  15. </script> 

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

開始使用Modernizr

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

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

 

 

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

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

Modernizr和HTML元素

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

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

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

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

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

  1. <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在元素里生成的class名稱,在你的css文件里定義相應的屬性以便支持當前瀏覽器。例如,下面的代碼可以屬性,在支持shadow陰影的瀏覽器顯示shadow,不支持的瀏覽器顯示標準的邊框:

  1. .boxshadow #MyContainer {  
  2.     border: none;  
  3.     -webkit-box-shadow: #666 1px 1px 1px;  
  4.     -moz-box-shadow: #666 1px 1px 1px;  
  5. }  
  6.       
  7. .no-boxshadow #MyContainer {  
  8.     border: 2px solid black;  

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

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

  1. $(document).ready(function () {  
  2.     if (Modernizr.canvas) {  
  3.         //Add canvas code  
  4.     }  
  5.  
  6.     if (Modernizr.localstorage) {  
  7.         //Add local storage code  
  8.     }  
  9. }); 

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

  1. $(document).ready(function () {  
  2.     if (Modernizr.borderradius) {  
  3.         $('#MyDiv').addClass('borderRadiusStyle');  
  4.     }  
  5.           
  6.     if (Modernizr.csstransforms) {  
  7.         $('#MyDiv').addClass('transformsStyle');  
  8.     }  
  9. }); 

其它的一些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屬性里設置的腳本都會加載的。例子代碼如下:

  1. Modernizr.load({  
  2.     test: Modernizr.canvas,  
  3.     yep:  'html5CanvasAvailable.js’,  
  4.     nope: 'excanvas.js’,   
  5.     both: 'myCustomScript.js'   
  6. }); 

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

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

  1. Modernizr.load([  
  2.     {  
  3.         load: '//ajax.googleapis.com/ajax/libs/jquery/1.6.4/jquery.js',  
  4.         complete: function () {  
  5.             if (!window.jQuery) {  
  6.                 Modernizr.load('js/libs/jquery-1.6.4.min.js');  
  7.             }  
  8.         }  
  9.     },  
  10.     {  
  11.         // This will wait for the fallback to load and  
  12.         // execute if it needs to.  
  13.         load: 'needs-jQuery.js'  
  14.     }  
  15. ]); 

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

總結:

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

原文:http://www.cnblogs.com/TomXu/archive/2011/11/18/detecting-html5-css3-features-using-modernizr.html

【編輯推薦】

  1. 如何使用HTML 5創建在線精美簡歷
  2. HTML 5新特性Canvas入門秘籍
  3. 使用HTML 5和Javascript設計繪圖程序
  4. 最好的HTML 5編碼教程和參考手冊分享
  5. 10個讓你忘記Flash的HTML 5應用演示
責任編輯:陳貽新 來源: 湯姆大叔的博客
相關推薦

2011-03-22 08:54:02

HTML 5CSS3JavaScript

2011-11-25 13:18:40

HTML 5

2014-12-03 10:21:50

HTML5

2023-04-14 16:45:21

CSS前端CSS3

2012-05-11 09:37:34

HTML5

2012-05-24 11:03:55

HTML5

2011-06-24 13:58:06

CSS3HTML5

2011-08-30 09:07:30

HTML 5

2011-08-30 16:39:34

HTML 5

2012-05-30 09:22:56

Hybrid App助HTML5JavaScript

2012-05-25 10:31:44

HTML5

2011-07-15 09:10:44

HTML 5CSS3

2011-11-17 09:24:27

HTML 5

2013-07-09 09:24:29

響應式HTML5CSS3

2010-03-22 08:56:12

2011-12-16 11:11:36

HTML 5

2013-03-04 14:13:13

HTML5CSS3響應式

2012-02-29 15:46:48

HTML 5

2011-11-11 10:01:37

HTML 5

2010-05-05 17:23:30

OperaCTO
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 亚洲精品一区二区三区蜜桃久 | 免费av在线| 日日干日日操 | 亚洲在线成人 | 亚洲欧美日韩精品 | 中文字幕一区二区三 | 欧美精品乱码99久久影院 | 羞羞的视频网站 | 色男人的天堂 | 婷婷开心激情综合五月天 | 亚洲福利电影网 | 国产亚洲精品久久情网 | 成人国产精品 | 人人擦人人 | 亚洲精品电影网在线观看 | 91新视频| 久久久999免费视频 999久久久久久久久6666 | 免费精品 | 久久精品国产一区二区电影 | 国产免费观看久久黄av片涩av | 日韩毛片播放 | 日本三级在线视频 | 欧美一区二不卡视频 | 日韩在线播放av | 久久久久久久电影 | 日韩欧美一区二区三区四区 | 免费成人高清在线视频 | 极品粉嫩国产48尤物在线播放 | 久草新在线 | 国家aaa的一级看片 h片在线看 | 久久久国产精品网站 | h片在线免费看 | 男人的天堂在线视频 | 欧美4p| 99福利视频| 精品国产免费一区二区三区五区 | 超碰免费在| 日本天堂一区 | 亚洲日本欧美 | 欧美精品一区二区三区在线播放 | 日韩成人精品一区二区三区 |