是否記得這樣的試題?用一套一樣的HTML結構,生成不一樣 的視覺效果。CSS 的最大好處就是,靈活。好比一樣的HTML結構,能夠實現不一樣的外觀;又好比,一樣的外觀,能夠用不一樣的方式不實現。但靈活的同時也給咱們帶來麻煩。團隊 協做時,你們的編碼風格各異,其餘人要看懂/debug的成本也所以提升。這時,咱們須要一個規範,一個像紅燈亮起咱們就不能擅闖的規範。css
在 Alipay 前端,Alice 框架有這樣一套規範,讓你們的協做更方便。這套規範基於 Alice,屬於 Alice 的一部分。其最基本的原則是,一樣的結構,產出不一樣的視覺效果。html
注:全部樣式的建立,都必須基於 CSS 規範 進行前端
http://blog.csdn.net/shoyer/article/details/8300442git
Alice 的設計起源於支付寶的 pa.css 文件。因爲這個文件被多系統引用,沒有人敢隨便改動裏面的內容,因此只能不斷往裏面添加內容,致使了這個文件體積變得很是大。因此,亟待重構。在嘗試重構後,發現了重構不是咱們真正想要的,因些主要從兩個方面來構建 Alice:github
更個人設計思想,請參考:支付寶CSS架構設計模式
檢出 Alice 前端解決方案的全部代碼:瀏覽器
注意:非組件/解決方案,請不要使用.ui-/.sl-做爲前綴架構
雖然視覺稿是多變的,但 Alice 模塊的結構是不變的。所以,咱們拿到視覺稿的第一時間(交互白板的時候,其實已經能夠開始尋找),就是分析視覺稿。確認哪些資源是咱們相要的。而 Alice 方面,咱們要分析的是,全局設置的有那些,可使用 Alice 模塊的有哪些。一般,須要肯定的全局設置包括:app
通常,咱們爲全局設置建立一個單獨的 global.css框架
而那些應該作爲組件?通常狀況下 TPL(下詳)中的 14 個通用組件是必要的。另外須要根據頁面使用的實際狀況抽象。越多的組件,咱們的編碼就越統1、能建立越多的代碼片斷,這不管是對咱們的協做,仍是效率的提 升,都是很是有益的。下面這個 CheckList 能夠做爲你規範樣式庫的參考:
至於如何規劃一個 CSS 文件,請參考《CSS 規範》
tpl.css 是一套 CSS 模板。若是你要構建新的組件。那麼,你能夠直接使用它。而不是引入+覆蓋她。TPL 中包括了,全局設置/ 佈局 / 列表 / 標題 / 切換 / 表單 / 表格 / 按鈕 / 對話框。從 checklist 中能夠看出已有組件列表。若是你的組件是已經有的,那麼,參照已有的結構去構建。若是你新建一個新的組件,那麼,使用下圖所示的方法來構建:
記住:
不一樣外觀的相同組件,HTML不要相互嵌套,CSS 推薦嵌套。
推薦的:
不推薦的:
推薦的:
不推薦的:(除非須要重用)
在模塊化和命名上,以一個Tab組件爲例,分解以下:
好比,咱們能夠這樣寫:
但不要這樣寫:
語義化是什麼?什麼樣的寫法纔是正確的。這裏給一個建議,把你將要構建的頁面當成一本書。是段落的,你就用P(aragraph);是標題的,就用 H(eader);是引用的,就用Blockquote。而不是簡單的,塊狀的東西由塊狀元素包含,行內的元素用行內的標籤包含。這裏有點要求就是, 去深刻了解每一個 HTML 標籤的用法。關於靈活。像 「在組件窗口最外一層添加狀態,而非給每個內容添加狀態。除非內容有獨立的狀態」 就是一種靈活的表現。讓你更靈活去地改變狀態。
關於 HTML 的語義化,能夠參考:這樣去寫你的 HTML
儘可能讓人看到名字就能知道是什麼組件,比較 ui-tab,好比 ui-nav 這樣的命名。全部小圖標都使用 .ui-icon .ui-icon- 前綴,建議同一系統(域)人的經常使用小圖標所有合成 sprite。用 HTML ENTRY 來引用,不要寫空標籤,應使用 HTML ENTRY 來替代,以達到語義化的要求。HTML ENTRY 請參考這個文檔:https://docs.google.com/Doc?docid=0AWiI12yCmwaoZGNiemJqOGpfMTVmaHZtOWNkeg
經常使用的狀態有:hover, current, selected, disabled, focus, blur, checked, success, error 等。一般你的命名應該看起來像 .ui-name-hover, .ui-name-error 這樣。
經常使用模塊名有:cnt(content), hd(header), text(txt), img(images/pic),item, cell 等,只要詞義表達了組件要實現的功能或者要表現出來的的外觀就能夠了。
參照經常使用狀態
拿支付寶某項目中的的 .ui-nav 爲例,若是有多級,能夠這樣命名:
拿 ui-button 爲例:
而不要用 ui-button-round,這樣,就可能會有: ui-button-round-a ui-button-round-b … 了。按鈕又有多個狀態,命名就會太長了 ui-button-round-a-disabled
好比你比較喜歡 ui-tip-container ,另外的一個相同做用的地方,就不要寫 ui-message-cnt 了,用 [ui-tip-container ui-message-container] 或 [ui-tip-cnt ui-messages-cnt] 這樣會是更好的選擇
通常狀況下,咱們常常遇到方向須要用單獨標籤來做爲小圖標的例子。好比幾乎每一個系統都會有的 ui-message 和 ui-tip,均可能會有上下兩個部分。推薦這樣寫:
注:目前支付寶使用的樣式庫管理工具是架構組開發的一套 Maven 解決方案。
你的團隊可能不止一個樣式庫,像支付寶,有`個人支付寶`、`生活助手`和`商家服務`等產品,因此須要根據樣式庫規範建立不一樣的樣式庫。樣式庫能夠是 svn 中的一個代碼目錄。每一個組件的 css 組件都應該有對應的 html demo。固然,若是有對應的預覽截圖,並造成一個展現平臺,那就更好了。下面是代碼目錄和造成的展現平臺。
像 Alice solutions 的每一個組件下,都有一個 Readme.md 說明文檔,查看這個範例頁面:
https://github.com/sofish/Alice/tree/master/solutions/rotate
推薦使用 YUI Compressor 來壓縮你的樣式。目前支付寶使用的 Maven 解決方案中,集成的壓縮工具就是 YUI Compressor。下載和使用文檔請看這裏:http://developer.yahoo.com/yui/compressor/。這裏再也不作細述。
關於 YUI Compressor 壓縮版本的註釋:
若是有些註釋不想在壓縮的時候刪除,可使用標識符來告訴程序,標識符是一個感嘆號 「!」,示例以下:
/*! 這是不會被壓縮掉的註釋 */ –> /*!這是不會被壓縮掉的註釋*/
但像 /*中文*/ 這樣的註釋,若是沒有空格把註釋隔開可能有問題。因此,當你不想格式化註釋,並但願上線的話,請確保註釋是英文的,或者有空格把之隔開的中文註釋。通常的 hack 註釋是不會被壓縮的,如:
壓縮前:
壓縮後:
能夠根據團隊需求,構建自身的展現平臺。
組件應通過嚴格測試。測試規則詳見:《CSS 規範》
解決方案的規範,同組件。不一樣的是:
解決方案(solution)詳見:http://aliceui.com/category/solutions/