modernizr.js的介绍和使用
原文鏈接:https://www.cnblogs.com/-simon/p/5907053.html
Modernizr幫助我們檢測瀏覽器是否實現了某個feature,如果實現了那么開發人員就可以充分利用這個feature做一些工作,反之沒有實現開發人員也好提供一個fallback。所以,我們要明白的是Modernizr只是幫我們檢測feature是否被支持,它并不能夠給瀏覽器添加那些本來不支持的feature。
Modernizr在2010和2011年均贏得了?.net Award for Open Source App of the Year?,要知道它的競爭對手都是像Wordpress、Drupal這些重量級選手。同時在2011年,它的首席開發者?Paul Irish?贏得了Developer of the Year大獎。
其實,這個類庫使用非常簡單,簡單到你把?官方文檔?(單頁)從頭到尾看一遍就完全了解它的使用方法了。接下來,我做一點簡單的介紹。
Setting-Up Modernizr
在官方網站(?http://modernizr.com?)上我們可以看到有兩個下載選項,Development和Production版本。其實它們都會導向同一個下載頁面,只不過前者會幫我們把選項預先勾上而已。
通常我們需要檢測的新特性基本都囊括在了這些選項中,我們可以根據自己需要,定制化的選擇需要檢測的feature。
下載完后我們就可以在?<head>?中引用這個類庫。由于Modernizr幫我們內置了?html5shiv?類庫,所以我們必須在?<body>?加載之前引用這個類庫。當然你如果針對的是IE9+的瀏覽器,那么大可以在頁面元素加載完后再引入,但這樣就會有?FOUC?這樣極不友好的效果出現。
最后,我們需要在?<html>?標簽中加入?no-js?類,以免瀏覽器禁用了JavaScript。
Working With Classes
使用了Modernizr后,頁面中渲染后的html代碼是這個樣子的:
其中有很多以no作為前綴的class,當然大部分都沒有這個前綴。事實上,如果一個類名以no作為前綴,比如?no-touch?這表示瀏覽器不支持touch特性,這也是最新版本的Chrome不支持的兩個feature之一:
Modernizr有一個?test頁面?,可以檢測當前瀏覽器支持的特性。Chrome目前是對HTML5和CSS3新特性支持最好的瀏覽器,沒有之一。
言歸正傳。當我們引入了Modernizr.js類庫后,?<html>?標簽的class屬性就會被相應的賦值,以顯示瀏覽器是否支持某類CSS屬性。比如在IE6下面,不支持boderradius特性,那么在?<html>?標簽中就會出現?no-borderradius?類,我們可以做一些fallback的工作:
.no-borradius div{/*-- do some hacks here --*/ }Browser Feature Test
檢測瀏覽器是否支持某項特性,我們可以用這種語法:
Modernizr.featuretodetectModernizr對象是類庫創建的全局變量,我們可以在頁面的任意位置使用。比如我們需要檢測瀏覽器是否支持WebGL,可以這么做:
if(Modernizr.webgl){/* support WebGL */ } else{/* not support WebGL */ }Modernizr.load()
基于?YepNope.js?,Modernizr.load()根據一些條件判斷來動態選擇加載CSS和JavaScript,這無疑對避免不必要的資源加載有極大的幫助。
你可以在這里(?HTML5 Cross Browser Polyfills?)找到幾乎所有新特性的fallback解決方案。
Modernizr.load(test: Modernizr.webgl,yep : 'three.js',nope: 'jebgl.js' );當瀏覽器支持WebGL的時候,就引入?three.js?這個類庫做一些3D效果。瀏覽器不支持WebGL的時候可以使用?jebgl.js?做一些fallback操作。
還有一個比較酷的例子來自官方文檔。我們在用jQuery類庫的時候,通常都是這種寫法:
<script src="//ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.js"></script> <script>window.jQuery || document.write('<script src="js/libs/jquery-1.7.1.min.js">\x3C/script>')</script>現在用Modernizr.load()可以這么寫:
Modernizr.load([{load: '//ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.js',complete: function () {if ( !window.jQuery ) {Modernizr.load('js/libs/jquery-1.7.1.min.js'); } } }, { // This will wait for the fallback to load and // execute if it needs to. load: 'needs-jQuery.js' } ]);Summary
Modernizr為我們做了最復雜的一步,我們只需要像模塊一樣將代碼組裝起來。當然,Modernizr還有一些其他的用法,比如Modernizr.mq()方法用來檢測media query,這對Responsive Design可以幫上很多忙。諸如這些API在官方文檔中都有涉及,建議在使用的時候仔細了解一下即可。
轉載于:https://www.cnblogs.com/zr123/p/8743506.html
總結
以上是生活随笔為你收集整理的modernizr.js的介绍和使用的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: MVC控制器传递多个实体类集合到视图的方
- 下一篇: UVa 10603 Fill (BFS+