资讯专栏INFORMATION COLUMN

css 命名规范 BEM

AbnerMing / 1196人阅读

摘要:针对块的类名会加一些前缀,这些前缀在中有类似命名空间的作用。每一个块名应该有一个命名空间前缀每一条规则必须属于一个块。为了避免创建三个不同的块,最好是在块上加修饰符。的源码当中充分实现了这种命名方式在使用的情况下

在项目的开发过程当中, 我们往往因为日益复杂的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;
    }
  }
}

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/51920.html

相关文章

  • CSS规范--BEM入门

    摘要:一开始,公司推出的,包括了规范以及其配套构建工具。代表的不同状态或不同版本。再来看一个之前用常规方式命名的的例子这些类名真是太不精确了,并不能告诉我们足够的信息。 这段时间在整理前端部分的代码规范,前面提到的CSS规范里面会涉及到选择器的命名,就参考BEM的命名规范,内容整理如下,供大家参考,请斧正!如大家有兴趣,可移步至CSS编码规范 BEM是由Yandex公司推出的一套CSS命名...

    li21 评论0 收藏0
  • CSS命名规范

    摘要:本篇介绍几种命名规范。使用的网站四其他命名规范等减少对结构的依赖增加重复性的使用几种命名规范比较与在命名上相反的点可以放心使用,以为都是在模块内但不推荐当前我们的网站略有思想更概括,中的,相当于的,相当于的,相当于的中文 本篇介绍几种CSS命名规范。 (规范详细请参考底部References) 一、NEC (nice easy css) 网易前端CSS开源项目 1.1 样式分类 重...

    includecmath 评论0 收藏0
  • css 命名规范 BEM

    摘要:针对块的类名会加一些前缀,这些前缀在中有类似命名空间的作用。每一个块名应该有一个命名空间前缀每一条规则必须属于一个块。为了避免创建三个不同的块,最好是在块上加修饰符。的源码当中充分实现了这种命名方式在使用的情况下 在项目的开发过程当中, 我们往往因为日益复杂的css代码而感到力不从心. 如何合理的组织css代码成为了我们前端开发过程中必须考虑到的环节. 在读element源代码的时候,...

    mushang 评论0 收藏0
  • 好的 CSS 命名规范可以节约 Debug 时间

    摘要:简评是一种很耗时的操作,如果有良好的命名规范可以节约很多的时间。一些团队使用连字符分隔符,而其他团队则倾向于使用更加结构化的称为的命名规范。一般来说,命名规范有三个问题要解决能够通过名字就能清楚选择器的功能。 简评:Debug CSS 是一种很耗时的操作,如果有良好的命名规范可以节约很多的 Debug 时间。 使用连字符(-)分隔字符串 你可能习惯了在 Javascript 中使用小驼...

    wean 评论0 收藏0
  • BEM实战之扒一扒淘票票页面

    摘要:扒一扒淘票票界面淘票票界面写的挺美观的,但是最近看了看淘票票的命名方式,觉得稍有不妥。命名与页面内容挂钩,代码复用性低。 BEM解析 BEM是一套CSS国际命名规范,是一个非常有用的功能强大且简单的命名约定,它能使前端代码更易读,易于理解易于扩展。BEM是块(block)、元素(element)、修饰符(modifier)的缩写。 B:Block是块,一个独立的组件,将所有东西都划分...

    godlong_X 评论0 收藏0

发表评论

0条评论

AbnerMing

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<