前端风格指南

1.css命名规范

特别声明:此篇文章由David根据csswizardry的英文文章原名《MindBEMding – getting your head ’round BEM syntax》进行翻译,整个译文带有我们自己的理解与思想,如果译得不好或不对之处还请同行朋友指点。如需转载此译文,需注明英文出处:http://csswizardry.com/2013/01/mindbemding-getting-your-head-round-bem-syntax以及作者相关信息
——作者:csswizardry

——译者:David

使用BEM约定
BEM的意思就是块(block)、元素(element)、修饰符(modifier)

.block{
    
    }
.block__element{
    
    }
.block--modifier{
    
    }

.site-search{
    
    } /* 块 */
.site-search__field{
    
    } /* 元素 */
.site-search--full{
    
    } /* 修饰符 */

.block 代表了更高级别的抽象或组件。
.block__element 代表.block的后代,用于形成一个完整的.block的整体。
.block–modifier代表.block的不同状态或不同版本。

对比一下,遵循BEM约定的css样式,和常规的css样式,BEM的的结构和描述更加明显

//遵循BEM
.person{
    
    }
.person__hand{
    
    } //元素
.person--female{
    
    } // 修饰符
.person--female__hand{
    
    }
.person__hand--left{
    
    }

//常规
.person{
    
    }
.hand{
    
    }
.female{
    
    }
.female-hand{
    
    }
.left-hand{
    
    }	

下一个对比例子

//常规
<form class="site-search  full">
  <input type="text" class="field">
  <input type="Submit" value ="Search" class="button">
</form>

//BEM约定
<form class="site-search  site-search--full">
  <input type="text" class="site-search__field">
  <input type="Submit" value ="Search" class="site-search__button">
</form>	

OOCSS(面向对象css)的BEM约定,仅通过CSS选择器的名字我们就能获取到以上全部信息

.media{
    
    }
.media__img{
    
    }
.media__img--rev{
    
    }
.media__body{
    
    }	

对比

//常规
<div class="media">
  <img src="logo.png" alt="Foo Corp logo" class="img-rev">
  <div class="body">
    <h3 class="alpha">Welcome to Foo Corp</h3>
    <p class="lede">Foo Corp is the best, seriously!</p>
  </div>
</div>	

//BEM
<div class="media">
  <img src="logo.png" alt="Foo Corp logo" class="media__img--rev">
  <div class="media__body">
    <h3 class="alpha">Welcome to Foo Corp</h3>
    <p class="lede">Foo Corp is the best, seriously!</p>
  </div>

分清改使用BEM的场合,有些地方没必要用BEM约定,如header_logo,但我们没必要这么做。使用BEM的诀窍是,你要知道什么时候哪些东西是应该写成BEM格式的。因为某些东西确实是位于一个块的内部,但这并不意味它就是BEM中所说的元素。这个例子中,网站logo完全是恰巧在.header的内部,它也有可能在侧边栏或是页脚里面。一个元素的范围可能开始于任何上下文,因此你要确定只在你需要用到BEM的地方你才使用它。再看一个例子:

<div class="content">
  <h1 class="content__headline">Lorem ipsum dolor...</h1>
</div>

在这个例子里,我们也许仅仅只需要另一个class,可以叫它.headline;它的样式取决于它是如何被层叠的,因为它在.content的内部;或者它只是恰巧在.content的内部。如果它是后者(即恰巧在.content的内部,而不总是在)我们就不需要使用BEM。

然而,一切都有可能潜在地用到BEM。我们再来看一下.site-logo的例子,想象一下我们想要给网站增加一点圣诞节的气氛,所以我们想有一个圣诞版的logo。于是我们有了下面的代码:

.site-logo{
    
    }
.site-logo--xmas{
    
    }	

我们可以通过使用–修饰符来快速地为我们的代码构建另一个版本。

BEM最难的部分之一是明确作用域是从哪开始和到哪结束的,以及什么时候使用(不使用)它。随着接触的多了,有了经验积累,你慢慢就会知道怎么用,这些问题也不再是问题。

猜你喜欢

转载自blog.csdn.net/Tiny2017/article/details/111030386