一直以来自己对命名都是比较混乱的,并没有一个比较好的格式来命名,最近自己碰巧学习到了BEM命名规范,我想谈谈自己的理解以供自己来学习,同时也可以和各位大佬一起学习。
BEM是一个很有用的方法可以创建复用组件和前端代码
有三个特性.

  1. 易用性,使用BEM只需要使用BEM的命名规范就可以。
  2. 单元性,使用独立的块和CSS选择器,可以使你的代码可重用和单元化。
  3. 灵活性,使用BEM后,方法和工具可以按照自己喜欢的方式去组织和配置。

    BEM的简介
    BEM是一个强大而简单的命名规范,使得代码更容易让人理解,容易和他人协作,容易扩展,更加强壮和明确,最重要的是严谨性。
    BEM的命名规范可以让参与网站开发的人都使用同一个代码库使用用一种方法。

BEM分别是块(Block),元素(Element),修饰符(Modifier)

  • 块(Block)
    是一个独立的页面组件跟其他的块区分开来,相当于网页中的组件Block封装了行为,模板,样式和其他技术。独立的Block可以复用,促进项目的开发。

    1. 模块与模块之间可以嵌套,可以有任意级别的嵌


      <div class="header">
      <div class="logo"></div>
      <div class="search"></div>
      </div>
    2. 可以任意移动

>>
Block可以在页面内任意的移动,也可以在页面之间或项目之间移动。
Block作为独立的实体来实现,使得在页面上改变Block改变位置并让其位置和外观不改变的简单。
3. 可复用
一个界面可以同一个Block的几个实例
  • 元素(Element)
    元素是模块Block的重要组成部分,且不能脱离模块单独的使用


    元素的名称用来描述它的目的
    一个完整的元素结构block-name__element-name,块名和元素名使用(__)双下划线分割。
    • 元素之间是可以嵌套的
    • 可以拥有任意级别的嵌套
    • 一个元素总是模块Block的一部分这意味着元素名称不能为block__element__element这种结构,而block__element这种结构才是正确的。

    <div class="weui-tabbar">
    <div class="weui-tabbar__item">
    <span>
    <img src=" " alt="" class="weui-tabbar__icon">
    </span>
    <p class="weui-tabbar__label"></p>
    </div>
    </div>

-可以在不改变元素的情况下改变DOM结构

<div class="weui-tabbar">

<div href="#" class="weui-tabbar__item">

<span>

<img src=" " alt="" class="weui-tabbar__icon">

</span>

</div>

<p class="weui-tabbar__label"></p>

</div>

-一个元素总是模块的一部分,不能单独的使用。如下weui-tabbar模块里面的p标签元素放在模块外,这是不正确的。

<div class="weui-tabbar">

<div class="weui-tabbar__item">

<span>

<img src=" " alt="" class="weui-tabbar__icon">

</span>

</div>

</div>

<p class="weui-tabbar__label"></p>

-元素是可选择的,不是所有模块都必须拥有元素
  • 修饰符(Modifier)
    Modifier是BEM的一个实体,它定义了block或element的行为或外观
    Modifier可用可不用
    Modifier本质和html的属性很相似,同一个block会因为使用Modifier而与之前看起来不一样。
    -修饰符的名字与模块和元素的名字使用(_)单下划线
    命名模式遵循如下格式:

    • Boolean类型的修饰符
      <font color=green>block-name_modifier--name</font>
      <font color=green>block-name__element-name--modifier-name</font>


      &lt;!--当模块weui-tabbar有一个focused的boolean类型的修饰符时--&gt;
      &lt;div class="weui-tabbar weui-tabbar--focused"&gt;
      当元素weui-tabbar__item有一个on类型的修饰符时
      &lt;div class="weui-tabbar__item weui-tabbar__item--on"&gt;
      &lt;/div&gt;
      &lt;/div&gt;
      • key-value类型的修饰符

&lt;font color=green&gt;block-name--modifier-name--modifier-value&lt;/font&gt;
&lt;font color=green&gt;block-name__element-name--modifier-name--modifier-value&lt;/font&gt;

<!--当模块weui-tabbar有一个值为yes的test的修饰符时-->

<div class="weui-tabbar weui-tabbar--test--yes">

当元素weui-tabbar__item有一个yes的test的修饰符时

<div class="weui-tabbar__item weui-tabbar__item--test--yes">

</div>

</div>

&gt;-一个修饰符不能单独的使用
&gt;&gt;一个修饰符不能脱离模块或元素单独的使用,一个修饰符应该改变一个实体的外观,行为或者状态,而不是替换它。

<!--正确的方法-->

<div class="weui-tabbar">

<div class="weui-tabbar__item weui-tabbar__item--on">

</div>

<!--错误的使用-->

<div class="weui-tabbar">

<div class="weui-tabbar__item--on">

</div>


以上是我经过对BEM规范学习的一些理解,大家互相学习,有很多的不足之处希望大家指出。还有很多没有学习到的东西,自己也会在未来的时间里不断学习来提高自己。

原文地址:https://segmentfault.com/a/1190000017052031

一篇关于BEM命名规范的更多相关文章

  1. CSS BEM 命名规范简介

    [前言] BEM 是一个简单又非常有用的命名约定.让你的前端代码更容易阅读和理解,更容易协作,更容易控制,更加健壮和明确,而且更加严密.这篇文章主要介绍了CSS BEM 命名规范简介(推荐)的相关资料 ...

  2. CSS — BEM 命名规范

    推荐阅读: https://juejin.im/post/5b925e616fb9a05cdd2ce70d 1 什么是 BEM 命名规范 Bem 是块(block).元素(element).修饰符(m ...

  3. 使用BEM命名规范来组织CSS代码

    BEM 是 Block(块) Element(元素) Modifier(修饰器)的简称 使用BEM规范来命名CSS,组织HTML中选择器的结构,利于CSS代码的维护,使得代码结构更清晰(弊端主要是名字 ...

  4. css命名规范: BEM 的命名法

    整理自:前端早读课[第1183期]这些 CSS 命名规范,将省下你大把调试时间 试图解决 3 类问题: 仅从名字就能知道一个 CSS 选择器具体做什么 从名字能大致清楚一个选择器可以在哪里使用 从 C ...

  5. 前端css命名规范----BEM

    一.什么是BEM BEM就是块(block).元素(element).修饰符(modifier),是由Yandex团队提出的一种前端命名方法论.这种巧妙的命名方法可以使css类对其他开发者来说更加透明 ...

  6. css 命名规范 BEM

    在项目的开发过程当中, 我们往往因为日益复杂的css代码而感到力不从心. 如何合理的组织css代码成为了我们前端开发过程中必须考虑到的环节. 在读element源代码的时候, 了解到了BEM的命名风格 ...

  7. CSS 命名规范将省下调试时间

    我听说很多开发者厌恶 CSS.而在我的经验中,这往往是由于他们并没有花时间来学习 CSS. CSS 算不上是最优美的『语言』,但迄今二十多年来,它都是美化 web 举足轻重的工具.从这点来说,也还算不 ...

  8. 这些 CSS 命名规范将省下你大把调试时间

    我听说很多开发者厌恶 CSS.而在我的经验中,这往往是由于他们并没有花时间来学习 CSS. CSS 算不上是最优美的『语言』,但迄今二十多年来,它都是美化 web 举足轻重的工具.从这点来说,也还算不 ...

  9. 我认为最节省时间的CSS命名规范

    CSS命名规范一 js中对变量的命名最好使用camel case驼峰式命名法,但CSS中更适用于red-box命名规范. CSS命名规范二 BEM命名规范 B=>block E=>elem ...

随机推荐

  1. CentOS(6、7)修改主机名(hostname)

    centos6需要修改两处:一处是/etc/sysconfig/network,另一处是/etc/hosts,只修改任一处会导致系统启动异常.首先切换到root用户. /etc/sysconfig/n ...

  2. G-华华对月月的忠诚

    链接:https://ac.nowcoder.com/acm/contest/392/G 题意: 月月要参加学校的信息学集训,晚上不能陪华华聊天了.不过为了防止华华去和别的小姐姐聊天,浪费时间影响学习 ...

  3. 洛谷 P1578 奶牛浴场

    https://www.luogu.org/problemnew/show/P1578 题解 另外这题有一些小坑,洛谷的题解里面有讲 #pragma GCC optimize("Ofast& ...

  4. 为什么会出现lvs+nginx

    一.ngix(应用层 网络七层负载均衡) 1.异步转发,请求数据和相应数据都要经过ngix,ngix和客户端建立连接 2.轮询所有的tomcat服务器,保证请求成功或者最后一台tomcat服务器也请求 ...

  5. python里面的list、tuple和dict的区别

    Dictionary .Dictionary是Python中内置的数据类型之一,他定义了键和值之间一对一的关系. 每一个元素都有一个key-value对,整个元素集合用大括号{}括起来. 你可以通过k ...

  6. CAD 安装时出现.net frameword 3.5安装不上的问题

    右击---我的电脑---功能---.net framework 3.5 ---勾选---安装,然后再进行安装CAD即可

  7. 说说SpringMVC、SpringBoot和SpringCloud三者之间的联系和区别

    这个问题是我在参加一次面试晚会活动上被问到的一个问题,看标题显然很简单就能够回答出来,但是仔细一琢磨,平时蒙头苦干的我们可能缺少关注和积累,好像并不能用较专业的术语和逻辑很顺畅的表达出来,于是我简要的 ...

  8. Java中IO流文件读取、写入和复制

    //构造文件File类 File f=new File(fileName); //判断是否为目录 f.isDirectory(); //获取目录下的文件名 String[] fileName=f.li ...

  9. How to detect the presence of the Visual C++ 2010 redistributable package

    Question: I have seen your previous blog posts that describe how to detect the presence of the Visua ...

  10. MySql中查询语句实现分页功能

    import java.util.*;import java.sql.*; public class FruitDao {    private Connection conn;    private ...