BEM小结

    所谓BEM,其实是三个单词的缩写:Block(模块)、Element(元素)、Modifier(修饰符)。

1.Block(模块)

    一个模块是一个独立的实体部分,就像应用的一块“积木”。一个模块既可以是简单的也可以是复合的(包含其他模块)。比如搜索框和按钮组成的组件就是一个模块。

    命名规范:模块名称可以由拉丁字母,数字和短划线组成。 如:.block、.form

    eg:.xxoo,也就是用两个词组成的词组来描述这个块,比如.propertyeditor或.languageswitcher,前者意思是属性编辑器,后者是语言切换器。强行用一个词来描述的话,你会发现词根本不够用。

    注:B和M可以直接连用,跳过E,这是允许的。

2.Element(元素)

    一个元素是块的一部分,具有某种功能。元素是依赖上下文的:它们只有处于他们应该属于的块的上下文中时才是有意义的。比如,.form的input元素和button元素都是元素。

    命名规范:元素名称可以包含拉丁字母,数字,破折号和下划线。 CSS类名写成块名称加破折号加上元素名称:.block-elem,其中elem可以是直接元素标签名,也是表义的名称。

    eg:比如对话框内有一个确定按钮,这个确定按钮的类名可以是:.alert-modal__button--done,其中done是修饰符( 注:修饰符在下面讲),表示是“表确定的那个按钮”。

3.Modifier(修饰符)

    修饰符是块或元素上的标志。这些标志用来形容元素或块的外观、行为或状态。例如button、a标签上的active状态。示例:.form__submit--disabled

    命名规范:修饰符名称可以包含拉丁字母,数字,破折号和下划线。 CSS类名写成模块或元素的名称加上两个破折号:.block--mod或.block__elem--mod和.block--color-black。

  eg:比如对话框内有一个确定按钮,这个确定按钮的类名可以是:.alertmodal__button--done,其中done是修饰符,表示是“表确定的那个按钮”。

小结:

    从上面的实例中,我们不难发现BEM有以下特点:

        ①复杂的类名极大减少了类名重复的可能性。

        ②每个块里的一类元素的样式对应一个类名。如此,一类元素对应一个类名,减少了子选择器或后代选择器的使用,提升了css的性能。

        ③css类名的命名更加语义化,更容易读懂。

        ④可复用性高,例如我们可以把主题类名.form__theme--xmas替换,即可对应替换为别的主题样式。

    提后话:BEM的精华是B、E、M,中间用几个连接符都是小事,一般单个中划线就可以了,但是,最常见的连接符是bb__ee--mm的形式,尽量遵守这种形式,当你遇到其他人写的规范的css文档的时候,可以降低阅读难度。

 

    同步博客园地址:https://www.cnblogs.com/MaxQD/articles/10488317.html

    同步简书地址:https://www.jianshu.com/p/ff985cfcd5de

08-30
BEM(Block Element Modifier)是一种前端开发中用于组织和管理 CSS 类名的命名方法论,它具有以下特点和应用场景: ### 原理 BEM 的核心原理是将页面拆分成独立的块(Block)、元素(Element)和修饰符(Modifier)。块是页面中相对独立的部分,可复用;元素是块的组成部分,依赖于块存在;修饰符用于改变块或元素的外观、行为等状态。通过这种方式,能清晰地定义页面结构和样式,避免样式冲突。 ### 使用方法 - **块(Block)**:块是一个独立的实体,有自己的功能和用途。块名应具有描述性,使用小写字母和连字符,例如: ```html <div class="header"> <!-- 块的内容 --> </div> ``` - **元素(Element)**:元素属于块的一部分,命名时使用双下划线连接块名和元素名,示例如下: ```html <div class="header"> <h1 class="header__title">页面标题</h1> </div> ``` - **修饰符(Modifier)**:修饰符用于改变块或元素的状态或外观,使用双连字符连接块名或元素名与修饰符名,代码如下: ```html <div class="header header--fixed"> <h1 class="header__title header__title--large">页面标题</h1> </div> ``` 对应的 CSS 样式可以这样写: ```css .header { background-color: #f0f0f0; } .header--fixed { position: fixed; top: 0; left: 0; width: 100%; } .header__title { font-size: 24px; } .header__title--large { font-size: 36px; } ``` ### 应用场景 - **大型项目**:在大型前端项目中,样式代码会非常复杂,使用 BEM 能使代码结构清晰,便于团队协作和维护。例如电商网站的商品列表、购物车等模块。 - **组件化开发**:在 React、Vue 等组件化框架中,BEM 能很好地与组件结合,每个组件可以看作一个块,组件内的元素和状态使用 BEM 命名。 - **代码复用**:BEM 的块具有独立性,方便在不同页面或项目中复用,提高开发效率。 ### BEM 实现相关 Block implementation(BEM 实现 )指一组技术,决定着 BEM 实体的行为/功能、外观、测试、模板、文档、依赖描述、附加数据等方面 [^1]。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值