免费视频淫片aa毛片_日韩高清在线亚洲专区vr_日韩大片免费观看视频播放_亚洲欧美国产精品完整版

打開(kāi)APP
userphoto
未登錄

開(kāi)通VIP,暢享免費(fèi)電子書(shū)等14項(xiàng)超值服

開(kāi)通VIP
使用Modernizr 檢測(cè)HTML5和CSS3瀏覽器支持功能

傳統(tǒng)瀏覽器目前不會(huì)被完全取代,令你難以將最新的 CSS3 或 HTML5 功能嵌入你的網(wǎng)站。 Modernizr 正是為解決這一難題應(yīng)運(yùn)而生,作為一個(gè)開(kāi)源的 JavaScript 庫(kù),Modernizr 檢測(cè)瀏覽器對(duì) CSS3 或 HTML5 功能支持情況。 Modernizr 并非試圖添加老版本瀏覽器不支持的功能,而是令你通過(guò)創(chuàng)建可選風(fēng)格配置修改頁(yè)面設(shè)計(jì)。 它也可以通過(guò)加載定制的腳本來(lái)模擬老版本瀏覽器不支持的功能。

Modernizr 簡(jiǎn)單易用,但不是萬(wàn)能的。 成功使用 Modernizr 很大程度上取決于你的 CSS 和 JavaScript 技能。 通過(guò)本指南,你可以了解如何為不支持多欄或投影的瀏覽器設(shè)置可選風(fēng)格。 此外,你還可以了解如何讓老版本瀏覽器對(duì)使用最新 HTML5 要求(required)屬性的表單進(jìn)行驗(yàn)證,以及如何根據(jù)瀏覽器的功能有選擇地加載腳本文件。

什么是Modernizr?

Modernizr 是一個(gè)用來(lái)檢測(cè)瀏覽器功能支持情況的 JavaScript 庫(kù)。 目前,通過(guò)檢驗(yàn)瀏覽器對(duì)一系列測(cè)試的處理情況,Modernizr 可以檢測(cè)18項(xiàng) CSS3 功能以及40多項(xiàng)關(guān)于HTML5 的功能。 它比傳統(tǒng)檢測(cè)瀏覽器名稱(chēng)(瀏覽器嗅探)的方式更為可靠。 一整套測(cè)試的執(zhí)行時(shí)間僅需幾微秒。 此外,Modernizr 網(wǎng)站通過(guò)定制腳本只對(duì)你感興趣的元素進(jìn)行檢測(cè),從而實(shí)現(xiàn)效率優(yōu)化。

當(dāng)使用 Modernizr 檢測(cè) CSS3 支持情況時(shí),你無(wú)需具備任何 JavaScript 的知識(shí)。 你僅需在網(wǎng)頁(yè)中插入文件,它隨即根據(jù)瀏覽器的功能情況在頁(yè)面的<html>標(biāo)簽上添加一組類(lèi)。 相應(yīng)類(lèi)的名稱(chēng)已經(jīng)符合標(biāo)準(zhǔn)化的要求并淺顯易懂。 例如,如果瀏覽器支持 box-shadow 屬性,則需要添加相應(yīng)的 boxshadow 類(lèi);否則,添加一個(gè) no-boxshadow類(lèi)即可。 你所要做的一切只不過(guò)是創(chuàng)建一個(gè)使用這些類(lèi)的式樣表,以便為相應(yīng)瀏覽器提供合適的式樣。

Modernizr 可輕松實(shí)現(xiàn) JavaScript 解決方案,即人們熟知的 polyfills——它模擬HTML5 相關(guān)功能和技術(shù),如地理定位。 然而,你的確需要對(duì) JavaScript 有基本了解以便使用這些功能和技術(shù)。 術(shù)語(yǔ)polyfill 來(lái)源于一種填補(bǔ)裂縫的黏土的英國(guó)品牌Polyfilla(即美國(guó)人熟知的填泥料)。 這里,polyfill 用來(lái)填補(bǔ)瀏覽器功能上的漏洞。 有時(shí),Modernizr 可無(wú)縫地執(zhí)行這項(xiàng)任務(wù)。 但本質(zhì)上,這只是一種修補(bǔ)工作,所以,不能依賴(lài)它產(chǎn)生無(wú)漏洞瀏覽器所實(shí)現(xiàn)的完全相同結(jié)果。

下載 Modernizr

與其它 JavaScript 庫(kù)相同的是,Modernizr 可提供 development 和 production 版本。 與大多數(shù)庫(kù)相比,唯一的不同之處是,空格和注釋已經(jīng)從 production 版本中刪除了,這樣可以減少下載量的大小。 Modernizr 采取了不同的方法。 development 版本在某種意義上可稱(chēng)為是“廚房中的水槽”—它幾乎包含了一切。 production 版本只包含了你選擇的那些元素,這樣能夠顯著降低下載量。 在很多情況下,production 版本可以縮小為development版本大小的二十分之一。

當(dāng)使用 Modernizr 進(jìn)行測(cè)試時(shí),我建議你下載 development 版本。 一旦你掌握了它是如何運(yùn)作的以及它的能力,你就可以下載一個(gè)自定義 production 版本以便在你的網(wǎng)站進(jìn)行部署。

本教程的示例文件包含的是 Modernizr的development 2.0.6 版本,但是我建議你從 Modernizr 站點(diǎn)上用最新更新的版本替代它。

  1. 下載本文附帶的示例文件(使用modernizr.zip)并且在 Dreamweaver 站點(diǎn)內(nèi)將它們解壓到一個(gè)方便的位置,或者是為本教程創(chuàng)建一個(gè)新站點(diǎn)。
  2. 訪(fǎng)問(wèn) Moderniz 網(wǎng)站,其地址為 http://www.modernizr.com/ 。
  3. 在 Download Modernizr 2 部分中,單擊 Development 按鈕(參見(jiàn)圖1)。Modernizr 的 development 版本就會(huì)直接在你的瀏覽器窗口上打開(kāi)。
圖1. 選中development版本以便進(jìn)行Modernizr測(cè)試

注: 如果你錯(cuò)誤地單擊了主導(dǎo)航菜單中的 Download 鏈接,那么你將看到大量的復(fù)選框出現(xiàn),要求你去選擇你想要的工具。 這是為定制的 production 版本所設(shè)置。 單擊面板頂部的 Development 版本的鏈接,或者單擊瀏覽器的 Back 按鈕返回主頁(yè)并選中圖1所示的 Development 按鈕。

  1. 在瀏覽器的主菜單上,選中 Save Page As,并在示例文件的js文件夾里將它另存為 modernizr.js。如果有必要的話(huà)可以替換已有的文件。

使用 Modernizr 檢測(cè) CSS 功能

如前所述,Modernizr 并沒(méi)有嘗試在舊版本的瀏覽器中添加新的功能,但是它允許你按照你的風(fēng)格去彌補(bǔ)那些缺失的功能。 為了展示這是如何運(yùn)作的,示例文件中包含了一個(gè)叫做 css_support_begin.html 的頁(yè)面。如果你在新式瀏覽器中加載這個(gè)頁(yè)面,它應(yīng)該看起來(lái)如圖2所示。

圖2. Firefox 5以多欄的格式顯示了頁(yè)面并且在圖像中添加陰影

該頁(yè)面的風(fēng)格是使用了CSS3的 column-countbox-shadow 屬性,以便以多欄的格式顯示文本并在圖像中添加陰影。 舊版本的瀏覽器不支持這些屬性中任何一項(xiàng),因此在 Internet Explorer (IE) 7 中同一頁(yè)面看起來(lái)如圖3所示。

圖3. IE7忽略了column-count 和 box-shadow屬性

在IE9中,同一頁(yè)面顯示了圖像陰影,但是文本和圖3中所示的布局是一樣的。

你在嘗試彌補(bǔ)缺失的功能上采取什么方式取決于你的設(shè)計(jì)大綱的要求。 要嘗試使頁(yè)面在所有的瀏覽器中看起來(lái)完全一樣將要涉及大量工作,但是你可以做一些簡(jiǎn)單的改進(jìn),比如在圖像周?chē)h(huán)繞文字,調(diào)整圖像與文本的左邊距,以及在圖像底部和右邊緣添加隱約的邊界,以便使它更具三維立體的感覺(jué)。

檢測(cè)對(duì) CSS3 功能的支持

Modernizr 使用 JavaScript 檢測(cè)瀏覽器所支持的功能,但是,它并不是使用 JavaScript 動(dòng)態(tài)地加載不同的樣式表,而是使用非常簡(jiǎn)單的技術(shù)將類(lèi)添加到頁(yè)面的<html>標(biāo)簽。然后作為設(shè)計(jì)者由你決定使用 CSS 層疊為目標(biāo)元素提供合適的樣式。例如,如果頁(yè)面支持 box-shadow 屬性,那么 Modernizr 會(huì)添加 boxshadow 類(lèi)。如果不支持,那么它用 no-boxshadow 類(lèi)作為替代進(jìn)行添加。

由于瀏覽器忽略它們無(wú)法識(shí)別的 CSS 屬性,因此你可以放心地按照你的基本樣式規(guī)則使用 box-shadow 屬性,然而需要按照下面的格式為舊版本的瀏覽器添加單獨(dú)的 descendant selector

.no-boxshadow img { /* styles for browsers that don't support box-shadow */}

只有不支持 box-shadow 的瀏覽器才會(huì)有 no-boxshadow 類(lèi),因此其它的瀏覽器不會(huì)應(yīng)用這個(gè)樣式規(guī)則。

讓我們將 Modernizr 添加到示例頁(yè)面并檢查它添加到<html> 標(biāo)簽中的類(lèi)。

  1. 復(fù)制 css_support_begin.html 并將它另存為 css_support.html。
  2. 打開(kāi)你剛創(chuàng)建的復(fù)制文件,并切換到 Code 視圖或者Split視圖。
  3. HTML markup 的前兩行應(yīng)該如下所示:
<!DOCTYPE HTML><html>
  1. class="no-js"添加到<html>標(biāo)簽中,如下所示:
<!DOCTYPE HTML><html class="no-js">

Modernizr 依賴(lài)于在瀏覽器中啟用的 JavaScrip。 當(dāng)它啟用時(shí),這種類(lèi)會(huì)被動(dòng)態(tài)地刪除。 但是,在極少數(shù)情況下,當(dāng) JavaScrip 沒(méi)有啟用時(shí),它依然存在于 HTML makup 中,如果必要,它允許你為這樣的訪(fǎng)問(wèn)者創(chuàng)建特殊的樣式規(guī)則。

  1. css_support.html 中的樣式是嵌入在 <style> 塊中。Modernizr 庫(kù)需要被添加到樣式加載之后的頁(yè)面的 <head> 部分。在結(jié)束的 </style> 和 </head> 標(biāo)簽之間添加一條新的線(xiàn),并且使用 <script>標(biāo)簽附加上 moderizr.js。最簡(jiǎn)單的方式是鍵入你自己的代碼,但是你也可以在Insert面板中使用 Script 按鈕或者選中 Insert – HTML–Script Objects–Script。<head> 的最后三行應(yīng)該如下所示:
</style><script src="js/modernizr.js"></script></head>

注: 如果你使用 Insert 面板或者Insert菜單,則 Dreamweaver 會(huì)添加 type="text/javascript" 到開(kāi)始的 <script> 標(biāo)簽中。 這在 HTML5 中不再要求,但是留著它并不會(huì)造成危害。

  1. 保存 support_css.html 并在 Document 工具欄中單擊 Live Code 按鈕。 目前 <html> 標(biāo)簽已經(jīng)加入了超過(guò)40個(gè)類(lèi)的名稱(chēng),這些名稱(chēng)能夠表明 WebKit 瀏覽器引擎中 Dreamweaver 的內(nèi)置版本的功能(參見(jiàn)圖4)。
圖4. Modernizr添加了大量的表明瀏覽器功能的類(lèi)

注:如果你的 Dreamweaver 版本沒(méi)有 Live Code(或者你正使用不同的 HTML 編輯器),那么你可以使用大多數(shù)新式瀏覽器提供的開(kāi)發(fā)工具或者 Firefox 瀏覽器提供的 Firebug 檢查生成的代碼。

如圖4所示, no-js 類(lèi)已經(jīng)被js類(lèi)替代,這表明 JavaScript 已經(jīng)啟用。

表1列舉了 Modernizr 使用的類(lèi)名稱(chēng)以表明對(duì) CSS3 的支持。 如果某個(gè)功能不支持,那么相應(yīng)類(lèi)的名稱(chēng)用no-作前綴。

表1. Modernizr 檢測(cè)的 CSS3 功能

CSS 功能

Modernizr 類(lèi)(屬性)

@font-face fontface
::before and ::after pseudo-elements generatedcontent
background-size backgroundsize
border-image borderimage
border-radius borderradius
box-shadow boxshadow

CSS animations

cssanimations

CSS 2D transformations

csstransforms

CSS 3D transformations

csstransforms3d

CSS transitions

csstransitions

flexible box layout

flexbox

gradients

cssgradients
hsla() hsla

multi-column layout

csscolumns

multiple backgrounds

multiplebgs
opacity opacity

reflection

cssreflections
rgba() rgba
text-shadow textshadow

無(wú)論在哪對(duì)特定的CSS屬性進(jìn)行測(cè)試,類(lèi)的名稱(chēng)和屬性名稱(chēng)都是一樣的,然而這要求去除任何連字號(hào)或是括號(hào)。 其它類(lèi)是按照它們參考的CSS3模塊而命名。

創(chuàng)建舊版本瀏覽器樣式規(guī)則

參見(jiàn)表1,你可以看到Modernizr使用boxshadowcsscolumns 分別表明了對(duì)box-shadow 屬性和多欄布局的支持。 因此,你可以使用no-boxshadowno-csscolumns 類(lèi)為不支持這些功能的瀏覽器創(chuàng)建特殊的樣式規(guī)則。

為了保證指令簡(jiǎn)單,我將演示只有CSS 聲明的范例。 你可以直接地將它們鍵入到Code視圖中或者使用New CSS Rule對(duì)話(huà)框。

  1. .no-boxshadow img創(chuàng)建一個(gè)新的descendant (compound) selector。
  2. 設(shè)置2像素灰色實(shí)心的右邊界和底邊(我選擇#8A8A8A)。 由此產(chǎn)生的樣式規(guī)則應(yīng)該如下所示:
.no-boxshadow img { border-right: #8A8A8A 2px solid; border-bottom: #8A8A8A 2px solid; }

這不像半透明的陰影那樣有吸引力,但是盡管如此,它仍然使得圖像能夠從背景中略微地突起。

  1. 在不支持多欄布局的瀏覽器中,你需要浮動(dòng)圖像并且調(diào)整它的頁(yè)邊距。為.no-csscolumns img創(chuàng)建一個(gè)新的descendant selector。
  2. 設(shè)置圖像向左浮動(dòng),并且將頂部和底部頁(yè)邊距設(shè)置為3px,右邊距為8px,以及左邊距為0。 樣式聲明如下所示:
.no-csscolumns img { margin: 3px 8px 3px 0; float: left;}
  1. 確保這個(gè)樣式規(guī)則是遵循.columns img規(guī)則。兩個(gè)規(guī)則有著相同的特殊性,因此,如果它們順序顛倒,則.columns img 的10像素的左邊距可能會(huì)覆蓋你剛剛創(chuàng)建的新規(guī)則。你可以將.no-csscolumns img重命名為.no-csscolumns .columns img以便于給它更高的特殊性,但是最好是保證selector越簡(jiǎn)單越好。(順便說(shuō)一下,如果你不確定什么是特殊性,查閱Adrian Senior的文章,Understanding Specificity。它雖然發(fā)表時(shí)間很長(zhǎng),但是很有價(jià)值。)
  2. 保存css_support.html,并在新式瀏覽器中對(duì)它進(jìn)行測(cè)試。它應(yīng)該和以前看起來(lái)完全一模一樣。
  3. 你應(yīng)該在你的本地系統(tǒng)上或通過(guò)鏈接到BrowserLab,在舊版本的瀏覽器上對(duì)這個(gè)頁(yè)面進(jìn)行測(cè)試。雖然沒(méi)有陰影或者欄目,但是現(xiàn)在頁(yè)面的式樣是可接受的,如圖5所示。
圖5. 舊版本瀏覽器使用的是可選的樣式,例如IE6。

在這個(gè)的簡(jiǎn)單范例中,我只用了前綴為no-的類(lèi)就為舊版本的瀏覽器創(chuàng)建了特殊的樣式。 但是,按照它們的能力,你不同時(shí)使用這兩個(gè)類(lèi)(帶或不帶前綴)為瀏覽器創(chuàng)建不同的樣式是絕對(duì)沒(méi)有道理的。 例如:

.csscolumns { /* rules for browsers that support multi-column layout */}.no-csscolumns { /* rules for browsers that don't support multi-column layout */}

有時(shí)這種方法是合理的,例如,如果你想為每一級(jí)支持都創(chuàng)建一個(gè)完全不同的布局。 但是如果它僅僅是一個(gè)為舊版本瀏覽器提供可選擇的樣式的問(wèn)題,不要忘記,瀏覽器會(huì)忽略它們無(wú)法識(shí)別的屬性。 如果你對(duì)所有的樣式都使用 Modernizr 類(lèi),那么在 JavaScript 禁用的瀏覽器中你的頁(yè)面將完全非樣式化。

使用Modernizr檢測(cè)HTML5的支持功能

Modernizr 為開(kāi)始的<html>標(biāo)簽添加的類(lèi)名稱(chēng)起著雙重目的作用。當(dāng)頁(yè)面加載時(shí),它們也是 Modernizr 對(duì)象創(chuàng)建的 JavaScript 屬性的名稱(chēng)。表1列舉了與 CSS 有關(guān)的類(lèi)和屬性的名稱(chēng)。表2列舉了剩下的與 HTML5 和相關(guān)技術(shù)有關(guān)的類(lèi)和屬性,例如地理位置。

表2. Modernizr 檢測(cè)的與 HTML5 有關(guān)的功能

HTML5 有關(guān)功能

Modernizr 類(lèi)(屬性)

Application cache

applicationcache

Audio

audio.type (ogg, mp3, wav, m4a)

Canvas

canvas

Canvas text

canvastext

Drag and drop

draganddrop

Form input attributes

input.attributeName

Form input elements

inputtypes.elementName

Geolocation

geolocation

hashchange event

hashchange

History management

history

IndexedDB

indexeddb

Inline SVG

inlinesvg

Local storage

localstorage

Messaging

postmessage

Session storage

sessionstorage

SMIL

smil

SVG

svg

SVG clip paths

svgclippaths

Touch events

touch

Video

video.type (ogg, webm, h264)

WebGL

webgl

Web sockets

websockets

Web SQL database

websqldatabase

Web workers

webworkers

在大多數(shù)情況下,表1和表2列舉的所有屬性返回的都是 true 或者 false 。所以,你可以按照如下所示使用 JavaScript 對(duì)本地存儲(chǔ)進(jìn)行測(cè)試:

if (Modernizr.localstorage) { // script to run if local storage is supported} else { // script to run if local storage is not supported}

然而,就 audio video 而言,返回值是一個(gè)字符串,它表明著瀏覽器能夠處理特定類(lèi)型的置信水平。 根據(jù) HTML5 規(guī)范,空的字符串表示該類(lèi)型不支持。 如果支持該類(lèi)型,那么返回值是“maybe”或是“probably”。 例如:

if (Modernizr.video.h264 == "") { // h264 is not supported}

使用 Modernizr 驗(yàn)證 HTML5 必需的表單字段

HTML5 添加了許多新的表單屬性,例如 autofocus,當(dāng)頁(yè)面第一次加載時(shí)它會(huì)自動(dòng)地將光標(biāo)放在某個(gè)指定的字段。 另一個(gè)有用的屬性是 required, 如果某個(gè)必需的字段留有空白,那么它將阻止HTML5兼容的瀏覽器提交表單(參見(jiàn)圖6)。

圖6. 提交表單前,HTML5 兼容的瀏覽器會(huì)檢查必需字段是否填寫(xiě)

這很好,但是它會(huì)給你留下一個(gè)問(wèn)題:舊版本的瀏覽器該怎么辦?

一個(gè)解決方法是忽略它們,并留給服務(wù)器側(cè)的驗(yàn)證功能進(jìn)行最終的檢查。 如果瀏覽器無(wú)法識(shí)別 required 屬性,那么另外一個(gè)處理這種情況的用戶(hù)界面更為友好的方法是創(chuàng)建一個(gè)小小的腳本對(duì)必需字段進(jìn)行檢查。 如下的指令顯示了在Modernizr幫助下如何進(jìn)行相應(yīng)的操作。

  1. 在范例文件夾中復(fù)制 required_start.html并保存為 required.html。
  2. 在結(jié)束的</head> 標(biāo)簽前用 <script>塊按照如下所示將 modernizr.js 粘貼到頁(yè)面中:
</style><script src="js/modernizr.js"></script></head>
  1. 緊接在 Modernizr 庫(kù)與頁(yè)面連接的標(biāo)簽之后,創(chuàng)建一個(gè)單獨(dú)的 <script> 塊,并且在頁(yè)面一加載完就創(chuàng)建一個(gè)事件處理程序以便于執(zhí)行代碼:
<script src="js/modernizr.js"></script><script>window.onload = function() { // code to execute when page loads};</script></head
  1. 事件處理程序需要獲得一個(gè)與表單元素有關(guān)的參考并在無(wú)法識(shí)別 autofocusrequired 屬性的瀏覽器中模擬它們。處理autofocus 的方式很簡(jiǎn)單:
window.onload = function() { // get the form and its input elements var form = document.forms[0], inputs = form.elements; // if no autofocus, put the focus in the first field if (!Modernizr.input.autofocus) { inputs[0].focus(); } // if required not supported, emulate it}

該條件測(cè)試了 Modernizr.input.autofocus,如果不支持 autofocus,那么返回的值是 false。 然而,邏輯運(yùn)算符NOT(一個(gè)感嘆號(hào))卻能使意思顛倒,因此如果不支持 autofocus,那么該條件的求值結(jié)果為 true,并且 inputs[0].focus() 將光標(biāo)放在第一個(gè)輸入字段。

  1. 如果不支持 required,那么現(xiàn)在添加代碼以便于檢查必需字段。 事件處理程序的完整代碼如下所示:
window.onload = function() { // get the form and its input elements var form = document.forms[0], inputs = form.elements; // if no autofocus, put the focus in the first field if (!Modernizr.input.autofocus) { inputs[0].focus(); } // if required not supported, emulate it if (!Modernizr.input.required) { form.onsubmit = function() { var required = [], att, val; // loop through input elements looking for required for (var i = 0; i < inputs.length; i++) { att = inputs[i].getAttribute('required'); // if required, get the value and trim whitespace if (att != null) { val = inputs[i].value; // if the value is empty, add to required array if (val.replace(/^\s+|\s+$/g, '') == '') { required.push(inputs[i].name); } } } // show alert if required array contains any elements if (required.length > 0) { alert('The following fields are required: ' + required.join(', ')); // prevent the form from being submitted return false; } }; }}

新代碼產(chǎn)生了一個(gè)函數(shù),當(dāng)提交表單時(shí)它能夠遍歷所有的輸入元素,以便于找到具有 required 屬性的字段。 當(dāng)它找到某個(gè)字段時(shí),它會(huì)從值中除去開(kāi)頭和結(jié)尾的空白,并且如果結(jié)果是一個(gè)空的字符串,那么它會(huì)把結(jié)果添加到 required 數(shù)組中。 在所有的字段都已經(jīng)得到檢查后,如果數(shù)組中包含某些元素,那么瀏覽器會(huì)顯示一個(gè)與缺失字段名稱(chēng)有關(guān)的警告,并阻止提交表單。

  1. 保存 required.html 并加載到某個(gè)瀏覽器中,例如尚不支持 HTML5 表單的 IE 6-9。 注意一下光標(biāo)是如何自動(dòng)地填入第一個(gè)字段的。
  2. 單擊提交按鈕而無(wú)需填寫(xiě)任何其它字段。 你應(yīng)該能看到一個(gè)警告提示你名稱(chēng)和郵箱字段需要填寫(xiě)(參見(jiàn)圖7)。
圖7. 腳本檢測(cè)到不支持新屬性的瀏覽器中的必需字段
  1. 只填寫(xiě)其中一個(gè)必需字段,再進(jìn)行一次頁(yè)面測(cè)試。 當(dāng)你單擊 OK 關(guān)閉警告時(shí),你填寫(xiě)的字段仍然有它的內(nèi)容,這表明表單尚未提交。
  2. 同時(shí)填寫(xiě)兩個(gè)必需表單,并單擊 submit 按鈕。 這一次,所有表單字段被清空,并且你應(yīng)該能夠看到隸屬于 URL 的數(shù)據(jù)作為查詢(xún)字符串出現(xiàn)在瀏覽器的地址欄。 這就證實(shí)了表單數(shù)據(jù)已被提交。
  3. 在 HTML5 兼容的瀏覽器中,例如最新版本的 Firefox、Chrome 或者 Opera,對(duì)這個(gè)頁(yè)面進(jìn)行測(cè)試。 瀏覽器顯示了它自己的類(lèi)似于圖6所示的錯(cuò)誤信息,而不是顯示警告信息。

注意: Safari 5.1 錯(cuò)誤地報(bào)告了它支持 required 屬性,所以它在沒(méi)有驗(yàn)證必需字段的情況下就提交了表單。 這是 Safari 的缺陷,然而在 Modernizr 里它是不存在的。

創(chuàng)建版本

當(dāng)你準(zhǔn)備好對(duì)你的網(wǎng)站進(jìn)行部署時(shí),推薦創(chuàng)建一個(gè) Modernizr 的自定義 production 版本,它只包含那些你實(shí)際需要的元素。 這可以按照你所選的功能將 Modernizr 庫(kù)的大小從 44KB 縮小到 2KB。當(dāng)前選項(xiàng)的范圍如圖8所示。

圖8. Modernizr 下載頁(yè)面允許你僅選擇那些你需要的功能

選項(xiàng)可以便捷地按照如下類(lèi)別進(jìn)行分組:CSS3、HTML5、Misc(ellaneous) 和 Extra。 單擊前三個(gè)標(biāo)題旁邊的 Toggle 按鈕可任意地選擇或者放棄選擇分類(lèi)中的所有復(fù)選框。

在默認(rèn)情形下,Extra 分類(lèi)將會(huì)選中如下三個(gè)條目:

  • HTML5 Shim/IEPP:它添加了兩個(gè)腳本— HTML5 shim 和 IE Print Protector—它們迫使 IE6-8 正確地設(shè)計(jì)并打印 HTML5 元素。如果你打算使用新的 HTML5 語(yǔ)義標(biāo)簽,例如 <header> 、<footer>、<nav> 、 <section> 、<article> 等等時(shí),那么你需要這個(gè)選項(xiàng)。
  • Modernizr.load(yepnope.js):它添加了一個(gè)不包含在 development 版本中的可選擇的腳本加載器。它增加了3KB 的下載量,所以如果你不需要它,你可以放棄選擇它。稍后我將描述如何使用該加載器。
  • Add CSS Classes: 它將 Modernizr 類(lèi)添加到開(kāi)始的<html>標(biāo)簽。如果你想檢測(cè)對(duì) CSS3 功能支持,那么你必須選擇這個(gè)選項(xiàng)。

如果你在 CSS3 分類(lèi)中選中任何選項(xiàng),那么如下 Extra 分類(lèi)中的選項(xiàng)也會(huì)被選中:

  • Modernizr.testProp()
  • Modernizr.testAllProps()
  • Modernizr._domPrefixes()

不要取消選擇這些選項(xiàng)。 這樣做將會(huì)自動(dòng)地取消你在 CSS3 分類(lèi)中已經(jīng)選擇的任何選項(xiàng)。

Extra 分類(lèi)中的MQ Polyfill (respond.js) 添加了一個(gè)腳本,它可以使IE 6-8中的 media queries 獲得有限的支持。當(dāng)你選中這個(gè)選項(xiàng)時(shí),它會(huì)自動(dòng)地選中Media Queries 和 Modernizr.testStyles()。如需知道更多關(guān)于media queries polyfill (respond.js)的信息,請(qǐng)?jiān)L問(wèn)https://github.com/scottjehl/Respond。

只有高級(jí)用戶(hù)才會(huì)對(duì) Extra 分類(lèi)中的其它選項(xiàng)感興趣。關(guān)于它們是什么和如何使用它們的更多細(xì)節(jié),參見(jiàn) Modernizr 文檔的擴(kuò)展性部分Extensibility section of the Modernizr documentation)。

下載 Modernizr 自定義版本

下面的說(shuō)明描述了如何為范例文件創(chuàng)建一個(gè) Modernizr 的自定義production版本。 后續(xù)的練習(xí)需要使用這一自定義版本,它將展示如何使用 Modernizr.load() 加載外部 JavaScript 文件。

  1. 單擊http://www.modernizr.com/download/. 這將會(huì)打開(kāi)如圖8所示的界面。
  2. 在 CSS3 分類(lèi)中,選中box-shadowCSS columns.
  3. 在 HTML5 分類(lèi)中,選中 Input Attributes.
  4. 在 Extra 分類(lèi)中,取消選擇 HTML5 Shim/IEPP.
  5. 確保 Extra 分類(lèi)中如下的選項(xiàng)被選中(它們應(yīng)該已經(jīng)自動(dòng)地被選中)。
    • Modernizr.load(yepnope.js)
    • Add CSS Classes
    • Modernizr.testProp()
    • Modernizr.testAllProps()
    • Modernizr._domPrefixes
  1. 單擊Generate按鈕。
  2. 當(dāng)自定義腳本準(zhǔn)備好(一般在一到兩秒內(nèi))時(shí),在 Generate 按鈕旁邊會(huì)出現(xiàn)一個(gè) Download 按鈕。 單擊 Download 按鈕并在范例網(wǎng)站的js文件夾中保存該文件。 下載頁(yè)面會(huì)給 production 腳本提供一個(gè)文件名,例如 modernizr.custom.79475.js,但是你或許會(huì)希望給它一個(gè)更加有意義的名稱(chēng)。 在范例文件中,我使用的名稱(chēng)是 modernizr.adc.js。
  3. 用自定義 production 腳本的鏈接替換 modernizr.js in css_support.html 和 required.html 的鏈接。 注意 production 腳本只有 5KB,而不是 development 版本的44KB。
  4. 單擊 css_support.html 中的 Live Code(或者使用你的瀏覽器中的 development 工具)。 現(xiàn)在,如圖9所示,開(kāi)始的<html>標(biāo)簽只有三個(gè)類(lèi)。
圖9. 現(xiàn)在<html>標(biāo)簽中的類(lèi)只涉及必要的 CSS3 功能

使用 Moder 年 izr 加載外部腳本

當(dāng)創(chuàng)建Modernizr的自定義production版本時(shí),在默認(rèn)情形下,必須選中包含 Modernizr.load() 的選項(xiàng)。 Modernizr.load()yepnope() 的別名,它是與 Modernizr 同步開(kāi)發(fā)的獨(dú)立腳本加載器。 為了說(shuō)明如何使用它,我給出一個(gè)簡(jiǎn)單范例。我已經(jīng)將相應(yīng)的腳本從 required.html 移到了 check_required.js,并且做了三個(gè)微小的改動(dòng)以便于去除 Modernizr 測(cè)試以及將它賦值到一個(gè)名為 init 的變量中。 修訂的腳本如下所示:

var init = function() { // get the form and its input elements var form = document.forms[0], inputs = form.elements; // put the focus in the first input field inputs[0].focus(); // check required fields when the form is submitted form.onsubmit = function() { var required = [], att, val; // loop through input elements looking for required for (var i = 0; i < inputs.length; i++) { att = inputs[i].getAttribute('required'); // if required, get the value and trim whitespace if (att != null) { val = inputs[i].value; // if the value is empty, add to required array if (val.replace(/^\s+|\s+$/g, '') == '') { required.push(inputs[i].name); } } } // show alert if required array contains any elements if (required.length > 0) { alert('The following fields are required: ' + required.join(', ')); // prevent the form from being submitted return false; } };};

Modernizr.load() 的一個(gè)很大的優(yōu)點(diǎn)是,根據(jù)測(cè)試瀏覽器能力的結(jié)果,它可以有條件地加載腳本—這就是為什么起初叫它 yepnope() 的原因。 它可以異步地加載外部腳本—換句話(huà)說(shuō),就是能夠在瀏覽器已加載 Document Object Model (DOM) 之后加載外部腳本—因此它可以有助于提升你的網(wǎng)站性能。

Modernizr.load() 的基本語(yǔ)法是將一個(gè)具有如下屬性的對(duì)象傳遞給它:

  • test: 你希望檢測(cè)的 Modernizr 屬性。
  • yep: 如果測(cè)試成功,你希望加載的腳本的位置。 使用一個(gè)多腳本數(shù)組。
  • nope: 如果測(cè)試失敗,你希望加載的腳本的位置。 使用一個(gè)多腳本數(shù)組。
  • complete: 外部腳本一經(jīng)加載就運(yùn)行的函數(shù)(可選)。

yepnope 兩者都是可選的,只要你提供了其中一個(gè)即可。

為了在 check_required.js 中加載和執(zhí)行腳本,需要在 modernizr.adc.js 已附著到頁(yè)面之后添加如下<script> 塊(代碼位于required_load.html 中):

<script>Modernizr.load({ test: Modernizr.input.required, nope: 'js/check_required.js', complete: function() { init(); }});</script>

這樣就與之前運(yùn)行的完全一致,但是卻可以降低已支持 required 屬性的瀏覽器的下載負(fù)荷。

為了測(cè)試多種條件,你可以給 Modernizr.load()傳遞一組對(duì)象。如需獲得更多細(xì)節(jié)信息,參見(jiàn) Modernizr 文檔上的Modernizr.load() 教程。

一句忠告

Modernizr 是一個(gè)強(qiáng)大而有用的工具,但是這并不意味著你就應(yīng)該使用它。 并不是在所有情形下均必須使用 Modernizr 給瀏覽器提供多種樣式。 如果你主要關(guān)注的對(duì)象是 Internet Explorer,那么考慮使用IE conditional comments。 你也可以使用CSS層疊覆蓋一些樣式。 例如,先使用hexadecimal color,然后使用 rgba()hsla() 覆蓋它。 舊版本的瀏覽器會(huì)使用第一個(gè)值并且忽略第二個(gè)值。

Modernizr 真正地變成現(xiàn)實(shí)是當(dāng)它與 polyfills 和其它 JavaScript 相結(jié)合的時(shí)候。但是記住,通常很容易創(chuàng)建屬于你自己的適合支持功能的測(cè)試。例如,下面就是你測(cè)試某個(gè)瀏覽器是否支持 required 屬性的全部代碼(代碼位于required_nomodernizr.html 中):

var elem = document.createElement('input');if (typeof elem.required != 'boolean') { // required is not supported}

下一步閱讀方向

本教程已經(jīng)涵蓋了 Modernizr 的所有主要功能 如需了解關(guān)于這些功能的更多信息,請(qǐng)查閱相應(yīng)的官方文檔,其網(wǎng)站地址為 http://www.modernizr.com/docs/。 此外,你還可以找到下列有用資源:

+

本產(chǎn)品經(jīng) Creative Commons Attribution-Noncommercial-Share Alike 3.0 Unported License 許可。Adobe 提供超出該許可范圍、與本產(chǎn)品包含的代碼示例相關(guān)的權(quán)限。

本站僅提供存儲(chǔ)服務(wù),所有內(nèi)容均由用戶(hù)發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊舉報(bào)。
打開(kāi)APP,閱讀全文并永久保存 查看更多類(lèi)似文章
猜你喜歡
類(lèi)似文章
【翻譯】使用Modernizr探測(cè)HTML5/CSS3新特性
Modernizr與HTML5前端觀(guān)察 | Javascript | 前端觀(guān)察
Modernizr.js入門(mén)指南
HTML-與就瀏覽器兼容
Html5 頁(yè)面中 JavaScript 啟動(dòng)調(diào)用的三種方法比較
【HTML 中 src 和 href 屬性的區(qū)別】
更多類(lèi)似文章 >>
生活服務(wù)
分享 收藏 導(dǎo)長(zhǎng)圖 關(guān)注 下載文章
綁定賬號(hào)成功
后續(xù)可登錄賬號(hào)暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服