面向對象的 CSS。OOCSS 的想法首先要明白 CSS 的 「Object」 是個毛線玩意。html
CSS的樣式是須要應用到頁面的結構上的。通俗的講就是須要應用到HTML標籤上。好比一個頁面上的一個區域、控件、標籤等,就是一個 Object ,大部分狀況下,這種 Object 確定是能夠複用的。ide
常見的好比 Button按鈕。視覺上就多是一個圖形按鈕,而後咱們能夠在其上面添加各類樣式,以得到咱們想要的效果。spa
Tag : button
calss: btn
OOCSS 有個特色就是結構和樣式是分開的,好比說一個漸變按鈕,那麼 .btn 的 class 是不會包含漸變相關的屬性的,而是須要單獨抽取出一個漸變的 class,而後讓 .btn 去擴展從而獲得一個漸變的按鈕。設計
.btn {//結構 ... } .btn.btn-info {//樣式 backgrond: green; }
//這彷佛有點像Bootstrap的味道
就像官方說的那樣,一個 Object 包含了四個部分:code
另外一個特色在於,OOCSS 認爲 container 和 content 是須要隔離開的(這裏的container只是將一塊區域包裹起來,並不具備任何特殊的意義)。也就是說,儘可能不要去使用依賴於節點結構位置的樣式定義。好比這樣的就是不容許的:htm
.video-container .title{ ... }
OOCSS 中會建議你直接這樣去寫:也就是直接去寫這個元素。對象
.title{ ... }
BEM是一套嚴格但合理的命名規範使得你的 class 保持一個較好的可讀性和維護性。方便合做開發,別人容易讀得懂你的代碼,你也容易維護好你的樣式。blog
格式爲:事件
.block{} .block__element{} .block--modifier{}
格式大約就是如上所屬那樣,固然,有一點須要注意,多層 DOM 節點的狀況下正確的寫法應該是這樣的:圖片
<div class="block"> <div class="block__e1"> <button class="block__e2"></button> </div> </div>
Stackoverflow 上有個特別好的解釋對於 BEM 的說法點這裏查看
簡單說,就是 html 是一個 DOM樹,那麼你在寫樣式的的時候就寫成一個 BEM樹一一對應就能夠了。看例子:
html:
<ul> <li> <a> <span></span> </a> </li> </ul>
DOM樹中有以下四個節點:
ul
ul>li
ul>li>a
ul>li>a>span
那麼對應的咱們就能夠設計出以下的 BEM class:
<ul class="menu"> <li class="menu__item"> <a class="menu__link"> <span class="menu__text"></span> </a> </li> </ul>