BEM

原文请看 getBEM

Introduction(介绍)

  • Block

    独立实体,独立的意义

    Examples:header, container, menu, checkbox, input

  • Element

    block的一部分,没有独立的意义。语意上和block有关系

    Examples:menu item, list item, checkbox caption, header title

  • Modifier

    block或element上的flag。使用他来改变外观或行为

    Examples:disabled, highlighted, checked, fixed, size big, color yellow

实例

页面上一个特定的元素在BEM中的实现。

一般情况下我们有一个正常的按钮,还有两个不同的状态。因为我们使用了BEM的风格块的类选择器,我们可以使用任何标签来实现(button,a,div)。命名规则告诉我们使用 block--modifier-value语法

HTML

  1. <button class="button">
  2. Normal button
  3. </button>
  4. <button class="button button--state-success">
  5. Success button
  6. </button>
  7. <button class="button button--state-danger">
  8. Danger button
  9. </button>

CSS

  1. .button {
  2. display: inline-block;
  3. border-radius: 3px;
  4. padding: 7px 12px;
  5. border: 1px solid #D5D5D5;
  6. background-image: linear-gradient(#EEE, #DDD);
  7. font: 700 13px/18px Helvetica, arial;
  8. }
  9. .button--state-success {
  10. color: #FFF;
  11. background: #569E3D linear-gradient(#79D858, #569E3D) repeat-x;
  12. border-color: #4A993E;
  13. }
  14. .button--state-danger {
  15. color: #900;
  16. }

优点

  • 模块化

    block样式从来不依赖页面上的其他元素。你还可以将blocks从已经完成的项目转移到新的项目

  • 重用性

    以不同的方式组成独立的blocks,减少可维护css代码量。通过一套风格,你可以使用你的超级牛叉效果构建一个库

  • 结构

    BEM方法为你的css代码提供了一个简单易懂的结构

Naming(命名)

正确的命名可以提高开发效率、调试和实现旧代码中的功能。遗憾的是,大多数css没有任何结构和命名规范。这导致时间长了css代码不可维护。

BEM方法确保每个网站的开发人员使用单个代码库和同一种语言。使用正确的命名将会为你的网站设计改变做好准备

  • Block

    封装一个独立的实体,他具有意义。虽然Block可以相互嵌套,但是在语意上让他们保持相互的独立,没有优先级或层次结构。整体实体没有DOM表示(如controllers或models)也可以是Block

    • Naming

      Block名称可以由字母、数字和破折号组成一个类,增加一个简短的前缀为命名空间:.block

    • HTML

      任何DOM节点如果接收一个类名他能成为一个Block。

      <div class="block">...</div>

    • CSS

      • 仅使用类名选择器
      • 没有标签名或ID
      • 不依赖页面上的其他Block/Elements

      .block { color: #042; }

  • Element

    Block的一部分,没有独立的意义。任何元素在语意上是绑在他的Block上

    • Naming

      Elements名称可以由字母、数字、破折号和下划线。CSS类名由Block名称加两个下划线加Elements名:.block__elem

    • HTML

      在给定的Block内的任何DOM都可以成为一个Elements。所有Elements在语意上相等。

      1. <div class="block">
      2. ...
      3. <span class="block__elem"></span>
      4. </div>
    • CSS

      • 仅使用类名选择器
      • 没有标签名或ID
      • 不依赖页面上的其他Block/Elements

      正确的

      1. .block__elem { color: #042; }

      错误的

      1. .block .block__elem { color: #042; }
      2. div.block__elem { color: #042; }
  • Modifier

    在Block或Elements上的Flags,使用它们来改变外观、行为或状态。

    • Naming

      Modifier名称可以由字母、数字、破折号和下划线。CSS类名由Block或Element的名称加上两个破折号。.block--mod.block__elem--mod.block--color-black.block--color-redSpaces in complicated modifiers are replaced by dash.

    • HTML

      Modifier是添加到你的Block/Elements类名中额外的扩展。只给Block/Elements他们的修饰添加Modifier,并且保持他们原来的类

      正确的

      1. <div class="block block--mod">...</div>
      2. <div class="block block--size-big block--shadow-yes">...</div>

      错误的

      1. <div class="block--mod">...</div>
    • CSS

      使用Modifier的类名选择:.block--hidden { }

      改变Elements基于一个块级Modifier:

      1. .block--mod .block__elem { }

      Elements Modifier

      1. .block__elem--mod { }

Example

假设你有一个From Block与modifierstheme: "xmassimple: true和elementsinputsubmit和元素submit他具有自己的修饰符disabled: true没填写表单时的样式。

  • HTML

    1. <form class="form form--theme-xmas form--simple">
    2. <input class="form__input" type="text" />
    3. <input
    4. class="form__submit form__submit--disabled"
    5. type="submit" />
    6. </form>
  • CSS

    1. .form { }
    2. .form--theme-xmas { }
    3. .form--simple { }
    4. .form__input { }
    5. .form__submit { }
    6. .form__submit--disabled { }

扩展阅读:

BEM 中文翻译的更多相关文章

  1. 《Entity Framework 6 Recipes》中文翻译系列 目录篇 -持续更新

    为了方便大家的阅读和学习,也是响应网友的建议,在这里为这个系列做一个目录.在目录开始这前,我先来回答之前遇到的几个问题. 1.为什么要学习EF? 这个问题很简单,项目需要.这不像学校,没人强迫你学习! ...

  2. Spark官方文档 - 中文翻译

    Spark官方文档 - 中文翻译 Spark版本:1.6.0 转载请注明出处:http://www.cnblogs.com/BYRans/ 1 概述(Overview) 2 引入Spark(Linki ...

  3. PS网页设计教程——30个优秀的PS网页设计教程的中文翻译教程

    PS网页设计教程--30个优秀的PS网页设计教程的中文翻译教程   作为编码者,美工基础是偏弱的.我们可以参考一些成熟的网页PS教程,提高自身的设计能力.套用一句话,"熟读唐诗三百首,不会作 ...

  4. Spark SQL 官方文档-中文翻译

    Spark SQL 官方文档-中文翻译 Spark版本:Spark 1.5.2 转载请注明出处:http://www.cnblogs.com/BYRans/ 1 概述(Overview) 2 Data ...

  5. Learning Spark: Lightning-Fast Big Data Analysis 中文翻译

    Learning Spark: Lightning-Fast Big Data Analysis 中文翻译行为纯属个人对于Spark的兴趣,仅供学习. 如果我的翻译行为侵犯您的版权,请您告知,我将停止 ...

  6. 苹果App Store审核指南中文翻译(2014.9.1更新)

    转:http://www.cocoachina.com/appstore/20140901/9500.html CocoaChina对<苹果应用商店审核指南>中文翻译最近一次更新时间为20 ...

  7. (转)PK系列之六:该不该读中文翻译的专业书

    本文引用地址:http://blog.sciencenet.cn/blog-2999994-956596.html 此文来自科学网王立新博客,转载请注明出处. 刘新建:这几天在读一本译著:投入产出分析 ...

  8. Umbraco官方技术文档 中文翻译

    Umbraco 官方技术文档中文翻译 http://blog.csdn.net/u014183619/article/details/51919973 http://www.cnblogs.com/m ...

  9. 《Introduction to Tornado》中文翻译计划——第五章:异步Web服务

    http://www.pythoner.com/294.html 本文为<Introduction to Tornado>中文翻译,将在https://github.com/alioth3 ...

随机推荐

  1. 【CJOJ2512】gcd之和(莫比乌斯反演)

    [CJOJ2512]gcd之和(莫比乌斯反演) 题面 给定\(n,m(n,m<=10^7)\) 求 \[\sum_{i=1}^n\sum_{j=1}^mgcd(i,j)\] 题解 首先把公因数直 ...

  2. MySQL多数据源笔记1-MySQL主从复制

    1.为什么要做主从复制? 1.在业务复杂的系统中,有这么一个情景,有一句sql语句需要锁表,导致暂时不能使用读的服务,那么就很影响运行中的业务,使用主从复制,让主库负责写,从库负责读,这样,即使主库出 ...

  3. 数组Array、数组API

    1.数组:批量管理多个数据的存储空间. 数组的作用:现实中,批量管理多个数据都是集中分组存放,良好的数据结构,可极大提高程序的执行效率! 优点:方便查找 2.创建数组:(4种方式) (1)var 变量 ...

  4. linux 记录用户操作日志

    将以下加入到/etc/profile 最后 history USER_IP=`who -u am i 2>/dev/null| awk '{print $NF}'|sed -e 's/[()]/ ...

  5. Java集合中的LinkedHashMap类

    jdk1.8.0_144 本文阅读最好先了解HashMap底层,可前往<Java集合中的HashMap类>. LinkedHashMap由于它的插入有序特性,也是一种比较常用的Map集合. ...

  6. redis's usage

    author:headsen  chen date:2017-12-07 16:33:40 notice:This article is created by  headsen chen ,and n ...

  7. 浅析JavaScript的prototype

    一.JavaScript对象的创建 (1)对象方法 function Student(name){ this.name=name; this.showName=function(){ alert(&q ...

  8. java--补全诗句代码

    代码效果: 代码: import java.util.Scanner; /* 补全诗句 */ public class game1 { public static void main(String[] ...

  9. Java面试宝典-2017

    Java面试宝典2017版 一. Java基础部分........................................................................... ...

  10. 笔记:Spring Cloud Ribbon 客户端配置详解

    自动化配置 由于 Ribbon 中定义的每一个接口都有多种不同的策略实现,同时这些接口之间又有一定的依赖关系,Spring Cloud Ribbon 中的自动化配置能够很方便的自动化构建接口的具体实现 ...