Ben Frain曾經說過,寫css代碼很容易,可是擴展和維護卻很難。本文就介紹了一套方案來解決這個問題。css
OOCSS 意爲面向對象的CSS。這種方法有兩種主要 觀點:git
使用這套結構,開發者能獲得能夠在不一樣地方使用的通常類。github
在這一步,會存在兩點(一般就好和壞):api
此外,這種OOCSS的方法自己並無明確的規則,而是抽象的建議,因此這種方法在生產中的結果會有不一樣。瀏覽器
實際結果就是,這種OOCSS的思想啓發了其餘人建立出屬於他們本身更具體的代碼結構。app
SMACSS 意爲可擴展、模塊化(Scalable and Modular Architecture)的CSS。這種方法的主要目的是減小代碼量,而且使代碼維護更簡單。框架
Jonathan Snook將樣式分爲了5個部分:ide
另外,還建議對屬於某個特定分組的類設定命名空間,併爲JavaScript中使用的類使用單獨的命名空間。模塊化
這種方法使得編寫和維護代碼都更加容易,而且吸引了不少開發者。佈局
使用Atomic CSS,爲每個可重用的屬性建立一個單獨的類。好比 margin-top: 1px;就能夠建立一個類 mt-1,width: 200px;能夠建立一個w-200。
這種風格容許經過重複聲明來儘量減小代碼,而且改變模塊樣式也相對容易,for example, when changing a technical task.
然而,這種方法也有很大的缺點:
由於這些缺點,這種方法遭到了大量批評。可是,這種方法對於大型項目而言,仍是頗有效的。
此外Atomic CSS也被用在不一樣的框架裏來指明矯正元素樣式,還有一些其它方法的展示層。
MCSS是多層CSS。這種書寫代碼的風格建議將樣式分爲幾個部分,稱爲層(layers)。
層級之間的交互層次是很重要的:
AMCSS就是"Attribute Modules for CSS(css的屬性模塊)"。
讓咱們看一個例子:
<div class="button button--large button--blue">Button</div>
這樣一個類的鏈並不簡單,因此讓我經過屬性來組織這些值。
結果以下:
<div button="large blue">Button</div>
爲了不命名衝突,添加命名空間到屬性上是個好主意。而後,咱們的按鈕就變成了下面的樣子:
<div am-button="large blue">Button</div>
若是你使用驗證器檢查代碼,會發現並無am-button這個屬性,因此能夠在屬性名稱前加上data-。
使用一個不爲人知,做爲class屬性的選擇器"~ =" (IE7+):該選擇器選擇屬性值包含指定單詞的元素,用空格分隔。因此,這種class~="link"的選擇器相似於a.class.button這樣的選擇器。即便專門使用,由於class選擇器也只是該屬性選擇器的特殊狀況。
所以,CSS代碼
.button {...} .button--large {...} .button--blue {...}
轉換爲
[am-button] {...} [am-button~="large"] {...} [am-button~="blue"] {...}
若是你以爲這樣的代碼不常見,也可使用不那麼激進的AMCSS形式:
<div am-button am-button-large am-button-blue></div>
FUN 表示選擇器的扁平結構(Flat hierarchy of selectors),功能樣式(Utility styles),命名分割組件(Name-spaced components)。
每一個字母后面都有特定的原則:
一些開發者注意到使用這種原則來書寫和維護代碼是至關方便的;在某種程度上,做者拿出了最好的成果,而且以一種簡潔的方式展現了這項技術。
這種方法對項目和代碼結構還有不小要求,它只創建記錄元素的首選形式和標記使用的方法。可是在小項目中,這些規則足夠建立出足夠高質量的代碼。
正如你所見,這些方法裏並無一個完美的。這些方法中沒有一條絕對的規則——你能夠從開始使用一套方案來建立你本身的東西, 或者從頭開始建立一條新的方法。