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

在读element源代码的时候, 了解到了BEM的命名风格.

使用 BEM 命名规范,理论上讲,每行 css 代码都只有一个选择器。
BEM代表 “块(block),元素(element),修饰符(modifier)”,我们常用这三个实体开发组件。
在选择器中,由以下三种符号来表示扩展的关系:

-   中划线 :仅作为连字符使用,表示某个块或者某个子元素的多单词之间的连接记号。
--  双中划线线:用来描述一个块或者块的子元素的一种状态
__  双下划线:双下划线用来连接块和块的子元素type-block__element--modifier

块(block)

一个块是设计或布局的一部分,它有具体且唯一地意义 ,要么是语义上的要么是视觉上的。

在大多数情况下,任何独立的页面元素(或复杂或简单)都可以被视作一个块。它的HTML容器会有一个唯一的CSS类名,也就是这个块的名字。

针对块的CSS类名会加一些前缀( ui-),这些前缀在CSS中有类似 命名空间 的作用。

一个块的正式(实际上是半正式的)定义有下面三个基本原则:

CSS中只能使用类名(不能是ID)。
每一个块名应该有一个命名空间(前缀)
每一条CSS规则必须属于一个块。

元素(element)

块中的子元素是块的子元素,并且子元素的子元素在 bem 里也被认为是块的直接子元素。一个块中元素的类名必须用父级块的名称作为前缀。

修饰符(modifier)

一个“修饰符”可以理解为一个块的特定状态,标识着它持有一个特定的属性。

用一个例子来解释最好不过了。一个表示按钮的块默认有三个大小:小,中,大。为了避免创建三个不同的块,最好是在块上加修饰符。这个修饰符应该有个名字(比如:size )和值( small,normal 或者 big )。

element 的源码当中充分实现了这种命名方式, 在使用scss的情况下

/* BEM-------------------------- */
@mixin b($block) {$B: $namespace+'-'+$block !global;.#{$B} {@content;}
}@mixin e($element) {$E: $element !global;$selector: &;$currentSelector: "";@each $unit in $element {$currentSelector: #{$currentSelector + "." + $B + $element-separator + $unit + ","};}@if hitAllSpecialNestRule($selector) {@at-root {#{$selector} {#{$currentSelector} {@content;}}}} @else {@at-root {#{$currentSelector} {@content;}}}
}@mixin m($modifier) {$selector: &;$currentSelector: "";@each $unit in $modifier {$currentSelector: #{$currentSelector + & + $modifier-separator + $unit + ","};}@at-root {#{$currentSelector} {@content;}}
}

css 命名规范 BEM相关推荐

  1. CSS命名规范-BEM

    BEM 什么是BEM BEM命名的好处 BEM命名的问题 什么是BEM BEM是一种命名规范.模块名+元素名+修饰器名 比如Instagram团队使用的驼峰式 .blockName-elementNa ...

  2. CSS命名规范 BEM

    在我们开发的时候,写了一个模块,在现有页面中测试都没问题.一段时间后,新需求新页面,该页面一打开,突然发现页面中样式都变样了,一查问题,原来是其他组件的样式和该页面的样式相互覆盖了.我相信大家在工作的 ...

  3. CSS样式的格式命名,CSS命名规范:BEM

    什么是 BEM 命名规范 Bem 是块(block).元素(element).修饰符(modifier)的简写 块: 组件 元素:块的子节点 修饰符:改变某个块的外观的标志,不同状态或不同版本 Yan ...

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

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

  5. css命名规范和书写规范

    1.位置属性(position, top, right, z-index, display, float等) 2.大小(width, height, padding, margin) 3.文字系列(f ...

  6. css宋体代码_前端开发必备的CSS命名规范与常用CSS代码集合

    编辑 | web前端开发 来源 | web前端开发 我们在用html+css进行网页的排版布局时,经常会遇到CSS命名,如果是在团队多人协作开发时,团队里都会有自己的命名规范与要求. 但如果是自己在个 ...

  7. 关于css命名规范一些小技巧或经验

    前言 通过前边自己进行了一周自适应招聘官方网站PC端和移动端的开发,自己在开发过程中也遇到了一些css命名规范的令人头疼的事情,自己回过头来看自身的代码认真思考并总结了一些不成熟的经验,下文将向大家介 ...

  8. css之命名规范 BEM

    这篇文章主要是记录下我从讨厌,习惯,喜欢,热爱BEM方式的心路历程 刚入职水滴, 第一个需求是做5个落地页,开了需求,过了设计图,so easy 一切都在计划中,提测,准备上线 最后阶段coderev ...

  9. html语言书写注意事项,CSS命名规范参考及书写注意事项

    CSS书写顺序 *{ /*显示属性*/ display position float clear cursor - /*盒模型*/ margin padding width height /*排版*/ ...

最新文章

  1. minio下载及安装:win linux平台
  2. 会话技术(session/cookie)
  3. Redis Sentinel集群部署
  4. Android近场通信---NFC基础(二)(转)
  5. python使用正则表达式删除字符串中的数字
  6. jar导出与制作成exe在没jdk电脑下运行(图文教程+工具)
  7. 通话话单分析 java,奇兵手机话单分析系统功能简介
  8. sx1276, sx1278, Si4463, Si4432, Si4438, sx1212小无线模块对比数据
  9. oppo r11s鸿蒙固件,OPPO R11s官方固件rom刷机包_OPPO R11s系统升级更新包下载
  10. PCB电路板生产完成分析
  11. Graph Meta Network for Multi-Behavior Recommendation精读
  12. ES6-rest参数
  13. Android新浪微博分页加载,Android仿新浪微博分页管理界面(3)
  14. Succinimidyl Carboxymethyl Ester-PEG-Mal,Mal-poly(ethylene glycol)-SCM
  15. php如何ping域名的ip,使用PHP ping域名或IP
  16. 银行核心系统的清算与结算
  17. eclipes Java代码连接Mysql数据库
  18. 标准化考场时钟系统方案
  19. IntelliJ IDEA 注册码(phpstorm等IDE)
  20. Windows 标准控件 ComboBox 的改造

热门文章

  1. 远程SSH连接服务与基本排错
  2. webView用法小结
  3. ISA2006标准版安装及无人值守安装
  4. 简单了解request与response
  5. Base64实现图片的编码和解码
  6. [BZOJ1103][POI2007]大都市meg
  7. Linux挂载iscsi存储
  8. Git 2.7: 一个新的带来许多新特性和性能提升的主要版本
  9. 使用Keil MDK以及标准外设库创建STM32工程
  10. Android AM命令行启动程序的方法