一、什么是BEM

  BEM就是块(block)、元素(element)、修饰符(modifier),是由Yandex团队提出的一种前端命名方法论。这种巧妙的命名方法可以使css类对其他开发者来说更加透明且具有意义。BEM约定更加严格,而且包含更多的信息,它们用于一个团队开发一个耗时较大的项目。

  BEM的关键是光凭名字就可以告诉其他开发者某个标记是用来干什么的。通过浏览HTML代码中的class属性,就能够明白模块之间是如何关联的,有一些仅仅是组件,有一些则是这些组件的子孙或者是元素,还有一些是组件的其他形态或者是修饰符。

 

二、BEM的命名规则

  .block{}  表示更高级别的抽象或组件

  .block__element{}  表示是.block的后代,用于形成一个完整的.block整体

  .block--modifier{}  表示.block的不同状态或不同版本

  block是逻辑和功能独立的单元,类似于组件。每个block包含自身的结构(html模板)、表现(css)、行为(js)。block的独立性有利于代码的复用,有利于项目管理,block决定了命名空间,确保elements不被其他block影响。

  特点:

    1、block可以嵌套、复用,并且可以嵌套任意多个组件

    2、block不影响自身布局,也就是说不能设置margin和position属性

    <header class="header">
<div class="logo"></div>
<form class="search-form"></form>
</header>

  

  element是block的组成部分,并且不能脱离block使用。

  特点:

    1、element表示其目的而不是其状态,简单的说就是block的子元素

    2、element的命名方式:block-name__element-name  element名字和block名字以两个下划线分开。

    <form class="search-form">
<input class="search-form__input">
<button class="search-form__buttom">搜索</button>
</form>

  modifier定义block和element的外观、状态、行为。

    <form class="search-form">
<button class="search-form__buttom
search-form__buttom--size_s
search-form__buttom--size_m
">搜索</button>
</form>

三、例子

  常规的css:

    <div class="person">
<div class="female">
<p class="color"></p>
</div>
<div class="male">
<p class="color"></p>
</div>
</div>

  这类css类名不能告诉我们足够的信息,尽管可以用他们来完成工作,但他们表现的含糊不清。

  BEM命名规范:

    <div class="person">
<div class="person_female">
<p class="person_female--color"></p>
</div>
<div class="person_male">
<p class="person_male--color"></p>
</div>
</div>

  顶级块是person,它拥有一些自己元素,如female和male。男性和女性都有一些颜色,这样我们只通过代码中的命名就能知道它们之间的关联。

  

  

前端css命名规范----BEM的更多相关文章

  1. css 命名规范 BEM

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

  2. CSS命名规范——BEM思想(非常赞的规范)

    人们问我最多的问题之一是在CSS类名中“--”和“__”是什么意思?它们的出现是源于BEM和Nicolas Gallagher... BEM的意思就是块(block).元素(element).修饰符( ...

  3. CSS 命名规范 BEM 思想

    Part.1 何为 BEM? BEM :Block ( 块 ) 丶Element ( 元素 ) 丶Modifier ( 修饰符 ) 出 处:是由 Yandex 团队提出的一种前端命名方法论 优 点:命 ...

  4. CSS命名规范 BEM

    良好的代码结构,HTML和css元素之间的关系,对于项目交付是很重要的! BEM解释: (1).block 是BEM的区块(B),包含内容和风格.如bootstrap框架的.container. (2 ...

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

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

  6. web前端开发CSS命名规范参考

    做为一个web前端工程师,每天接触HTML.css就像吃饭一样,但是作为一名合作.优秀的web前端工程师,对DIV+CSS命名还是有一定的规范的,本文整理了一份web前端开发中DIV+CSS各种命名规 ...

  7. CSS命名规范

    DIV+CSS规范命名大全集合 前端人员必看CSS命名规范 整理: 文件名必须由小写字母.数字.中划线组成 ).所有的命名最好都小写,一律采用小写加中划线的方式,不允许使用大写字母或 _2).属性的值 ...

  8. CSS 命名规范总结

    CSS 命名规范总结 BEM 命名给 CSS 以及 html 提供清晰结构,命名空间提供更多信息,模块化提高代码的重用,以达到 CSS 命名语义化.可重用性高.后期维护容易.加载渲染快的要求. 首先, ...

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

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

随机推荐

  1. 详解Redis基本命令

    当redis环境搭建结束后,接下来需要掌握并了解redis的一些相关命令,本篇文章主要从实际操作的层面来与大家分享redis基本命令, 具体包括:Redis五大基本类型命令(Strings,Lists ...

  2. 为Azure DevOps Server (TFS) 配置安全访问(HTTPS with SSL)

    Contents 1. 概述 2. HTTP和HTTS比较 支持HTTP和HTTPS两种方式 要求所有连接使用HTTPS 优点: 缺点: 3. 为Azure DevOps Server 配置安全访问 ...

  3. Beyond Compare的自定义破解方法

    因本人是程序员的缘故,经常时不时就是几千几万行代码找不同,也就时常要用到一个超级无敌好用的文本对比软件:Beyond Compare. 然而破解成了一大问题,网上有很多注册码都已经被封了或者是注销掉了 ...

  4. 模型的细致程度--Level of Development

    模型的细致程度,英文称作Level of Details,也叫作Level of Development.描述了一个BIM模型构件单元从最低级的近似概念化的程度发展到最高级的演示级精度的步骤.美国建筑 ...

  5. 十、Spring之BeanFactory源码分析(二)

    Spring之BeanFactory源码分析(二) 前言 在前面我们简单的分析了BeanFactory的结构,ListableBeanFactory,HierarchicalBeanFactory,A ...

  6. Algorithm: Permutation & Combination

    组合计数 组合数学主要是研究一组离散对象满足一定条件的安排的存在性.构造及计数问题.计数理论是狭义组合数学中最基本的一个研究方向,主要研究的是满足一定条件的排列组合及计数问题.组合计数包含计数原理.计 ...

  7. Winform中设置和获取DevExpress的RadioGroup的选中项的value值

    场景 Winform中实现读取xml配置文件并动态配置ZedGraph的RadioGroup的选项: https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article ...

  8. Flask--g属性

    目录 Flask之g属性 使用 session,flash,g的区别 Flask之g属性 专门用来存储用户信息的g对象,g的全称的为global g对象在一次请求中的所有的代码的地方,都是可以使用的 ...

  9. wsl下安装并运行Kafka

    0.引言 kafka是一个高性能分布式的MQ,今天我们就来玩玩 1.安装 wget http://mirrors.tuna.tsinghua.edu.cn/apache/kafka/2.3.0/kaf ...

  10. Django models 单表查询

    从数据库中查询出来的结果一般是一个集合,这个集合叫做 QuerySet 1. 查看Django QuerySet执行的SQL .query.__str__()或 .query属性打印执行的sql语句 ...