这是我参与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