這是我參與8月更文挑戰的第3天,活動詳情查看:8月更文挑戰css
CSS
預處理器用的是SCSS
。BEM
,藉此機會分享一下。container
,那他的左邊內容呢?右邊內容呢?left-container
?right-container
?若是內容裏面還有內容呢,原諒我英語很差,我仍是會想用container
,要瘋🤷♂️。class
既要表達清楚這個樣式表明什麼又要不能有重複,樣式重複的後果你們懂的都懂,因此我才說這對大部分前端來講是挺難的一個問題,但對一小部分前端程序員來講根本不值一提,爲何這麼說呢?由於我碰見過名字按順序one
,two
和three
來排列的class
名,我想這可能對他們來講不算什麼事吧🤦♂️。actived
來表明被激活
被選中
,用了這個以後本能的其餘的模塊動態仍是會想用這個名字actived
,若是有同感的能夠留個讚了,說明咱們是一類人哈哈哈😵。BEM
— Block Element Modifier
是一種幫助您在前端開發中建立可重用組件和代碼共享的方法,由 Yandex
團隊提出的一種前端 CSS
命名方法論。BEM
說白了就是把樣式按照B
E
M
三種來進行命名。BEM:前端
Block
一個獨立的模塊,一個自己就有意義的獨立實體 好比:header
、menu
、container
Element
元素,塊的一部分可是自身沒有獨立的含義 好比:header title
、container input
Modifier
修飾符,塊或者元素的一些狀態或者屬性標誌 好比:small
、checked
BEM
的基本概念後接下來就是使用了,上面我也說了,說白了BEM
也就是把三個鏈接在一塊兒組成一個class
名,那怎麼鏈接他們三呢?BEM
提出的一個概念是用鏈接符號來表達,它並不規定必須用什麼鏈接符,但規定用不一樣鏈接符作團隊內約定區分BEM 3類元素。B
其實能夠理解成一個模塊,就好比Element
的el-button
、Ant Design
的ant-btn
。E
的鏈接用官方的方式就是塊名稱加兩個下劃線加元素名稱構成( __
)就好比Element
的el-radio__input
。M
的鏈接用官方的方式就是.block__elem--mod
,就好比Element
的el-button--small
、vant
的van-button--danger
。js
開發而用框架開發一個道理。方便查看
BEM
可讓開發人員在樣式命名上就知道這個樣式屬於哪裏,從名字就能夠知道某個標記的含義,假設一個樣式命名left-content
,光是找這個樣式在哪裏就已經很麻煩了。結構明瞭
在咱們用scss
和less
預處理器的時候都習慣嵌套不少層,但有了BEM
命名後模塊層級關係簡單清晰,並且css
書寫上也沒必要做過多的層級選擇。可複用性
在寫了一個元素的樣式後須要對他的修飾符進行拼接樣式修改,咱們在scss
中可使用@mixin
作些處理拼接E
和M
放到公共的scss
中別的地方再進行復用,就好比element
的mixins配置。說了這麼多光看文字也煩了吧,仍是放個簡單的代碼示例出來你們品吧,下面是一個按鈕的組件封裝。git
<template>
<button
class="zl-button"
:class="[
type ? 'zl-button--' + type : '',
size ? 'zl-button--' + size : ''
]"
type="button"
>
<slot />
</button>
</template>
<script>
export default {
name: 'ZlButton',
props: {
type: {
validator (value) {
return oneOf(value, ['default', 'primary', 'info', 'success', 'warning', 'danger']);
},
type: String,
default: 'default'
},
size:{
validator (value) {
return oneOf(value, ['','medium', 'small', 'mini']);
},
type: String,
default: ''
}
}
};
</script>
複製代碼
zl-button
能夠看到這裏用了B
的鏈接。zl-button--small
能夠看到這裏用了B
+M
中間用--
鏈接起來來表明塊和修飾符鏈接。GET BEMgithub
如何優雅的使用Vuepress編寫組件示例(上)👈markdown