? ? ? Chromium?最近實現了一個HTML5的新特性:范圍樣式,又叫做<style scoped>?。開發者可以通過為根元素設定一個添加了scoped屬性的style標簽,來限制樣式只作用于style標簽的子元素上。這會限制樣式只影響style標簽的父元素和它所有的后代元素。
**例子**
? ? ??下面是一個使用了標準樣式的簡單頁面:
~~~
<html>
~~~
~~~
<body>
~~~
~~~
?<div>a div! <span>a span!</span></div>
~~~
~~~
?<div>
~~~
~~~
??? ?<style>
~~~
~~~
?????? div { color: red; }
~~~
~~~
???????span { color: green; }
~~~
~~~
??? ?</style>
~~~
~~~
???? a div! <span>a span!</span></div>
~~~
~~~
?<div>a div! <span>a span!</span></div>
~~~
~~~
</body>
~~~
~~~
</html>
~~~
? ? ? 它設定的樣式規則將使得所有的<div>變為紅色,<span>變成綠色:
a div!?a span!
a div!?a span!
a div!?a span!
? ? ??然而,如果我們為<style>元素設置了scoped屬性:
~~~
<html>
~~~
~~~
<body>
~~~
~~~
?<div>a div! <span>a span!</span></div>
~~~
~~~
?<div>
~~~
~~~
???<style scoped>
~~~
~~~
?????? div { color: red; }
~~~
~~~
?????? span { color: green; }
~~~
~~~
??? ?</style>
~~~
~~~
???? a div! <span>a span!</span></div>
~~~
~~~
?<div>a div! <span>a span!</span></div>
~~~
~~~
</body>
~~~
~~~
</html>
~~~
? ? ??那么這個樣式規則限制使得它們應用于<style scoped>元素的父<div>元素及其內部的所有元素上。我們稱之為“范圍”,結果如下所示:
a div! a span!
a div!?a span!
a div! a span!
? ? ??當然我們可以在任何地方使用這個標簽。?所以如果你喜歡冒險,你可以在一個范圍樣式內添加盡可能多的范圍樣式來獲取盡可能細的樣式控制粒度。
**用途**
? ? ??它有什么好處?
? ? ??一種常見的用途是內容合并:當你作為一個網站的作者想嵌入來自第三方的內容(譯者注:想想博客),包括它所有的樣式風格,但是不想讓這些樣式“污染”頁面其他無關的部分。其一個巨大的優勢是可以將其他網站例如Yelp、Twitter、Ebay等的內容合并到一個單獨頁面,而無需使用<iframe>或者動態的編輯外部內容來隔離它們。
? ? ??如果你使用內容管理系統(CMS),它會發送許多標記片段來整合成為一個最終顯示的頁面。所以范圍樣式是一個偉大的功能,可以確保每一個片段與任何其他頁面上的樣式相隔離。這對wiki來說也一樣的有用。
? ? ??當你想在頁面上展示一些漂亮的演示代碼,很容易限制樣式只作用于演示內容。你可以在演示隨意的添加樣式,而不用擔心對頁面上其他內容的影響。
? ? ??它的另一個用途是簡單的封裝:例如,如果你的網頁有一個側邊菜單,把指向菜單的樣式封裝到其中的<style scoped>段落會很有意義。這些樣式規則對頁面其他區域的渲染將不會有任何影響,這可以使得它可以很好地和主要內容進行分離!
? ? ??它可能最引人注目的用途之一是用在[Web組件](http://translate.googleusercontent.com/translate_c?act=url&hl=zh-CN&ie=UTF8&prev=_t&rurl=translate.google.com.hk&sl=en&tl=zh-CN&u=http://dvcs.w3.org/hg/webcomponents/raw-file/tip/explainer/index.html&usg=ALkJrhgTnofhqhYUvflMbbMgrds2IePEKA)模型上。Web組件將是一個構建像滑塊、菜單、日期選擇器和選項卡部件等的偉大方式。通過提供范圍內的樣式,設計人員可以構建一個組件并且將其打包成為一個獨立的單位,其他人可以使用這個組件并組合為一個富Web應用程序。?我們計劃在Web組件和[shadowDOM](http://dvcs.w3.org/hg/webcomponents/raw-file/tip/spec/shadow/index.html)(已經可以在chrome://flags里開啟實驗性的“Shadow DOM”標志來啟用)里大量使用范圍樣式。除了例如內聯樣式這樣不好的方式,現在沒有真正的好辦法來確保樣式限制在Web組件里,所以范圍樣式是一個完美的解決方案。
**為什么包括父元素?**
? ? ??最自然的方式需要包括父元素,以便于<style scoped>規則可以來做為整個區域設置通用背景顏色這樣類似的事情。它還允許采用“防守性”的方式來書寫范圍樣式,通過為ID或者類選擇器加上前綴的方式為還不支持<style scoped>的瀏覽器提供優雅降級。
~~~
<div id=”menu”>
~~~
~~~
?<style scoped>
~~~
~~~
?? #menu .main { … }
~~~
~~~
?? #menu .sub { … }
~~~
…
? ? ??這種模仿可以實現“范圍樣式”的效果,但是因為更復雜的選擇器會有一些運行時的性能損失。這種做法的好處是,它采用一個優雅的降級方法讓我們可以等到<style scoped>被廣泛支持和ID選擇器可以簡單地被丟棄時。
**狀態**
? ? ??鑒于范圍樣式的實現是最新的,它目前被隱藏在Chrome的運行時標志里。要激活它,你需要下載版本號為19或者更高的Chrome(現在的Chrome Canary),然后在chrome://flags里找到“開啟<stylescoped>”選項(靠近最后),單擊“啟用”,然后重新啟動瀏覽器。
? ? ??目前沒有已知bug,但是@keyframes和@-webkit-region區域范圍的版本還正在實現中。此外,@font-face被忽略掉了,因為現在有一個很好的機會來調整這個規范。
? ? ??我們鼓勵每個對這個特性感興趣的人都來嘗試一下,讓我們知道你的反饋:好、不好以及(可能)不足。
譯自:[http://updates.html5rocks.com/2012/03/A-New-Experimental-Feature-style-scoped](http://updates.html5rocks.com/2012/03/A-New-Experimental-Feature-style-scoped)
轉載請注明:[蔣宇捷的博客](http://blog.csdn.net/hfahe)
- 前言
- AutoPager的簡單實現
- 利用CSS3特性巧妙實現漂亮的DIV箭頭
- IE9在Win7下任務欄新特性簡介
- 瀏覽器九宮格的簡單實現
- Raphael js庫簡介
- 使用CSS3構建Ajax加載動畫
- 用CSS3創建動畫價格表
- 用CSS3實現瀏覽器的縮放功能
- 用純CSS3實現QQ LOGO
- 用CSS3創建旋轉載入器
- 使用Javascript開發移動應用程序
- 用HTML5創建超酷圖像灰度漸變效果
- 使用CSS3創建文字顏色漸變(CSS3 Text Gradient)
- 僅用CSS創建立體旋轉幻燈片
- 如何創建跨瀏覽器的HTML5表單
- 用CSS3實現動畫進度條
- HTML5 Guitar Tab Player
- 奇妙的HTML5 Canvas動畫實例
- 談HTML5和CSS3的國際化支持
- 實現跨瀏覽器的HTML5占位符
- 前端開發必備工具:WhatFont Bookmarklet-方便的查詢網頁上的字體
- 使用HTML5和CSS3來創建幻燈片
- HTML5之美
- 如何使用HTML5創建在線精美簡歷
- 以小見大、由淺入深-談如何面試Javascript工程師
- 快速入門:HTML5強大的Details元素
- 用CSS3實現圖像風格
- HTML5視頻字幕與WebVTT
- 用純CSS3實現Path華麗動畫
- 用3個步驟實現響應式網頁設計
- 遇見CSS3濾鏡
- 關于CSS3濾鏡的碎念
- 用純CSS3繪制萌系漫畫人物動態頭像
- CSS3新的鼠標樣式介紹
- 用HTML5獻上愛的3D玫瑰
- 對HTML5 Device API相關規范的解惑
- 如何使用HTML5實現拍照上傳應用
- 2012第一季度國外HTML5移動開發趨勢
- HTML5新特性:范圍樣式
- 百度開發者大會-《用HTML5新特性開發移動App》PPT分享
- Chrome 19對于HTML5最新支持的動態:電池狀態API,全屏API,震動API,語音API
- 遇見Javascript類型數組(Typed Array)
- 用HTML5 Audio API開發游戲音樂
- 用HTML5實現人臉識別
- 用Javascript實現人臉美容
- Chrome 20對于HTML5最新支持的動態:顏色輸入,網絡信息API,CSS著色器
- 用HTML5實現手機搖一搖的功能
- 用HTML5實現iPad應用無限平滑滾動
- 用非響應式設計構建跨端Web App
- 了解SVG
- HTML5圖像適配介紹
- HTML5安全:內容安全策略(CSP)簡介
- HTML5安全:CORS(跨域資源共享)簡介
- 用CSS3 Region和3D變換實現書籍翻頁效果
- 談談移動App的思維誤區
- Chrome新特性:文件夾拖拽支持
- 《關注HTML5安全》
- HTML5安全風險詳析之一:CORS攻擊
- HTML5安全風險詳析之二:Web Storage攻擊
- HTML5圖像適配最新進展:響應式圖片規范草案
- HTML5移動Web App相關標準狀態及路線圖
- HTML5安全風險詳析之三:WebSQL攻擊
- Chrome引入WebRTC支持視頻聊天App
- HTML5安全風險詳析之四:Web Worker攻擊
- HTML5安全風險詳析之五:劫持攻擊
- HTML5安全風險詳析之六:API攻擊
- HTML5安全攻防詳析之七:新標簽攻擊
- 在iOS Safari中播放離線音頻
- 使用WebRTC實現遠程屏幕共享
- Firefox、Android、iOS遇見WebRTC
- HTML5光線傳感器簡介
- HTML5安全攻防詳析之八:Web Socket攻擊
- HTML5安全攻防詳析之完結篇:HTML5對安全的改進
- 激動人心!在網頁上通過語音輸入文字 - HTML5 Web Speech API介紹
- Web滾動性能優化實戰
- 用CSS3設計響應式導航菜單
- 用HTML5構建高性能視差網站
- 漫談@supports與CSS3條件規則
- HTML5下載屬性簡介
- 如何開發優秀的HTML5游戲?-迪斯尼《尋找奧茲之路》游戲技術詳解(一)
- 如何開發優秀的HTML5游戲?-迪斯尼《尋找奧茲之路》游戲技術詳解(二)
- 趨勢:Chrome為打包應用提供強大新特性
- 從HTML5移動應用現狀談發展趨勢
- 基于HTML5的Web跨設備超聲波通信方案