雖然說最近,有的提案其實2010年就存在了。基本上是firefox, webkit在推動。主要如下:
calc: css3的函數,現在只有opera不支持。只要用於混合單位的計算,不能你手動轉換。這在各種增量減量操作非常方便。
style scoped屬性: 讓這些樣式只在某一個元素下有效,對模塊化絕對有利。
DOM4的Custom Event,這個新瀏覽器基本都支持。其實較新的createEvent方法也是可以創建自定義事件,但那個initEvent非常蛋痛而已。可以看作是可以在文檔樹中上下傳播的觀察者。另一個觀察者是Object.observe。
Shadow DOM,chrome20+支持,在一個元素節點中開辟一個超空間(文檔碎片),里面添加的節點不會被外部的選擇器所搜索到。如果其applyAuthorStyles 屬性為false,還不受外部CSS影響。這用於做模板,切換卡,富文本編輯器絕對有用!
//https://github.com/RubyLouvre/mass-Framework/blob/master/css.js
var shadowRoot, shadowDoc, shadowBody, shadowWin, reuse
$.applyShadowDOM = function(callback) {
//用於提供一個沙箱環境,IE6-10,opera,safari,firefox使用iframe, chrome20+使用Shodow DOM
if(!shadowRoot) {
if(window.WebKitShadowRoot) { //如果支持WebKitShadowRoot
shadowRoot = new WebKitShadowRoot($.html);
shadowBody = document.createElement("div");
shadowRoot.appendChild(shadowBody);
} else {
shadowRoot = document.createElement("iframe");
}
(shadowBody || shadowRoot).style.cssText = "width:0px;height:0px;border:0 none;";
}
if(shadowRoot.nodeType == 1) {
$.html.appendChild(shadowRoot);
if(!reuse) { //firefox, safari, chrome不能重用shadowDoc,shadowWin
shadowDoc = shadowRoot.contentDocument || shadowRoot.contentWindow.document;
shadowWin = shadowDoc.defaultView || shadowDoc.parentWindow;
shadowDoc.write("<!doctype html><html><body>");
shadowDoc.close();
reuse = window.VBArray || window.opera; //opera9-12, ie6-10有效
}
callback(shadowWin, shadowDoc, shadowDoc.body);
$.html.removeChild(shadowRoot);
} else {
callback(window, document, shadowBody);
shadowBody.innerHTML = "";
}
}
template標簽,可惜還沒有瀏覽器實現,定義在template中的元素不會被渲染,圖片等資源不會被加載,腳本不會被執行。現在許多JS前端模板都是使用MIME不被認識的script標簽作容器。有更語義化的容器用當然受歡迎!
<div>
<img src="">
<div class="comment"></div>
…
</div>
decorator標簽,與template標簽, style scoped配合使用,用於重寫現有的標簽,讓它表現為一個復雜的組件。
<decorator id="fade-to-white">
<template>
<div style="position: relative;">
<style scoped>
#fog {
position: absolute;
left: 0;
bottom: 0;
right: 0;
height: 5em;
background: linear-gradient(
bottom, white 0%, rgba(255, 255, 255, 0) 100%);
}
</style>
<content></content>
<div id="fog"></div>
</div>
</template>
</decorator>
然后你在頁面有一個DIV.aaa,這樣定義它的樣式。那么它的結構變成decorator那樣展示了。這對於加載什么日歷,取色器,滑動條等組件非常誘人!
.aaa {
decorator: url(#fade-to-white);
font-variant: small-caps;
}
此外,還有自定義標簽,其實與上面的差不多,只不過decorator是重寫現存的某個標簽的結構與樣式,這個是應用一個新標簽上。但decorator標簽還沒有實現出來,這個更不用說。不過可以想象,未來兩年,什么圓形,三角標簽會滿地跑!
