自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

兩種 CSS 方法論你知道嗎?

開(kāi)發(fā) 前端
說(shuō)起 CSS 命名規(guī)范,大家應(yīng)該都很熟悉,或者應(yīng)該聽(tīng)說(shuō)過(guò) BEM 。BEM 是由 Yandex 團(tuán)隊(duì)提出的一種 CSS Class 命名方法,旨在幫助開(kāi)發(fā)人員創(chuàng)建更好的且結(jié)構(gòu)一致的 CSS 模塊。

[[373989]]

前言

說(shuō)起 CSS 命名規(guī)范,大家應(yīng)該都很熟悉,或者應(yīng)該聽(tīng)說(shuō)過(guò) BEM 。BEM 是由 Yandex 團(tuán)隊(duì)提出的一種 CSS Class 命名方法,旨在幫助開(kāi)發(fā)人員創(chuàng)建更好的且結(jié)構(gòu)一致的 CSS 模塊。

BEM 將頁(yè)面的類名分為塊(Block)、元素(Element)、修飾符(Modifier)。

  • 塊(Block):一個(gè)塊是視覺(jué)上或者語(yǔ)義上的一個(gè)整體,它是一個(gè)具體且唯一的一個(gè)元素,例如,頁(yè)面上的一個(gè)彈窗,或者是一個(gè)搜索框;
  • 元素(Element):一般認(rèn)為是塊的組成部分,元素比較用它父級(jí)的塊名稱做為前綴,例如,彈窗的標(biāo)題、關(guān)閉按鈕、確認(rèn)按鈕;
  • 修飾符(Modifier):修飾符表示一個(gè)具體元素的特定狀態(tài),例如,關(guān)閉按鈕在鼠標(biāo)沒(méi)放上去和放上去的時(shí)候,呈現(xiàn)的兩種狀態(tài)。

現(xiàn)在用 Bootstrap 的彈窗組件,舉一個(gè)更加具體的例子:

鼠標(biāo)放上去和沒(méi)放上去的狀態(tài)是有區(qū)別的。

通過(guò)上面的示例可以看出,塊與元素是通過(guò)兩個(gè)下劃線(__)連接的,而元素和修飾符之間是通過(guò)兩個(gè)短橫線(--)連接的。

當(dāng)然,今天的文章不會(huì)著重介紹什么是 BEM,如果你之前沒(méi)接觸過(guò) BEM 可以嘗試去了解一下,并且多在在項(xiàng)目中試用幾次,感受他的魅力。另外,現(xiàn)在網(wǎng)上已經(jīng)有非常多的文章在介紹 BEM 了,耐心找,肯定能找到優(yōu)秀的教程的。今天的文章會(huì)分享比較少人介紹的兩種 CSS 方法論:SUIT CSS 和 SMACSS。

SUIT CSS

“官方文檔:SUIT CSS命名約定(https://github.com/suitcss/suit/blob/master/doc/naming-conventions.md)

SUIT CSS是一種基于組件開(kāi)發(fā)的 CSS 的方法論,它將類名分為兩種類型:工具類和組件類。

工具類

CSS 中有很多固定工具類,比如:左右浮動(dòng)、文本截?cái)?、垂直居?hellip;…。工具類的作用是幫助程序減少一些重復(fù)代碼,并提供一致的實(shí)現(xiàn)。

命名規(guī)則:u-[sm-|md-|lg-]<工具類名>。工具類使用 u- 打頭,后面接類名(類名使用駝峰的方式命名),中間可以加上 sm、md、lg 這種響應(yīng)式的規(guī)則。

舉個(gè)栗子:

  1. <div class="u-cf"
  2.   <!-- 左浮動(dòng) --> 
  3.   <a class="u-floatLeft" href="https://blog.shenfq.com/"
  4.     👉看看我的博客 
  5.   </a> 
  6.   <!-- 文本截?cái)啵畲髮挾?00px --> 
  7.   <p class="u-textBreak u-maxWidth200"
  8.     愛(ài)折騰的前端工程師,歡迎關(guān)注我的公眾號(hào)「更了不起的前端」 
  9.   </p> 
  10. </div> 

組件類

組件類用來(lái)描述一個(gè)個(gè)具體的組件,組件是構(gòu)成一個(gè)具體應(yīng)用程序的基石,所以組件的設(shè)計(jì)特別重要。

命名規(guī)則:[<命名空間>-]<組件名>[-后代名][--修飾符],這樣的命名方式,在編寫 HTML 和 CSS 的時(shí)候有幾個(gè)好處:

  • 有助于區(qū)分組件的根元素,后代元素,以及用來(lái)修飾的類;
  • 降級(jí)類名重復(fù)的幾率;
  • 能夠讓類名更具有語(yǔ)義化;

下面來(lái)看看命名規(guī)則的各個(gè)部分的具體作用:

命名空間(可選)

命名空間是可選的,如果你希望避免自己定義的組件類名與引入的第三方樣式類名發(fā)生沖突,則可以為自己的類名加上命名空間。但是,如果你們業(yè)務(wù)中不存在第三方的樣式,則可以不帶命名空間。

  1. .sfq-Modal{} /* 我的彈窗組件 */ 
  2. .sfq-Button {} /* 我的按鈕組件 */ 

組件名

組件名使用大駝峰規(guī)則(首字母大寫的駝峰規(guī)則,Pascal Case)來(lái)命名,使用這種方式也可以盡可能的避免出現(xiàn)同名樣式的沖突。

  1. .Modal {} 
  1. <div class="Modal"
  2.   … 
  3. </div> 

組件名-后代名

組件的后代指附加在組件上的一部分,例如,彈窗組件的標(biāo)題、按鈕等等。后代名稱使用小駝峰規(guī)則(首字母大寫的駝峰規(guī)則,Camel Case)命名。

  1. <div class="Modal"
  2.   <header class="Modal-title"
  3.     <h2 class="Modal-titleName">歡迎關(guān)注</h2> 
  4.     <span class="Modal-closeBtn">X</span> 
  5.   </header> 
  6.   <div class="Modal-content"
  7.     愛(ài)折騰的前端工程師,歡迎關(guān)注我的公眾號(hào)「更了不起的前端」 
  8.   </div> 
  9. </div> 

組件名--修飾符

修飾符是一種表示組件特定狀態(tài)的類名,修飾符名稱同樣使用小駝峰規(guī)則來(lái)命名,并且和組件名直接需要用兩個(gè)短橫線(--)進(jìn)行連接,這與 BEM 表現(xiàn)一致。

  1. <button class="Button Button--default">點(diǎn)擊關(guān)注「更了不起的前端」</button> 
  2. <button class="Button Button--primary">點(diǎn)擊關(guān)注「更了不起的前端」</button> 

變量名

SUIT CSS 除了定義了工具類、組件類這兩種命名方式外,還有定義了 CSS 變量的命名方式。命名規(guī)則: --組件名[-后代名|--修飾符]-(CSS屬性|變量名)。

  1. :root { 
  2.   /* 基礎(chǔ)按鈕的背景色 */ 
  3.   --Button--default-backgroundColor: #909399; 
  4.   /* 主要按鈕的背景色 */ 
  5.   --Button--primary-backgroundColor: #409EFF; 

SUIT CSS 小結(jié)

SUIT CSS 除了定義了工具類、組件類的命名方式外,還提供了完整的基礎(chǔ)類,以及測(cè)試套件用來(lái)檢測(cè)你的 CSS 類名是否符合規(guī)范,具體使用方法可以查看官方文檔(https://github.com/suitcss/suit)。SUIT CSS 可以說(shuō)在 BEM 的基礎(chǔ)上進(jìn)行了改進(jìn),特別是去除了雙下劃線的設(shè)計(jì),在觀感上就比 BEM 美觀了許多,而且各種名稱都是通過(guò)駝峰的方式命名,省略了部分短橫線,這讓 SUIT CSS 的類名的長(zhǎng)度上也會(huì)比 BEM 更加精簡(jiǎn)。

SMACSS

“SMACSS 官網(wǎng):http://smacss.com/

SMACSS (Scalable and Modular Architecture for CSS)是一套易開(kāi)發(fā),易維護(hù)的 CSS 編寫的方法論,它將 CSS 規(guī)則一共分為五大類:

  • Base(基礎(chǔ))
  • Layout(布局)
  • Module(模塊)
  • State(狀態(tài))
  • Theme(主題)

你應(yīng)該能在你現(xiàn)有項(xiàng)目的樣式里發(fā)現(xiàn)上面的五個(gè)分類,這幾種類型的樣式混合在一起會(huì)讓你的代碼顯得特別復(fù)雜,如果你有意識(shí)將這些樣式歸類,將大大降低復(fù)雜度。除了將樣式歸類之外,每個(gè)類別還有一些適用的準(zhǔn)則。

基礎(chǔ)規(guī)則

基礎(chǔ)規(guī)則作用于元素選擇器,用于定義 HTML 標(biāo)簽的默認(rèn)樣式?;A(chǔ)樣式主要用于設(shè)置標(biāo)題大小,默認(rèn)鏈接顏色,默認(rèn)字體樣式以及body背景等。

  1. /* 基礎(chǔ)樣式示例 */ 
  2. body, form { 
  3.     margin: 0; 
  4.     padding: 0; 
  5.  
  6. a { 
  7.     color: #039; 
  8.  
  9. a:hover { 
  10.     color: #03F;     

布局規(guī)則

CSS 的本質(zhì)上來(lái)說(shuō)就是布局頁(yè)面中的元素的,但是,頁(yè)面各個(gè)元素也是有主次之分的。例如,頭部、尾部這種大的區(qū)塊就是主要組件,我們稱之為布局(Layout)。而導(dǎo)航欄(屬于頭部),網(wǎng)站說(shuō)明(屬于尾部)這種區(qū)塊為次要組件,我們稱之為模塊(Module)。

下面舉個(gè)具體的案例,來(lái)看看掘金的頁(yè)面布局:

juejin.cn

頁(yè)面上有一個(gè)頭部,一個(gè)導(dǎo)航條,一個(gè)內(nèi)容區(qū)域以及一個(gè)側(cè)邊欄,這些都屬于布局的部分。

juejin.cn

SMACSS 中允許在布局樣式中,使用 ID 選擇器,有助于在 HTML 中一眼區(qū)分出節(jié)點(diǎn)在布局中的位置。其他的非 ID 選擇器的類,需要添加 l- 前綴,表示這屬于布局樣式。

  1. <div id="header"></div> 
  2. <div id="navigation"></div> 
  3. <div id="content" class="l-left"></div> 
  4. <div id="sidebar" class="l-right"></div> 

模塊規(guī)則

前面提到過(guò)模塊,模塊是相對(duì)與布局組件來(lái)說(shuō),更加松散的次要組件,這個(gè)區(qū)分確實(shí)比較模糊,所以有一些方案也取消了布局規(guī)則,將所有可重用組件都劃分為模塊。

模塊規(guī)則在官方文檔沒(méi)有詳細(xì)的命名風(fēng)格,我看了很多文章,在命名模塊的時(shí)候基本都是在參考 BEM,所以這里不再單獨(dú)介紹。

狀態(tài)規(guī)則

狀態(tài)是用來(lái)描述模塊在不同狀態(tài)下的外觀,使用 is- 前綴,這有助于我們?cè)?HTML 中區(qū)分元素的狀態(tài)。

  1. <header id="header"
  2.   <ul class="nav"
  3.   <!-- 表示被選中 --> 
  4.     <li class="nav--item is-selected">歡迎關(guān)注</li> 
  5.     <li class="nav--item">歡迎關(guān)注</li> 
  6.   </ul> 
  7. </header> 

某些狀態(tài)優(yōu)先級(jí)比較高,可以酌情加上 !important,例如用來(lái)控制元素顯示或隱藏的。

  1. .is-hide { 
  2.     display: none !important; 
  3. .is-show { 
  4.     display: block !important; 

SMACSS 小結(jié)

這里沒(méi)有特別介紹主題規(guī)則,因?yàn)橹黝}在當(dāng)前這個(gè)時(shí)間,基本已經(jīng)被 CSS 變量所替代。SMACSS 有很多的規(guī)則這里沒(méi)有詳細(xì)列出來(lái),但是在關(guān)于 CSS 如何命名方面的規(guī)則其實(shí)比較少,而且它的布局規(guī)則與模塊規(guī)則確實(shí)有些模糊,不太好區(qū)分。

本文轉(zhuǎn)載自微信公眾號(hào)「更了不起的前端」,可以通過(guò)以下二維碼關(guān)注。轉(zhuǎn)載本文請(qǐng)聯(lián)系更了不起的前端公眾號(hào)。

 

 

責(zé)任編輯:武曉燕 來(lái)源: 更了不起的前端
相關(guān)推薦

2022-02-25 08:06:48

架構(gòu)

2021-11-02 18:27:48

數(shù)據(jù)挖掘項(xiàng)目

2022-06-27 08:47:29

BEM修飾符元素

2022-03-28 07:36:14

OAuth2安全服務(wù)器

2022-09-29 12:20:48

CSS容器查詢

2023-09-27 08:33:16

作用域CSS

2020-09-11 06:39:29

ThreadLocal線程

2018-07-04 11:02:23

無(wú)線傳輸模式

2019-12-02 10:16:46

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

2015-07-03 11:20:41

編程學(xué)習(xí)方法

2024-09-29 09:16:30

2013-12-25 09:50:27

華為馬悅企業(yè)業(yè)務(wù)

2024-05-28 09:12:10

2024-04-07 00:00:00

ESlint命令變量

2017-06-27 13:50:37

數(shù)據(jù)分析Session

2018-08-07 09:29:35

數(shù)據(jù)庫(kù)MySQL優(yōu)化方法

2023-02-01 08:31:36

JavaScript循環(huán)遍歷

2023-12-12 08:41:01

2023-12-20 08:23:53

NIO組件非阻塞

2024-04-30 09:02:48

點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)