CSS架構(gòu)之BEM設(shè)計(jì)模式

為什么需要CSS架構(gòu)狂男?

其實(shí)在日常開(kāi)發(fā)CSS當(dāng)中,會(huì)遇到許多的問(wèn)題,使用設(shè)計(jì)模式能夠很好的解決避消。例如在日常開(kāi)發(fā)項(xiàng)目,需要組件化時(shí)召夹,組件內(nèi)部的class樣式類(lèi)管理就非常的雜亂岩喷。 大部分公司的命名規(guī)則還是只有大小駝峰、使用英文等這些基礎(chǔ)的命名規(guī)則监憎。經(jīng)常會(huì)自己都忘了自己命名的css是啥纱意,使用設(shè)計(jì)模式就能很好的解決該問(wèn)題。

CSS架構(gòu)也能讓html與css更好的解耦鲸阔,能更好的抽取樣式中可復(fù)用的部分偷霉,使你的html代碼更具語(yǔ)義,也符合了HTML5中想讓日常開(kāi)發(fā)更具有語(yǔ)義化的理念褐筛。了解這些設(shè)計(jì)模式無(wú)疑會(huì)使css代碼更具模塊化类少,塊樣式不依賴(lài)于頁(yè)面上的其他元素,因此也較好的避免了遇到級(jí)聯(lián)問(wèn)題渔扎。多人協(xié)作的時(shí)候硫狞,也能高效避免命名重復(fù)問(wèn)題。最重要是提取精華晃痴,靈活應(yīng)用残吩,更加的規(guī)范規(guī)模化倘核,在達(dá)到提高效率的同時(shí)兼顧性能泣侮。

最重要的是,不用再為命名CSS絞盡腦汁了紧唱。

BEM的簡(jiǎn)介

BEM就是:

  • B代表:Block(塊)活尊,獨(dú)立實(shí)體,獨(dú)立的意義漏益,每個(gè)頁(yè)面都可以看做是多個(gè)Block組成,見(jiàn)下圖1-1酬凳;
  • E代表:Element(元素),block 的一部分遭庶,沒(méi)有獨(dú)立意義宁仔,是組件下的一個(gè)元素,多個(gè)元素形成一個(gè)組件峦睡,見(jiàn)下圖1-2;
  • M代表: Modifier (修飾符)榨了,block 或 element 上的標(biāo)記,是描述Block或Element的屬性或狀態(tài)龙屉,同一Block或Element可以有多個(gè)Modifier满俗。

BEM全稱(chēng)BlockElementModifier是由Yandex(俄羅斯最著名的互聯(lián)網(wǎng)企業(yè))的開(kāi)發(fā)團(tuán)隊(duì)提出的前端開(kāi)發(fā)理論。通過(guò)Block作岖、Element唆垃、Modifier來(lái)描述頁(yè)面痘儡,通過(guò) _-- 連接 ,關(guān)鍵就是為了解決多人協(xié)作的命名問(wèn)題沉删。


<p align=center>[1-1.block圖解]</p>


<p align=center>[1-2.Element圖解]</p>

BEM的基礎(chǔ)使用

模塊block()

沒(méi)有前綴渐尿,多個(gè)單詞用 - 連接,是對(duì)一個(gè)組件名抽象矾瑰。

例如:

 //一個(gè)普通列表的a標(biāo)簽
 <li><a class='li-a'>...</a></li>
 
 //一個(gè)在導(dǎo)航欄的a標(biāo)簽
 <li><a class='nav-li-a'></a></li>
 
 //一個(gè)被選中的在導(dǎo)航欄的a標(biāo)簽
 <li><a class='nav-li-a is-active'></a></li>
 
 //一個(gè)在頭部的圖片
 <header>
    <img class="header-img" src="#" alt="#">
 </header>

元素Element

元素在模塊之后砖茸,可以有多個(gè)層級(jí)殴穴,以 __ 連接。element 也不是死板的推正,是根據(jù)具體的需求演變的,中間也可以使用 - 來(lái)演變再沧。

<li class="nav--main__item  js-nav--main__item"><a>...</a></li>
<li class="nav--main__item  js-nav--main__item"><a>...</a></li>
<li class="nav--main__item  js-nav--main__item"><a>...</a></li>


 //幾個(gè)普通列表的a標(biāo)簽
 <li>
   <a class='li-a__item'>...</a>
   <a class='li-a__item'>...</a>
   <a class='li-a__item'>...</a>
  </li>
 //幾個(gè)在導(dǎo)航欄的a標(biāo)簽
 <li>
   <a class='nav-li-a__item'></a>
   <a class='nav-li-a__item'></a>
   <a class='nav-li-a__item'></a>
 </li>

修飾Modifier

某元素尊残、或者某模塊特別的狀態(tài)炒瘸,必須有一個(gè)狀態(tài)名和狀態(tài)值寝衫,使用 _ 鏈接

主要針對(duì)的是 Block 本身,是對(duì)于Block做修飾。例如有:

  • 顏色
  • 大小
  • 用途

案例:

 //一個(gè)用作logo的圖片
 <header>
    <img class="header-img_logo" src="#" alt="#">
 </header>

使用BEM的好處

  • 使html代碼更具語(yǔ)義
  • 使css代碼更具模塊化
  • 多人協(xié)作的時(shí)候隘截,也能高效避免命名重復(fù)問(wèn)題
  • 更加的規(guī)范規(guī)男谖福化
  • 減輕CSS命名煩惱
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市着饥,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌呵哨,老刑警劉巖,帶你破解...
    沈念sama閱讀 217,277評(píng)論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件拒炎,死亡現(xiàn)場(chǎng)離奇詭異纹坐,居然都是意外死亡枝冀,警方通過(guò)查閱死者的電腦和手機(jī)舞丛,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,689評(píng)論 3 393
  • 文/潘曉璐 我一進(jìn)店門(mén)球切,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人吨凑,你說(shuō)我怎么就攤上這事⊥叶郏” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 163,624評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵变逃,是天一觀的道長(zhǎng)怠堪。 經(jīng)常有香客問(wèn)我,道長(zhǎng)粟矿,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,356評(píng)論 1 293
  • 正文 為了忘掉前任撒犀,我火速辦了婚禮掏秩,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘嚷那。我一直安慰自己,他們只是感情好魏宽,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,402評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著派桩,像睡著了一般。 火紅的嫁衣襯著肌膚如雪铆惑。 梳的紋絲不亂的頭發(fā)上送膳,一...
    開(kāi)封第一講書(shū)人閱讀 51,292評(píng)論 1 301
  • 那天,我揣著相機(jī)與錄音撕阎,去河邊找鬼。 笑死虏束,一個(gè)胖子當(dāng)著我的面吹牛厦章,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播袜啃,決...
    沈念sama閱讀 40,135評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼晃择!你這毒婦竟也來(lái)了也物?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 38,992評(píng)論 0 275
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤滑蚯,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后坤次,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體斥赋,經(jīng)...
    沈念sama閱讀 45,429評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,636評(píng)論 3 334
  • 正文 我和宋清朗相戀三年滑绒,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片疑故。...
    茶點(diǎn)故事閱讀 39,785評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖踱阿,靈堂內(nèi)的尸體忽然破棺而出钦铁,到底是詐尸還是另有隱情软舌,我是刑警寧澤育瓜,帶...
    沈念sama閱讀 35,492評(píng)論 5 345
  • 正文 年R本政府宣布躏仇,位于F島的核電站,受9級(jí)特大地震影響焰手,放射性物質(zhì)發(fā)生泄漏怀喉。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,092評(píng)論 3 328
  • 文/蒙蒙 一躬拢、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧聊闯,春花似錦、人聲如沸篷帅。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,723評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)蚪腐。三九已至,卻和暖如春回季,著一層夾襖步出監(jiān)牢的瞬間掉房,已是汗流浹背慰丛。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,858評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留哪亿,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 47,891評(píng)論 2 370
  • 正文 我出身青樓蝇棉,卻偏偏與公主長(zhǎng)得像芥永,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子埋涧,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,713評(píng)論 2 354

推薦閱讀更多精彩內(nèi)容

  • 系列文章 CSS 架構(gòu)之OOCSS[https://juejin.cn/post/7021067874139635...
    CondorHero閱讀 3,978評(píng)論 0 0
  • 本文章參考鏈接:https://blog.csdn.net/qq_27263045/article/details...
    艾薩克菊花閱讀 232評(píng)論 0 0
  • BEM 是對(duì) CSS 命名的一種規(guī)范劲弦,推崇將 WEB 頁(yè)面模塊化醇坝,從而提高代碼的重用度邑跪,減少后期維護(hù)的成本呼猪。原文 ...
    Jadyn閱讀 5,867評(píng)論 0 12
  • BEM 基于組件方式的web開(kāi)發(fā)方法,基本思想是將用戶(hù)界面分成獨(dú)立的模塊轴踱。 Block(塊) (通常指模塊,組件)...
    mocobk閱讀 3,893評(píng)論 0 1
  • 什么是BEM BEM是Block(塊)寇僧、Element(元素)沸版、Modifier(修飾符)的簡(jiǎn)寫(xiě),是一種組件化的 ...
    前白閱讀 517評(píng)論 0 1