BEM命名 css模塊化解決方案

BEM Block Element Modifiercss

閱讀

http://getbem.com/introduction/
https://cssguidelin.es/#bem-l...
https://www.w3cplus.com/css/s...
http://www.sohu.com/a/1501527...

相似

http://suitcss.github.io/
https://smacss.com/ scalable modular architecture
http://oocss.org/ object oriented

爲何要用BEM

網絡發展是由模塊化的目的驅動的:將項目分割成幾部分以使其易於管理。Web組件
1.避免繼承,並經過每一個元素(如)使用獨特的 CSS類提供某種範圍。.my-component__list-item
2.經過將CSS 特性保持在最低水平來減小樣式衝突。
3.模塊化環境中繞過繼承
4.嵌套選擇器提升了CSS的特異性。須要變得更具體,以贏得現有的特異性。模塊化上下文須要低特異性html

塊(block)

獨立的實體,它自己是有意義的。
雖然塊能夠嵌套和相互做用,在語義上,他們保持平等; 沒有優先級或層次結構。
僅使用類名稱選擇器
沒有標籤名稱或ID
不依賴頁面上的其餘塊/元素
header,container,menu,checkbox,input,logo,buttongit

<div class =「block」> ... </div>
.block {color:#042; }

元素(element)

塊的一部分,沒有獨立的含義,在語義上與塊相關聯
任何元素都被語義綁定到它的塊。
menu__item,list__item,checkbox__caption,header__title,menu__elementsgithub

<div class =「block」>
      ...
    <span class =「block__elem」> </ span>
</div>
.block__elem {color:#042; }

修飾(modifier)

塊或元件上的標誌。
用它們來改變外觀,行爲或狀態
.block--mod或.block__elem--mod和.block--color-black與.block--color-red。複雜修飾符中的空格被短劃線代替
disabled,highlighted,checked,fixed,size big,color yellow,
input size big ,button theme green網絡

<div class="block block--mod">...</div>
<div class="block block--size-big block--shadow-yes">...</div>

例子(Example)

<form class="form form--theme-xmas form--simple">
  <input class="form__input" type="text" />
  <input
    class="form__submit form__submit--disabled"
    type="submit" />
</form>
.form { }
.form--theme-xmas { }
.form--simple { }
.form__input { }
.form__submit { }
.form__submit--disabled { }
<form class="site-search  site-search--full">
    <input type="text" class="site-search__field">
    <input type="Submit" value ="Search" class="site-search__button">
</form>

Sass3.3 for BEM

.note {
  color: #ffffff;

  &__content {
    background: white;
  }

  &__meta {
    background: #f1f1f1;
    border-top: 1px solid #eee;
  }

  &--featured {
    box-shadow: 0 3px 1px rgba(0, 0, 0, 0.1);
  }

}
$module: 'note';

.#{$module} {
  // By default, our note has a white background…

  &__content {
    background: white;
  }

  // But 「featured」 notes have an offwhite background

  &--featured {

    .#{$module}__content {
      background: #eee;
    }

  }

}
相關文章
相關標籤/搜索