CSS分層

  • 為什么要分層?
  • SMACSS
  • BEM
  • SUIT
  • ACSS
原因
  • CSS有語義化的命名約定和CSS層的分離,將有助于它的可擴(kuò)展性,性能的提高和代碼的組織管理
  • 大量的樣式,覆蓋、權(quán)重和很多!important,分好層可以讓團(tuán)隊(duì)命名統(tǒng)一規(guī)范,方便維護(hù)
  • 有責(zé)任感的去命名你的選擇器

SMACSS

SMACSS(Scalable and Modular Architecture for CSS 可擴(kuò)展的模塊化架構(gòu)的CSS)像OOCSS一樣以減少重復(fù)樣式為基礎(chǔ)。然而SMACSS使用一套五個(gè)層次來劃分CSS給項(xiàng)目帶來更結(jié)構(gòu)化的方法:

  • Base 設(shè)定標(biāo)簽元素的預(yù)設(shè)值 PS:html{} input[type=text]{}
  • Layout 整個(gè)網(wǎng)站的 ‘大架構(gòu)’ 的外觀 PS:#header{margin: 30px 0;}
  • Module 應(yīng)用在不同頁面公共模塊 PS:.button{}
  • State 定義元素不同的狀態(tài) PS:.nav-main{}
  • Theme 畫面上所有 ‘主視覺’ 的定義 PS:border-color、background-image

BEM(不是說都要加下劃線,主要針對(duì)的是整體)

BEM和SMACSS非常類似,主要用來如何給項(xiàng)目命名。一個(gè)簡(jiǎn)單命名更容易讓別人一起工作。比如選項(xiàng)卡是一個(gè)塊(Block),這個(gè)塊里的元素是標(biāo)簽之一(Element),而當(dāng)前選項(xiàng)卡是一個(gè)修飾狀態(tài)(Modifier):

  • block 代表了更高級(jí)別的抽象或組件
  • block__element 代表.block的后臺(tái),用于形成一個(gè)完整的.block整體。
  • .block--modifier 代表.block的不同狀態(tài)或不同版本。
  • 修飾符使用的是,子模塊使用_符號(hào)。
    BEM

SUIT

SUIT起源于BEM,但是它對(duì)組件名使用駝峰式和連字號(hào)把組件從他們的修飾和子孫后代中區(qū)分出來:

  • 修飾符使用的是,子模塊使用_符號(hào)。
    SUIT

    如果你不想使用如此嚴(yán)格或者復(fù)雜的命名規(guī)則,給每一個(gè)選擇器前加前綴同樣可以達(dá)到這樣的效果。
.s-product-detauils{}
.t-product-detauils{}
.js-product-detauils{}

結(jié)構(gòu)屬性將會(huì)被應(yīng)用到s-product-details選擇器中。主題屬性將應(yīng)用于t-product-details選擇器。

ACSS

考慮如何設(shè)計(jì)一個(gè)系統(tǒng)的接口。原子(Atoms)是創(chuàng)建一個(gè)區(qū)塊的最基本的特質(zhì),比如說表單按鈕。分子(Molecules)是很多個(gè)原子(Atoms)的組合,比如說一個(gè)表單中包含了一個(gè)標(biāo)簽,輸入框和按鈕。生物(Organisms)是眾多分子(Molecules)的組合物,比如一個(gè)網(wǎng)站的頂部區(qū)域,他包含了網(wǎng)站的標(biāo)題、導(dǎo)航等。而模板(Templates)又是眾多生物(Organisms)的結(jié)合體。比如一個(gè)網(wǎng)站頁面的布局。而最后的頁面就是特殊的模板。


ACSS

ITCSS

  • Settings 全局可用配置,設(shè)置開關(guān)。$color-ui:#BADA55;$spacing-unit:10px;
  • Tools通用工具函數(shù)。@mixin font-color(){font-color:$color-ui;}
  • Generic 通用基礎(chǔ)樣式。Normalize,reset,boxsizing:border-box;
  • Base 未歸類的html元素。ul{list-style: square outside;}
  • Objects設(shè)計(jì)部分開始使用專用類。.ul-list__item{padding:$spacing-unit};
  • Components 設(shè)計(jì)符合你們的組件.products-list{@include font-brand();border-top:1px solid $color-ui;}
  • Trumps 重寫,只影響一塊的DOM。(通常帶上我們的!important)(比如只有顏色不一樣)

最后我列出一些我將要用到的技巧,并且堅(jiān)持做下去:

  • 盡量不讓自己的樣式層級(jí)超過三層
  • 盡量不使用!important,通過添加和使用類名,比如.hidden類名
  • 盡量遠(yuǎn)離Sass中介紹@extend的一般經(jīng)驗(yàn)法則——他們有些是迷惑人
  • 盡量在樣式表中添加注釋
  • 讓團(tuán)隊(duì)寫CSS有一個(gè)標(biāo)準(zhǔn)規(guī)范——Harry Roberts寫了一個(gè)很有名的CSS指南
  • 此外,應(yīng)該有一個(gè)可以展示元素樣式的模塊庫
  • 使用類似scss-lint工具,讓你的SCSS/CSS和規(guī)范保持一致
  • 盡量不要使用*這樣的全局選擇器
  • JavaScript鉤子是使用的類名,盡量加上前綴js-
  • 盡量在項(xiàng)目中重復(fù)使用類名和模塊
  • 取名盡量和Bootstrap框架的組件接近
  • 在樣式中避免使用#id

擴(kuò)展閱讀:
www.leemunroe.com/css
https://www.w3cplus.com/css/css-sass-scss-compass-less-bem-smacss-oocss-acss-ccss-wtfss.html
eslint: http://www.itdecent.cn/p/2bcdce1dc8d4

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

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

  • Android 自定義View的各種姿勢(shì)1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 179,023評(píng)論 25 709
  • 編寫css是前端工作中,一項(xiàng)普通而又頻繁的勞動(dòng),由于css并不是一門語言,所以在程序設(shè)計(jì)上顯得有些簡(jiǎn)陋。對(duì)于小型項(xiàng)...
    Jack_Lo閱讀 5,864評(píng)論 15 39
  • 今天是2015年1月1日,是時(shí)候開始每年給自己定個(gè)規(guī)劃了。 回顧2014 2014年,是認(rèn)識(shí)自己的一年,先羅列些影...
    JasonWayne閱讀 449評(píng)論 0 5
  • 夜半驚醒,窗外正下著淅淅瀝瀝的雨,點(diǎn)點(diǎn)滴滴敲打著屋檐,一聲聲趕走夜的寂靜。 遠(yuǎn)離了白日的喧囂,潛藏在最隱秘角落處的...
    憶海忘川閱讀 259評(píng)論 0 0
  • 參考書目:《時(shí)間管理:如何充分利用你的24小時(shí)》 一句話概括:時(shí)間就像海綿里的水,擠擠總會(huì)有的。那么如何擠出海綿里...
    Molly郭兒閱讀 499評(píng)論 0 2

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