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

首頁 > 編程 > HTML > 正文

Modernizr:HTML5和CSS3的開發利器

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

Modernizr:HTML5和CSS3的開發利器

隨著HTML5和CSS3的飛速發展,越來越多語義化的標簽和炫酷的特性被應用到web應用開發中來,各大瀏覽器廠商紛紛開始支持這些新特性,web開發人員也都興趣十足地試用這些新特性開發出更絢麗有趣的應用,但是各大瀏覽器對這些新特性參差不齊地支持(尤其是令人頭疼的IE)所帶來的版本兼容性問題始終都是縈繞在開發人員心頭的噩夢。傳統的使用習慣使得我們很難摒棄老版本瀏覽器,開發人員只能選擇令人厭煩的手工測試,測試,再測試。

為了解決這一難題,Modernizr應運而生了。它的名字聽起來有點像Modernize, 確實,該名字起源于使得開發體驗能夠更現代化的目的,但它并非試圖使舊的瀏覽器現代化,也就是使它支持這些新特性(盡管你確實可以通過添加shim/polyfill腳本來讓瀏覽器支持某些不支持的新特性,后面會介紹)。

Modernizr是一個檢測瀏覽器對HTML5和CSS3特性支持的開源的js庫,著名的HTML5/CSS3瀏覽器兼容性網站FindmeByIP就是基于該框架實現的。我們能夠利用它來檢測瀏覽器是否支持某種新特性,甚至可以額外加載script腳本,滿足你根據不同的情況動態加載不同的js文件來減少下載量提高性能的需求。

Modernizr提供development和production兩個版本,development版本包含了對所有HTML5和CSS3新特性的檢測,適用于學習和測試,對于剛開始使用Modernizr的新手來說,bella建議你使用這個版本。當你熟悉了Modernizr的工作原理后,你就可以使用production這個自定義版本,你可以只下載任意數量的你需要檢測的特性從而大大減小下載量,這在某種程度上是能小幅提高你程序的性能的。你可以在http://modernizr.com/download/上下載這兩個版本,點擊該頁面上的development version鏈接,就可以下載development版,或者,你已經看到了如下的特性顯示頁面

Modernizr:HTML5和CSS3的開發利器

你可以勾選任意你想要測試的HTML5或CSS3特性,但是默認情形下,Extra分類將會選中如下三項:

a) HTML5 Shiv v3.6:它添加了一個腳本— HTML5 shim 它會迫使迫使 IE6-8 正確地設計并打印 HTML5 元素。如果你打算使用新的 HTML5 語義標簽,例如 <header>、<footer>、 <nav>、<section>、<article>等等,那么你需要選這個選項。

b) Modernizr.load(yepnope.js):它添加了一個不包含在 development 版本中的可選擇的腳本加載器。它增加了3KB 的下載量,所以如果你不需要它,你可以放棄選擇它。

c) Add CSS Classes: 它將 Modernizr 類添加到開始的標簽。如果你想檢測對 CSS3 功能支持,那么你必須選擇這個選項。

Modernizr的使用方法很簡單,當你下載了如development版本后只需在頁面中引入js庫文件即可,如:

1 <script type="”text/javascript”" src="“js/modernizr.js”"></script>

添加完Modernizr引用后,js程序運行的時候它會在html元素上添加一批CSS的class名稱,這些class名稱標記當前瀏覽器支持哪些特性和不支持哪些特性,如果支持會顯示相應的特性名,不支持的話就顯示no-特性名。例如,如果檢測的瀏覽器支持boxshadow這個CSS3屬性,Modernizr就會在標簽上添加boxshadow類,否則,就會添加no-boxshadow類。下圖顯示的是在chrome 23.0.1271.64版本上的HTML5和CSS3新特性支持情況。

Modernizr:HTML5和CSS3的開發利器

然后,你只需要在你的CSS樣式表中定義相應的樣式信息即可,你可以像下面這樣定義:

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

由于瀏覽器會忽略不支持的CSS3特性,如果當前的瀏覽器版本不支持boxshadow屬性,它會忽略掉boxshadow類,轉而引用no-boxshadow類中定義的樣式,省去了你在js程序中檢測瀏覽器名稱的麻煩邏輯。

當然,當你的應用場景需要你在程序中判斷是否支持某種新特性而給出不同的處理邏輯時,你也可以利用Modernizr很容易地進行判斷,此時,你需要用到Modernizr創建的一個命名為”Modernizr”的全局對象,其內容是為每一個檢測完的特性給出的布爾值結果所組成的列表,如果瀏覽器支持boxShadow屬性,那么Modernizr.boxShadow的值就是true,否則為false,所以引入庫文件后,你也可以使用此種方法來檢測瀏覽器對該特性的支持情況。這個js對象針對某些功能還包含了更為詳細的信息,如”Modernizr.video.h264”會告訴你瀏覽器是否支持這個特殊的編解碼器,”Modernizr.inputtypes.search”會告訴你當前瀏覽器是否支持新的search input類型。

此外,如果Modernizr中并不包含你需要檢測的特性,你可以調用Modernizr封裝的addTest函數來測試,針對不同的HTML5和CSS3特性,我們可以在github(由于某種原因,Modernizr被封,該項目現托管在github上)上找到很多已經寫好的addTest函數。我們還是一起來看一個簡單的例子,如果你想測試瀏覽器是否支持getusermedia這個API(WebRTC新技術中的API),你可以編寫下面這樣的addTest函數來測試:

1 Modernizr.addTest('getusermedia', !!Modernizr.prefixed('getUserMedia', navigator));

相信簡單的介紹之后,你已經初步體會到了Modernizr能為開發帶來的便利之處了。了解了Modernizr的功能和如何使用Modernizr后,看看它的源碼熟悉它的實現原理同樣能學習到不少新知識。Bella在這方面雖然是菜鳥一個,但是還是跟大家分享一點看源碼的心得。

前面bella提到過Modernizr這個全局對象,具體它在Modernizr里是怎樣創建的呢?我們來看下面源碼:

1 window.Modernizr = (function( window, document, undefined) {
2   var ...;
3   Modernizr = {};
4   ...
5   return Modernizr;
6 })(thisthis.document);

這部分代碼用異步函數產生了一個命名空間(雖然js中并沒有真正意義上的命名空間),函數返回了一個Modernizr對象,而這個對象被分配到了window.Mordernizr下,這樣,其他的js程序就可以直接使用window.Modernizr或Modernizr對象。函數被調用時傳入的參數this指的是函數執行的上下文環境,也即window這個全局對象。

Modernizr是如何測試對CSS3新特性的支持程度的呢?原來Modernizr會先創建一個DOM對象,然后利用這個對象下的style屬性來測試是否支持各CSS3新特性。代碼如下:

1 var mod = 'modernizr',
2     modElem = document.createElement(mod),
3     mStyle = modElem.style;

對瀏覽器而言,無論它是否能夠識別我們新創建的html標簽,我們都可以給它設定樣式,所以我們可以給這里新創建的標簽設置樣式。假設我們想測試瀏覽器是否支持CSS中用hsla來定義顏色,我們可以先寫一個應用了hsla屬性的樣式放到標簽下,然后檢查樣式的值是否含有hsla的字符串,如果瀏覽器不支持,就不會有hsla字符串(因為將應用了hsla屬性的樣式放到modernizr標簽下的動作根本就不會生效)。我們可以編寫如下代碼:

1 tests['hsla'] = function() {
2   setCss(‘background-color:hsla(120,40%,100%,.5)’);
3   return contains(mStyle.backgroundColor, 'rgba') ||
4   contains(mStyle.backgroundColor, 'hsla');
5 };

這里由于有些瀏覽器會將hsla的表示法轉成rgba,所以同時檢查是否有rgba這個字符串。

而對于帶有供應商前綴的CSS屬性,我們還需給出不同的處理?;氐絙oxShadow屬性上,Modernizr會去測試上面創建的mStyle變量下是否有boxShadow、WebkitBoxShadow、MozBoxShadow、OBoxShadow、msBoxShadow或KhtmlBoxShadow屬性,如果有則表示瀏覽器支持該屬性。這里主要用到了兩個Modernizr封裝的函數,一個是testProp(),一個是testAllProps()。Modernizr.testProp(str)會返回一個給定的樣式屬性是否能被識別,而Modernizr.testAllProps(str)會返回一個給定的樣式屬性,或者是任意帶有供應商前綴的樣式屬性是否能被識別。

有關更多的源碼知識,等bella以后有更深入的研究后再跟大家介紹吧。bella相信如果你熟悉了Modernizr的原理和使用方法,它一定能夠幫助你提高開發效率。

最后,bella簡單總結了一些可供大家學習Modernizr的資料:

1. Modernizr官網: http://modernizr.com/docs/ 你可以在上面學習到Modernizr知識,源碼和下載Modernizr。

2. Modernizr Test Suite網址:http://modernizr.github.com/Modernizr/test/index.html 你可以在上面查詢到各瀏覽器對HTML5和CSS3特性支持情況,查詢方法:

點擊該頁面下方的Show the Ref Tests from Caniuse and Modernizr,然后任意單擊一個測試的HTML5或CSS3特性的Table鏈接,即可看到各瀏覽器支持情況。

3. shim/polyfill腳本的相關信息: https://github.com/Modernizr/Modernizr/wiki/HTML5-Cross-Browser-Polyfills

4. 各種檢測HTML5和CSS3新特性的addTest函數下載地址:

https://github.com/Modernizr/Modernizr/tree/master/feature-detects

 

本文出自Tencent Wuhan Blog,轉載時請注明出處


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
久久精品亚洲热| 日韩69视频在线观看| 亚洲色图在线观看| 成人黄色av免费在线观看| 日韩毛片在线看| 国产精品一区二区在线| 欧美第一黄网免费网站| 欧美精品久久久久a| 国产伦精品免费视频| 亚洲国产成人精品电影| 欧美成aaa人片在线观看蜜臀| 日韩暖暖在线视频| 欧美日韩国产中文字幕| 国产成人欧美在线观看| 午夜精品三级视频福利| 亚洲免费伊人电影在线观看av| 国产亚洲精品成人av久久ww| 中文字幕亚洲二区| 亚洲国产高清自拍| 欧美激情女人20p| 日韩美女av在线免费观看| 亚洲www视频| 国产一区二区三区在线| 亚洲欧美在线一区二区| 欧美一区二区三区精品电影| 日韩成人在线视频| 亚洲精选中文字幕| 欧美精品激情视频| 2019中文字幕在线| 欧美又大又粗又长| 国产69精品久久久| 欧美老女人www| 在线免费观看羞羞视频一区二区| 一个人看的www久久| 久久久久久成人精品| 欧美专区在线观看| 尤物yw午夜国产精品视频| 51色欧美片视频在线观看| 日韩在线观看免费网站| 中文字幕免费精品一区| 国产综合福利在线| 成人网欧美在线视频| 久久久精品美女| 亚洲一区二区三区四区视频| 91久久精品国产91久久性色| 国产精品久久电影观看| 国产亚洲成av人片在线观看桃| 久久亚洲精品一区二区| 97国产精品视频| 欧美日本国产在线| 国产欧美亚洲视频| 日本精品视频在线| 隔壁老王国产在线精品| 亚洲欧美日韩在线一区| 欧美日韩在线影院| 久热精品视频在线观看一区| 亚洲精品久久久久国产| 神马久久桃色视频| 久久综合免费视频| 日韩av在线导航| 国产精品旅馆在线| 高跟丝袜欧美一区| 亚洲午夜女主播在线直播| 亚洲美女www午夜| 中文字幕亚洲综合| www.欧美免费| 日韩在线视频网| 欧美多人乱p欧美4p久久| 国产97在线播放| 亚洲视频999| 久久精品人人爽| 日韩精品极品视频免费观看| 欧美日韩亚洲激情| 91精品在线播放| 国产极品jizzhd欧美| 国产精品高潮呻吟久久av黑人| 国产成人精品视频| 亚洲精品一区久久久久久| 国产精品美女久久久久久免费| 国产伦精品免费视频| 欧美富婆性猛交| 亚洲最大福利视频网| 精品成人乱色一区二区| 国产精品网站入口| 亚洲精选中文字幕| 九九热这里只有精品免费看| 欧美亚洲在线观看| 久久综合国产精品台湾中文娱乐网| 亚洲精品免费av| 亚洲男人天堂2023| 九九精品视频在线| 久久精品亚洲国产| 亚洲欧洲第一视频| 国产精品人人做人人爽| 亚洲欧美综合精品久久成人| 色综合久久久888| 欧美精品videofree1080p| 欧美大尺度在线观看| 久久免费国产精品1| 色av吧综合网| 欧美大片大片在线播放| 亚洲精品少妇网址| 97av在线视频| 久久久精品国产| 国产伦精品一区二区三区精品视频| 日韩亚洲成人av在线| 97精品久久久中文字幕免费| 亚洲自拍偷拍视频| 欧美精品videos性欧美| 亚洲精品视频中文字幕| 久久欧美在线电影| 欧美日韩xxx| 国产精品激情av电影在线观看| wwwwwwww亚洲| 色综合久久精品亚洲国产| 国产亚洲综合久久| 成人黄色av播放免费| 日韩av免费在线| 亚洲美女www午夜| 日韩欧美国产黄色| 成人网在线免费看| 国产v综合v亚洲欧美久久| 国产成人综合av| 91精品免费视频| 亚洲最新av在线| 亚洲国产精品va在线| 萌白酱国产一区二区| 日韩精品在线视频| 亚洲成人xxx| 国产精品网红福利| 欧美最猛性xxxxx(亚洲精品)| 亚洲一区亚洲二区亚洲三区| www.久久久久久.com| xxxxx91麻豆| 91精品在线国产| 亚洲第一中文字幕| 91av在线网站| 亚洲黄页视频免费观看| 欧美精品videos性欧美| 亚洲人成77777在线观看网| 国产欧美精品久久久| 国产视频在线一区二区| 欧美精品在线观看91| 日韩成人在线视频网站| 亚洲精品少妇网址| 国产日韩换脸av一区在线观看| 国产视频999| 国产欧美婷婷中文| 91wwwcom在线观看| 亚洲黄色www网站| 午夜精品视频在线| 成人精品网站在线观看| 欧美午夜激情小视频| 5252色成人免费视频| 欧美电影免费在线观看| 亚洲人成网7777777国产| 久久亚洲精品成人| 亚洲性猛交xxxxwww| 欧美尺度大的性做爰视频| 红桃av永久久久| 视频在线一区二区| 国产精品美女主播| 亚洲午夜精品久久久久久性色| 欧美在线一级va免费观看|