BEM

BEM

There are only two hard problems in Computer Science: cache invalidation and naming things — Phil Karlton

BEM 是CSS的一種命名規(guī)范。BEM 分別是 Block、Element、Modifier

Block

Block 在BEM中就屬于一個模塊,這個模塊代表了頁面中的一個獨立的部分。
BEM 的規(guī)范是使用最簡單的類名來代表一個Block,BEM 規(guī)定Block 類名只能使用字母、數(shù)
字、破折號。并且一個Block類名就代表一個Block, 不使用用任何id 屬性等其他一些亂七八糟的東西. 一個好的Block名可以為 .i18n-header .

Element

Element 跟Block 捆綁在一起.
Element 類名比 Block 類名多了可以使用下劃線,還是雙下劃線。
在我們初學(xué)的使用會很自然的使用這樣的CSS選擇器來表示子類元素:.parent .children。 但是在 BEM 中為了使用更簡單的權(quán)重,BEM使用 一個類名來表示:.parent\_\_children 。雖然寫起來可能有點麻煩,但是你可以結(jié)合預(yù)處理語言,比如SCSS。同樣Element也
不會結(jié)合其他類名、id、其他父級元素來給頁面元素設(shè)置樣式,就簡單的寫在 .[Block]__[Element] 這樣的類名下。

Modifier

前面的 Block 和 Element 都可以想象成頁面中的某些元素或者塊。但是像一些元素的狀態(tài)這些就不能用前面兩個表示了。這些都?xì)w于 Modifier 管。
Modifier 不想 Element ,Modifier 跟Block Element 都沒有層級關(guān)系。他只是一個狀態(tài)
的表示。
Modifier 的命名就想 Element ,Modifier類名是在Block 或者 Element類名后面加--modifier. Modifier 比較特別,他可以結(jié)合Block 或者 Element來給DOM設(shè)置樣式。比如:.Block--big .Block__Elemnt { }

Example

我們來看看BEM官方是怎么寫樣式的(styl):

/* Block */
.navbar
  padding: 0 0 0 0

/* Modifier */
.navbar__item--title
  a
    &:hover
      color: white
  font-size: 18px

.navbar__menu
  font-size: 12px
  ul
    padding: 0
    li
      white-space: nowrap
      &.navbar__item--active
        background-color: rgba(22, 22, 22, .5)
        a
          color: $black
      a
        color: white
        &:hover
          text-decoration: underline

深入淺出

其實到這里你就已經(jīng)知道BEM大概是個什么東西了??梢钥垂俜轿臋n,(前段時間畢業(yè)了我
明顯的發(fā)現(xiàn)程序不看英文都是垃圾)。
為了能夠?qū)W好他,我覺得還是下載官方源碼學(xué)習(xí)學(xué)習(xí)。BEM 's github

通過看起代碼發(fā)現(xiàn)了寫東西:

  1. 不是每個樣式都放在.className中,還是有很多寫在tabName下的。
  2. Block 和 Element 這樣的類名一般都只會在選擇器的開始,除了少數(shù)在Modifier和后面。也就是說不會出現(xiàn)這樣的css : table .Block {} 。
  3. Modifier 相比之下很是隨意。只要不結(jié)合不正確的Block 和 Element 就行。

BEM get

武漢的天氣開始熱了,我談了個女票。武漢的妹子又白又長,可惜我談的是廣東的。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 【譯】前端BEM命名方法論之一:BEM 官方簡介文檔【譯】前端BEM命名方法論之三:命名慣例 重要概念 Block...
    咚門閱讀 5,414評論 0 7
  • 前言 為什么不用ID標(biāo)識符 主要考慮到樣式重用性以及與頁面的耦合性。ID本來就是唯一的而且權(quán)值那么大,還不如寫在行...
    brandonxiang閱讀 1,113評論 0 3
  • 問答題47 /72 常見瀏覽器兼容性問題與解決方案? 參考答案 (1)瀏覽器兼容問題一:不同瀏覽器的標(biāo)簽?zāi)J(rèn)的外補...
    _Yfling閱讀 14,204評論 1 92
  • 設(shè)計師學(xué)編程遇到BEM 許多人第一次看到BEM都會覺得這東西好繁雜好長好難用啊,與之不同的是我第一次接觸BEM的時...
    ketchupyan閱讀 1,868評論 0 7
  • CSS是一門15分鐘就能入門,但是卻需要很長很長的時間才能掌握好的語言。它有著它自身的一些復(fù)雜性與局限性。其中非常...
    AlienZHOU閱讀 1,794評論 0 8

友情鏈接更多精彩內(nèi)容