CSS命名規範節約Debug時間解答

來源:互聯網
上載者:User
本文主要和大家分享CSS 命名規範可以節約 Debug 時間的相關知識,感興趣的朋友一起看看吧,希望能協助到大家。Debug CSS 是一種很耗時的操作,如果有良好的命名規範可以節約很多的 Debug 時間。

簡評:Debug CSS 是一種很耗時的操作,如果有良好的命名規範可以節約很多的 Debug 時間。

使用連字號('-')分隔字串

你可能習慣了在 Javascript 中使用小駝峰的命名方式:

var redBox = document.getElementById('...')

但是在 CSS 中不建議使用這種命名方式:

.redBox {   border:1px純紅色; }

而應該使用這種:

.red-box {    border:1px純紅色; }

這是一個標準的 CSS 命名規則,有更好的可讀性。

此外,他和 CSS 屬性名稱一致。

//正確.some-class {    font-weight:10em }//錯了.some-class {    fontWeight:10em }

BEM 命名規範

團隊有不同的方法來編寫 CSS 選取器。一些團隊使用連字號分隔字元,而其他團隊則傾向於使用更加結構化的稱為 BEM 的命名規範。

一般來說,CSS 命名規範有三個問題要解決:

  1. 能夠通過名字就能清楚選取器的功能。

  2. 能夠看出選取器在哪裡可以使用。

  3. 能夠看出 class 之間的關係。

你有沒有見過這樣寫的類名:

.nav--secondary {  ...}.nav__header {  ...}

這就是 BEM 命名規則。

B 代表塊(Block)

BEM 試圖將整個使用者介面分成可重用獨立的塊(Block,注意這裡的 Block 並非指 inline-block),一個 header 是一個 block,header 裡面嵌套的元素(logo、input、menu)也可以是 block 。

舉個例子下面的圖片:

這是一個火柴人(我們可以把它看做一個 Block),按照之前的說法,這個組件的命名我們可以設為 stick-man 。

主鍵的樣式應該如下所示:

.stick-man {   }

E 代表元素

Block 中一般會有多個元素,舉個例子:火柴人有一個 head,兩個 arms 和 feets

head、feet、和 arms 是該組件中的所有元素。使用 BEM 命名規則,通過雙底線串連塊(Block)和元素(Elements)方式來命名。

.stick-man__head {}.stick-man__arms {}.stick-man__feet {}

M 代表修飾符

BEM 中 M 代表修飾,可以對塊(Block)或元素(Element)進行修飾(外觀或行為的調整),我們可以調整我們的火柴人產生藍色火柴人和紅色火柴人(實際上我們可能需要一個藍色按鈕和一個紅色按鈕)。

使用 BEM 的命名規則我們使用雙串連符來命名('--')

例如:

.stick-man--blue {}.stick-man--red {}

修飾符也可用於元素(element),例如我們只想調整火柴人的頭部大小。我們可以這樣命名

.stick-man__head--small {}.stick-man__head--big {}

以上就是 BEM 的命名方式,這種命名方式雖然有點囉嗦但是在複雜的工程中可以很好的理清各部分之間的關係,如果只是簡單的工程直接使用分隔字元命名就行了。

在 JavaScript 中用到的 CSS 類名應該如何命名

當你看到這個篇文章開始著手重構自己的項目。

你將原來的代碼:

<p class="siteNavigation"></p>

改成了:

<p class="site-navigation"></p>

這看著很棒,但是你忘了你在某個地方(JavaScript)用到了這個類名:

//the Javasript codeconst nav = document.querySelector('.siteNavigation')

這個時候 nav 將會得到 null。

為了防止這種情況,我們可以使用如下的命名來提醒我們。

使用 'js-*' 來命名

我們可以使用 js- 來命名我們的類:

<p class="site-navigation js-site-navigation"></p>

在 JavaScript 代碼我們使用 js-site-navigation 來擷取該 DOM:

//the Javasript codeconst nav = document.querySelector('.js-site-navigation')

現在我們只要一看到 js- site-navigation 就會想到,在某個 JavaScript 代碼中使用該類名擷取 DOM 對象。

相關文章

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.