Atitit OOCSS vs bemcss
1. 今天最流行的CSS開發框架技術當屬OOCSS,儘管還有其餘相似的技術存在,如BEM。1html
2.1. OOCSS2git
2.3. 增長 CSS class 重複性的使用2github
真心以爲寫出 CSS 並不難,可是要寫出可被維護的 CSS 比其餘程式語言都還難。所幸已經有許多大師級的人物,提出許多設計模式和思惟,藉由站在巨人的肩膀上可讓事情事半功倍。這篇文章就來講說 OOCSS、SMACSS 和撰寫 CSS 時應該注意的規範。
做者:: ★(attilax)>>> 綽號:老哇的爪子 ( 全名::Attilax Akbar Al Rapanui 阿提拉克斯 阿克巴 阿爾 拉帕努伊 ) 漢字名:艾龍, EMAIL:1466519819@qq.com
轉載請註明來源: http://www.cnblogs.com/attilax/
(本文的例子用的是 SCSS 語法)
OOCSS 不是什麼新技術,只是一種撰寫 CSS 的設計模式,或者能夠說是一種「道德規範」,大體上我以爲重點只有兩個:
1 2 3 4 5 6 7 |
<nav class="nav--main"> <ul> <li><a>.........</a></li> <li><a>.........</a></li> <li><a>.........</a></li> </ul> </nav> |
通常的導航欄寫法,結構應該會像上面的 HTML 範例同樣,若是要對那些 <a> 標籤訂義樣式,CSS 的寫法可能寫成.nav--main ul li a {},這種寫法先無論效能上的問題,能夠看出來過分地依賴元素標籤的結構,有可能以後 HTML 結構改變,這個 CSS 就必須跟著重構,形成維護上多餘的成本。
若從這個例子來考量,原則上 <a> 都必定會接在 <li> 標籤的後面,一個 <li> 只會有一個 <a>,一般不會獨立存在,那就能夠寫成 .nav--main a {},會是比較好的寫法,甚至是直接給 <a> 加上 class nav--main_item。後者是 OOCSS 所提倡的用法。
這樣的寫法,一來效能理論上比較好(我沒辦法驗證),二來層次比較單純。
在 OOCSS 的觀念中,強調重複使用 class,而應該避免使用 id 做爲 CSS 的選擇器。這種想法就是像
OOP
儘可能抽離重複的程式碼,例如如下這個例子,這是兩種按鈕的 CSS 樣式屬性:
1 2 3 4 5 6 7 |
.button { display: inline-block; padding: 6px 12px; color: hsla(0, 100%, 100%, 1); &.button-default { background: hsla(180, 1%, 28%, 1); } &.button-primary { background: hsla(208, 56%, 53%, 1); } } |
上面的 CSS 將兩種不一樣樣式的 button,抽離出重複的部份,而且定義在同個 class
上。所以,要使用這樣的樣式,HTML 的寫法可能長這個樣子:
1 2 |
<a class="button button-default"> <a class="button button-primary"> |
先用 button 宣告此爲一個按鈕的樣式,再用 button-default 或 button-primary 做爲按鈕底色的區別。這麼作能夠維護成本變得比較低,例如:想要改網站上全部按鈕的大小,就只要修改 .button 的 padding 而已。
OOCSS,字面意思是面向對象的CSS,是由Nicole Sullivan提出的css理論,雖然說是理論,實則更像一種程序員間約定的規範:
* Separate structure and skin(分離結構和主題)減小對 HTML 結構的依賴
* Separate container and content(分離容器和內容)增長樣式的複用性
<div class="container-list">
<ul>
<li><a href="#">...</a></li>
<li><a href="#">...</a></li>
<li><a href="#">...</a></li>
</ul>
</div>
· 1
· 2
· 3
· 4
· 5
· 6
· 7
通常咱們在書寫列表的時候結構大概會如上面的結構所示,這種時候咱們若是要對a修改樣式可能常常會用.container-list ul li a這種方式來選擇,一方面這種寫法在效率上比較拙劣,另外一方面一旦咱們在項目後期過程當中對列表中的html結構進行了重構,這意味着咱們同時也須要對css進行重構,使html與css的耦合性變得十分強,形成維護上的困難,也要避免不必的嵌套地獄
而OOCSS推薦的寫法是在a標籤內加上list-item樣式,此時便能經過.container-list .list-item的方式來控制解耦
在 OOCSS 的觀念中,強調重複使用 class,而應該避免使用 id 做爲 CSS 的選擇器。
以BootStrap爲例(BootStrap即是根據OOCSS規範寫的),如下爲LESS文件:
OOCSS追求元件的複用,其class命名更爲抽象,通常不體現具體事物,而注重表現層的抽取.
這樣的寫法能有效提升頁面的可維護性,結合LESS和SASS等預編譯語言更是有無窮的力量,這是若是咱們須要改變整個頁面label的大小,咱們也許只須要改變一下基礎類.label上的樣式即可以了。
使用class not id選擇器
Bem結構...
元素的名稱使用上下文短名稱..
class命名更爲抽象,通常不體現具體事物,而注重表現層的抽取.
CSS設計模式:OOCSS 和 SMACSS - 博客 - 伯樂在線.html
CSS開發框架技術OOCSS編寫和管理CSS的方法_CSS教程_前端技術.htm