CSS3与页面布局学习总结(九)——前端开发规范
<h1>一、BEM</h1><h2>1.1、BEM概要</h2>
<p>在CSS类名中“--”和“__”是什么?它们的出现是源于BEM和Nicolas Gallagher</p>
<p>BEM的意思就是块(block)、元素(element)、修饰符(modifier),是由Yandex团队提出的一种前端命名方法论。这种巧妙的命名方法让你的CSS类对其他开发者来说更加透明而且更有意义。BEM命名约定更加严格,而且包含更多的信息,它们用于一个团队开发一个耗时的大项目。</p>
<p>http://getbem.com/</p>
<p>https://css-tricks.com/bem-101/</p>
<h2>1.2、入门示例</h2>
<p>CSS:</p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 128, 0, 1)">/*</span><span style="color: rgba(0, 128, 0, 1)"> Block </span><span style="color: rgba(0, 128, 0, 1)">*/</span><span style="color: rgba(128, 0, 0, 1)">
.btn </span>{<span style="color: rgba(255, 0, 0, 1)">
text-decoration</span>:<span style="color: rgba(0, 0, 255, 1)"> none</span>;<span style="color: rgba(255, 0, 0, 1)">
background-color</span>:<span style="color: rgba(0, 0, 255, 1)"> white</span>;<span style="color: rgba(255, 0, 0, 1)">
color</span>:<span style="color: rgba(0, 0, 255, 1)"> #888</span>;<span style="color: rgba(255, 0, 0, 1)">
border-radius</span>:<span style="color: rgba(0, 0, 255, 1)"> 5px</span>;<span style="color: rgba(255, 0, 0, 1)">
display</span>:<span style="color: rgba(0, 0, 255, 1)"> inline-block</span>;<span style="color: rgba(255, 0, 0, 1)">
margin</span>:<span style="color: rgba(0, 0, 255, 1)"> 10px</span>;<span style="color: rgba(255, 0, 0, 1)">
font-size</span>:<span style="color: rgba(0, 0, 255, 1)"> 18px</span>;<span style="color: rgba(255, 0, 0, 1)">
text-transform</span>:<span style="color: rgba(0, 0, 255, 1)"> uppercase</span>;<span style="color: rgba(255, 0, 0, 1)">
font-weight</span>:<span style="color: rgba(0, 0, 255, 1)"> 600</span>;<span style="color: rgba(255, 0, 0, 1)">
padding</span>:<span style="color: rgba(0, 0, 255, 1)"> 10px 5px</span>;
}
<span style="color: rgba(0, 128, 0, 1)">/*</span><span style="color: rgba(0, 128, 0, 1)"> Element </span><span style="color: rgba(0, 128, 0, 1)">*/</span><span style="color: rgba(128, 0, 0, 1)">
.btn__price </span>{<span style="color: rgba(255, 0, 0, 1)">
background-color</span>:<span style="color: rgba(0, 0, 255, 1)"> white</span>;<span style="color: rgba(255, 0, 0, 1)">
color</span>:<span style="color: rgba(0, 0, 255, 1)"> #fff</span>;<span style="color: rgba(255, 0, 0, 1)">
padding-right</span>:<span style="color: rgba(0, 0, 255, 1)"> 12px</span>;<span style="color: rgba(255, 0, 0, 1)">
padding-left</span>:<span style="color: rgba(0, 0, 255, 1)"> 12px</span>;<span style="color: rgba(255, 0, 0, 1)">
margin-right</span>:<span style="color: rgba(0, 0, 255, 1)"> -10px</span>; <span style="color: rgba(0, 128, 0, 1)">/*</span><span style="color: rgba(0, 128, 0, 1)"> realign button text padding </span><span style="color: rgba(0, 128, 0, 1)">*/</span><span style="color: rgba(255, 0, 0, 1)">
font-weight</span>:<span style="color: rgba(0, 0, 255, 1)"> 600</span>;<span style="color: rgba(255, 0, 0, 1)">
background-color</span>:<span style="color: rgba(0, 0, 255, 1)"> #333</span>;<span style="color: rgba(255, 0, 0, 1)">
opacity</span>:<span style="color: rgba(0, 0, 255, 1)"> .4</span>;<span style="color: rgba(255, 0, 0, 1)">
border-radius</span>:<span style="color: rgba(0, 0, 255, 1)"> 5px 0 0 5px</span>;
}
<span style="color: rgba(0, 128, 0, 1)">/*</span><span style="color: rgba(0, 128, 0, 1)"> Element </span><span style="color: rgba(0, 128, 0, 1)">*/</span><span style="color: rgba(128, 0, 0, 1)">
.btn__text </span>{<span style="color: rgba(255, 0, 0, 1)">
padding</span>:<span style="color: rgba(0, 0, 255, 1)"> 0 10px</span>;<span style="color: rgba(255, 0, 0, 1)">
border-radius</span>:<span style="color: rgba(0, 0, 255, 1)"> 0 5px 5px 0</span>;
}
<span style="color: rgba(0, 128, 0, 1)">/*</span><span style="color: rgba(0, 128, 0, 1)"> Modifier </span><span style="color: rgba(0, 128, 0, 1)">*/</span><span style="color: rgba(128, 0, 0, 1)">
.btn--big </span>{<span style="color: rgba(255, 0, 0, 1)">
font-size</span>:<span style="color: rgba(0, 0, 255, 1)"> 28px</span>;<span style="color: rgba(255, 0, 0, 1)">
padding</span>:<span style="color: rgba(0, 0, 255, 1)"> 10px</span>;<span style="color: rgba(255, 0, 0, 1)">
font-weight</span>:<span style="color: rgba(0, 0, 255, 1)"> 400</span>;
}
<span style="color: rgba(0, 128, 0, 1)">/*</span><span style="color: rgba(0, 128, 0, 1)"> Modifier </span><span style="color: rgba(0, 128, 0, 1)">*/</span><span style="color: rgba(128, 0, 0, 1)">
.btn--blue </span>{<span style="color: rgba(255, 0, 0, 1)">
border-color</span>:<span style="color: rgba(0, 0, 255, 1)"> #0074D9</span>;<span style="color: rgba(255, 0, 0, 1)">
color</span>:<span style="color: rgba(0, 0, 255, 1)"> white</span>;<span style="color: rgba(255, 0, 0, 1)">
background-color</span>:<span style="color: rgba(0, 0, 255, 1)"> #0074D9</span>;
}
<span style="color: rgba(0, 128, 0, 1)">/*</span><span style="color: rgba(0, 128, 0, 1)"> Modifier </span><span style="color: rgba(0, 128, 0, 1)">*/</span><span style="color: rgba(128, 0, 0, 1)">
.btn--orange </span>{<span style="color: rgba(255, 0, 0, 1)">
border-color</span>:<span style="color: rgba(0, 0, 255, 1)"> #FF4136</span>;<span style="color: rgba(255, 0, 0, 1)">
color</span>:<span style="color: rgba(0, 0, 255, 1)"> white</span>;<span style="color: rgba(255, 0, 0, 1)">
background-color</span>:<span style="color: rgba(0, 0, 255, 1)"> #FF4136</span>;
}
<span style="color: rgba(0, 128, 0, 1)">/*</span><span style="color: rgba(0, 128, 0, 1)"> Modifier </span><span style="color: rgba(0, 128, 0, 1)">*/</span><span style="color: rgba(128, 0, 0, 1)">
.btn--green </span>{<span style="color: rgba(255, 0, 0, 1)">
border-color</span>:<span style="color: rgba(0, 0, 255, 1)"> #3D9970</span>;<span style="color: rgba(255, 0, 0, 1)">
color</span>:<span style="color: rgba(0, 0, 255, 1)"> white</span>;<span style="color: rgba(255, 0, 0, 1)">
background-color</span>:<span style="color: rgba(0, 0, 255, 1)"> #3D9970</span>;
}<span style="color: rgba(128, 0, 0, 1)">
body </span>{<span style="color: rgba(255, 0, 0, 1)">
font-family</span>:<span style="color: rgba(0, 0, 255, 1)"> "fira-sans-2", sans-serif</span>;<span style="color: rgba(255, 0, 0, 1)">
background-color</span>:<span style="color: rgba(0, 0, 255, 1)"> #ccc</span>;
}</pre>
</div>
<p>HTML:</p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 0, 255, 1)"><</span><span style="color: rgba(128, 0, 0, 1)">a </span><span style="color: rgba(255, 0, 0, 1)">href</span><span style="color: rgba(0, 0, 255, 1)">="http://git.oschina.net/"</span><span style="color: rgba(255, 0, 0, 1)"> class</span><span style="color: rgba(0, 0, 255, 1)">="btn"</span><span style="color: rgba(0, 0, 255, 1)">></span>
<span style="color: rgba(0, 0, 255, 1)"><</span><span style="color: rgba(128, 0, 0, 1)">span </span><span style="color: rgba(255, 0, 0, 1)">class</span><span style="color: rgba(0, 0, 255, 1)">="btn__text"</span><span style="color: rgba(0, 0, 255, 1)">></span>Standard button<span style="color: rgba(0, 0, 255, 1)"></</span><span style="color: rgba(128, 0, 0, 1)">span</span><span style="color: rgba(0, 0, 255, 1)">></span>
<span style="color: rgba(0, 0, 255, 1)"></</span><span style="color: rgba(128, 0, 0, 1)">a</span><span style="color: rgba(0, 0, 255, 1)">></span>
<span style="color: rgba(0, 0, 255, 1)"><</span><span style="color: rgba(128, 0, 0, 1)">a </span><span style="color: rgba(255, 0, 0, 1)">href</span><span style="color: rgba(0, 0, 255, 1)">="http://git.oschina.net/"</span><span style="color: rgba(255, 0, 0, 1)"> class</span><span style="color: rgba(0, 0, 255, 1)">="btn btn--orange btn--big"</span><span style="color: rgba(0, 0, 255, 1)">></span>
<span style="color: rgba(0, 0, 255, 1)"><</span><span style="color: rgba(128, 0, 0, 1)">span </span><span style="color: rgba(255, 0, 0, 1)">class</span><span style="color: rgba(0, 0, 255, 1)">="btn__price"</span><span style="color: rgba(0, 0, 255, 1)">></span>$3<span style="color: rgba(0, 0, 255, 1)"></</span><span style="color: rgba(128, 0, 0, 1)">span</span><span style="color: rgba(0, 0, 255, 1)">></span>
<span style="color: rgba(0, 0, 255, 1)"><</span><span style="color: rgba(128, 0, 0, 1)">span </span><span style="color: rgba(255, 0, 0, 1)">class</span><span style="color: rgba(0, 0, 255, 1)">="btn__text"</span><span style="color: rgba(0, 0, 255, 1)">></span>Big button<span style="color: rgba(0, 0, 255, 1)"></</span><span style="color: rgba(128, 0, 0, 1)">span</span><span style="color: rgba(0, 0, 255, 1)">></span>
<span style="color: rgba(0, 0, 255, 1)"></</span><span style="color: rgba(128, 0, 0, 1)">a</span><span style="color: rgba(0, 0, 255, 1)">></span>
<span style="color: rgba(0, 0, 255, 1)"><</span><span style="color: rgba(128, 0, 0, 1)">a </span><span style="color: rgba(255, 0, 0, 1)">href</span><span style="color: rgba(0, 0, 255, 1)">="http://git.oschina.net/"</span><span style="color: rgba(255, 0, 0, 1)"> class</span><span style="color: rgba(0, 0, 255, 1)">="btn btn--blue btn--big"</span><span style="color: rgba(0, 0, 255, 1)">></span>
<span style="color: rgba(0, 0, 255, 1)"><</span><span style="color: rgba(128, 0, 0, 1)">span </span><span style="color: rgba(255, 0, 0, 1)">class</span><span style="color: rgba(0, 0, 255, 1)">="btn__price"</span><span style="color: rgba(0, 0, 255, 1)">></span>$4<span style="color: rgba(0, 0, 255, 1)"></</span><span style="color: rgba(128, 0, 0, 1)">span</span><span style="color: rgba(0, 0, 255, 1)">></span>
<span style="color: rgba(0, 0, 255, 1)"><</span><span style="color: rgba(128, 0, 0, 1)">span </span><span style="color: rgba(255, 0, 0, 1)">class</span><span style="color: rgba(0, 0, 255, 1)">="btn__text"</span><span style="color: rgba(0, 0, 255, 1)">></span>Big button<span style="color: rgba(0, 0, 255, 1)"></</span><span style="color: rgba(128, 0, 0, 1)">span</span><span style="color: rgba(0, 0, 255, 1)">></span>
<span style="color: rgba(0, 0, 255, 1)"></</span><span style="color: rgba(128, 0, 0, 1)">a</span><span style="color: rgba(0, 0, 255, 1)">></span>
<span style="color: rgba(0, 0, 255, 1)"><</span><span style="color: rgba(128, 0, 0, 1)">a </span><span style="color: rgba(255, 0, 0, 1)">href</span><span style="color: rgba(0, 0, 255, 1)">="http://git.oschina.net/"</span><span style="color: rgba(255, 0, 0, 1)"> class</span><span style="color: rgba(0, 0, 255, 1)">="btn btn--green btn--big"</span><span style="color: rgba(0, 0, 255, 1)">></span>
<span style="color: rgba(0, 0, 255, 1)"><</span><span style="color: rgba(128, 0, 0, 1)">span </span><span style="color: rgba(255, 0, 0, 1)">class</span><span style="color: rgba(0, 0, 255, 1)">="btn__price"</span><span style="color: rgba(0, 0, 255, 1)">></span>$9<span style="color: rgba(0, 0, 255, 1)"></</span><span style="color: rgba(128, 0, 0, 1)">span</span><span style="color: rgba(0, 0, 255, 1)">></span>
<span style="color: rgba(0, 0, 255, 1)"><</span><span style="color: rgba(128, 0, 0, 1)">span </span><span style="color: rgba(255, 0, 0, 1)">class</span><span style="color: rgba(0, 0, 255, 1)">="btn__text"</span><span style="color: rgba(0, 0, 255, 1)">></span>Big button<span style="color: rgba(0, 0, 255, 1)"></</span><span style="color: rgba(128, 0, 0, 1)">span</span><span style="color: rgba(0, 0, 255, 1)">></span>
<span style="color: rgba(0, 0, 255, 1)"></</span><span style="color: rgba(128, 0, 0, 1)">a</span><span style="color: rgba(0, 0, 255, 1)">></span></pre>
</div>
<p>结果:</p>
<p><img src="https://images2018.cnblogs.com/blog/63651/201808/63651-20180829124451546-852054439.png" alt=""></p>
<p> </p>
<h2 id="introduction介绍">Introduction(介绍)</h2>
<ul>
<li>
<p><span style="color: rgba(118, 178, 79, 1)">Block</span></p>
<p>独立实体,独立的意义</p>
<blockquote>
<p>Examples:header, container, menu, checkbox, input</p>
</blockquote>
</li>
<li>
<p><span style="color: rgba(79, 145, 178, 1)">Element</span></p>
<p>block的一部分,没有独立的意义。语意上和block有关系</p>
<blockquote>
<p>Examples:menu item, list item, checkbox caption, header title</p>
</blockquote>
</li>
<li>
<p><span style="color: rgba(213, 99, 93, 1)">Modifier</span></p>
<p>block或element上的flag。使用他来改变外观或行为</p>
<blockquote>
<p>Examples:disabled, highlighted, checked, fixed, size big, color yellow</p>
</blockquote>
</li>
</ul>
<p><img src="https://images2018.cnblogs.com/blog/63651/201808/63651-20180829135858711-229581495.png" alt=""></p>
<h3 id="实例">实例</h3>
<p>页面上一个特定的元素在BEM中的实现。</p>
<p><img src="https://images2018.cnblogs.com/blog/63651/201808/63651-20180829135918888-1688747320.png" alt=""></p>
<p>一般情况下我们有一个正常的按钮,还有两个不同的状态。因为我们使用了BEM的风格块的类选择器,我们可以使用任何标签来实现(button,a,div)。命名规则告诉我们使用 <code>block--modifier-value</code>语法</p>
<p>HTML</p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 0, 255, 1)"><</span><span style="color: rgba(128, 0, 0, 1)">button </span><span style="color: rgba(255, 0, 0, 1)">class</span><span style="color: rgba(0, 0, 255, 1)">="button"</span><span style="color: rgba(0, 0, 255, 1)">></span><span style="color: rgba(0, 0, 0, 1)">
Normal button
</span><span style="color: rgba(0, 0, 255, 1)"></</span><span style="color: rgba(128, 0, 0, 1)">button</span><span style="color: rgba(0, 0, 255, 1)">></span>
<span style="color: rgba(0, 0, 255, 1)"><</span><span style="color: rgba(128, 0, 0, 1)">button </span><span style="color: rgba(255, 0, 0, 1)">class</span><span style="color: rgba(0, 0, 255, 1)">="button button--state-success"</span><span style="color: rgba(0, 0, 255, 1)">></span><span style="color: rgba(0, 0, 0, 1)">
Success button
</span><span style="color: rgba(0, 0, 255, 1)"></</span><span style="color: rgba(128, 0, 0, 1)">button</span><span style="color: rgba(0, 0, 255, 1)">></span>
<span style="color: rgba(0, 0, 255, 1)"><</span><span style="color: rgba(128, 0, 0, 1)">button </span><span style="color: rgba(255, 0, 0, 1)">class</span><span style="color: rgba(0, 0, 255, 1)">="button button--state-danger"</span><span style="color: rgba(0, 0, 255, 1)">></span><span style="color: rgba(0, 0, 0, 1)">
Danger button
</span><span style="color: rgba(0, 0, 255, 1)"></</span><span style="color: rgba(128, 0, 0, 1)">button</span><span style="color: rgba(0, 0, 255, 1)">></span></pre>
</div>
<p>CSS</p>
<div class="cnblogs_code">
<pre><span style="color: rgba(128, 0, 0, 1)">.button </span>{<span style="color: rgba(255, 0, 0, 1)">
display</span>:<span style="color: rgba(0, 0, 255, 1)"> inline-block</span>;<span style="color: rgba(255, 0, 0, 1)">
border-radius</span>:<span style="color: rgba(0, 0, 255, 1)"> 3px</span>;<span style="color: rgba(255, 0, 0, 1)">
padding</span>:<span style="color: rgba(0, 0, 255, 1)"> 7px 12px</span>;<span style="color: rgba(255, 0, 0, 1)">
border</span>:<span style="color: rgba(0, 0, 255, 1)"> 1px solid #D5D5D5</span>;<span style="color: rgba(255, 0, 0, 1)">
background-image</span>:<span style="color: rgba(0, 0, 255, 1)"> linear-gradient(#EEE, #DDD)</span>;<span style="color: rgba(255, 0, 0, 1)">
font</span>:<span style="color: rgba(0, 0, 255, 1)"> 700 13px/18px Helvetica, arial</span>;
}<span style="color: rgba(128, 0, 0, 1)">
.button--state-success </span>{<span style="color: rgba(255, 0, 0, 1)">
color</span>:<span style="color: rgba(0, 0, 255, 1)"> #FFF</span>;<span style="color: rgba(255, 0, 0, 1)">
background</span>:<span style="color: rgba(0, 0, 255, 1)"> #569E3D linear-gradient(#79D858, #569E3D) repeat-x</span>;<span style="color: rgba(255, 0, 0, 1)">
border-color</span>:<span style="color: rgba(0, 0, 255, 1)"> #4A993E</span>;
}<span style="color: rgba(128, 0, 0, 1)">
.button--state-danger </span>{<span style="color: rgba(255, 0, 0, 1)">
color</span>:<span style="color: rgba(0, 0, 255, 1)"> #900</span>;
}</pre>
</div>
<h3 id="优点">优点</h3>
<ul>
<li>
<p>模块化</p>
<p>block样式从来不依赖页面上的其他元素。你还可以将blocks从已经完成的项目转移到新的项目</p>
</li>
<li>
<p>重用性</p>
<p>以不同的方式组成独立的blocks,减少可维护css代码量。通过一套风格,你可以使用你的超级牛叉效果构建一个库</p>
</li>
<li>
<p>结构</p>
<p>BEM方法为你的css代码提供了一个简单易懂的结构</p>
</li>
</ul>
<h2 id="naming命名">Naming(命名)</h2>
<p>正确的命名可以提高开发效率、调试和实现旧代码中的功能。遗憾的是,大多数css没有任何结构和命名规范。这导致时间长了css代码不可维护。</p>
<p>BEM方法确保每个网站的开发人员使用单个代码库和同一种语言。使用正确的命名将会为你的网站设计改变做好准备</p>
<ul>
<li>
<p><span style="color: rgba(118, 178, 79, 1)">Block</span></p>
<p>封装一个独立的实体,他具有意义。虽然Block可以相互嵌套,但是在语意上让他们保持相互的独立,没有优先级或层次结构。整体实体没有DOM表示(如controllers或models)也可以是Block</p>
<ul>
<li>
<p>Naming</p>
<p>Block名称可以由字母、数字和破折号组成一个类,增加一个简短的前缀为命名空间:<code>.block</code></p>
</li>
<li>
<p>HTML</p>
<p>任何DOM节点如果接收一个类名他能成为一个Block。</p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 0, 255, 1)"><</span><span style="color: rgba(128, 0, 0, 1)">div </span><span style="color: rgba(255, 0, 0, 1)">class</span><span style="color: rgba(0, 0, 255, 1)">="block"</span><span style="color: rgba(0, 0, 255, 1)">></span>...<span style="color: rgba(0, 0, 255, 1)"></</span><span style="color: rgba(128, 0, 0, 1)">div</span><span style="color: rgba(0, 0, 255, 1)">></span></pre>
</div>
<p> </p>
</li>
<li>
<p>CSS</p>
<ul>
<li>仅使用类名选择器</li>
<li>没有标签名或ID</li>
<li>不依赖页面上的其他Block/Elements</li>
</ul>
<div class="cnblogs_code">
<pre><span style="color: rgba(128, 0, 0, 1)">.block </span>{<span style="color: rgba(255, 0, 0, 1)"> color</span>:<span style="color: rgba(0, 0, 255, 1)"> #042</span>; }</pre>
</div>
<p> </p>
</li>
</ul>
</li>
<li>
<p><span style="color: rgba(79, 145, 178, 1)">Element</span></p>
<p>Block的一部分,没有独立的意义。任何元素在语意上是绑在他的Block上</p>
<ul>
<li>
<p>Naming</p>
<p>Elements名称可以由字母、数字、破折号和下划线。CSS类名由Block名称加两个下划线加Elements名:<code>.block__elem</code></p>
</li>
<li>
<p>HTML</p>
<p>在给定的Block内的任何DOM都可以成为一个Elements。所有Elements在语意上相等。</p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 0, 255, 1)"><</span><span style="color: rgba(128, 0, 0, 1)">div </span><span style="color: rgba(255, 0, 0, 1)">class</span><span style="color: rgba(0, 0, 255, 1)">="block"</span><span style="color: rgba(0, 0, 255, 1)">></span><span style="color: rgba(0, 0, 0, 1)">
...
</span><span style="color: rgba(0, 0, 255, 1)"><</span><span style="color: rgba(128, 0, 0, 1)">span </span><span style="color: rgba(255, 0, 0, 1)">class</span><span style="color: rgba(0, 0, 255, 1)">="block__elem"</span><span style="color: rgba(0, 0, 255, 1)">></</span><span style="color: rgba(128, 0, 0, 1)">span</span><span style="color: rgba(0, 0, 255, 1)">></span>
<span style="color: rgba(0, 0, 255, 1)"></</span><span style="color: rgba(128, 0, 0, 1)">div</span><span style="color: rgba(0, 0, 255, 1)">></span></pre>
</div>
<p> </p>
</li>
<li>
<p>CSS</p>
<ul>
<li>仅使用类名选择器</li>
<li>没有标签名或ID</li>
<li>不依赖页面上的其他Block/Elements</li>
</ul>
<p>正确的</p>
<div class="cnblogs_code">
<pre><span style="color: rgba(128, 0, 0, 1)">css .block__elem </span>{<span style="color: rgba(255, 0, 0, 1)"> color</span>:<span style="color: rgba(0, 0, 255, 1)"> #042</span>; }</pre>
</div>
<p> </p>
<p>错误的</p>
</li>
<li>
<div class="cnblogs_code">
<pre><span style="color: rgba(128, 0, 0, 1)">css .block .block__elem </span>{<span style="color: rgba(255, 0, 0, 1)"> color</span>:<span style="color: rgba(0, 0, 255, 1)"> #042</span>; }<span style="color: rgba(128, 0, 0, 1)"> div.block__elem </span>{<span style="color: rgba(255, 0, 0, 1)"> color</span>:<span style="color: rgba(0, 0, 255, 1)"> #042</span>; }</pre>
</div>
</li>
</ul>
</li>
<li>
<p><span style="color: rgba(213, 99, 93, 1)">Modifier</span></p>
<p>在Block或Elements上的Flags,使用它们来改变外观、行为或状态。</p>
<ul>
<li>
<p>Naming</p>
<p>Modifier名称可以由字母、数字、破折号和下划线。CSS类名由Block或Element的名称加上两个破折号。<code>.block--mod</code>或<code>.block__elem--mod</code>和<code>.block--color-black</code>与<code>.block--color-red</code>Spaces in complicated modifiers are replaced by dash.</p>
</li>
<li>
<p>HTML</p>
<p>Modifier是添加到你的Block/Elements类名中额外的扩展。只给Block/Elements他们的修饰添加Modifier,并且保持他们原来的类</p>
<p>正确的</p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 0, 255, 1)"><</span><span style="color: rgba(128, 0, 0, 1)">div </span><span style="color: rgba(255, 0, 0, 1)">class</span><span style="color: rgba(0, 0, 255, 1)">="block block--mod"</span><span style="color: rgba(0, 0, 255, 1)">></span>...<span style="color: rgba(0, 0, 255, 1)"></</span><span style="color: rgba(128, 0, 0, 1)">div</span><span style="color: rgba(0, 0, 255, 1)">></span> <span style="color: rgba(0, 0, 255, 1)"><</span><span style="color: rgba(128, 0, 0, 1)">div </span><span style="color: rgba(255, 0, 0, 1)">class</span><span style="color: rgba(0, 0, 255, 1)">="block block--size-big block--shadow-yes"</span><span style="color: rgba(0, 0, 255, 1)">></span>...<span style="color: rgba(0, 0, 255, 1)"></</span><span style="color: rgba(128, 0, 0, 1)">div</span><span style="color: rgba(0, 0, 255, 1)">></span></pre>
</div>
<p> </p>
<p>错误的</p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 0, 255, 1)"><</span><span style="color: rgba(128, 0, 0, 1)">div </span><span style="color: rgba(255, 0, 0, 1)">class</span><span style="color: rgba(0, 0, 255, 1)">="block--mod"</span><span style="color: rgba(0, 0, 255, 1)">></span>...<span style="color: rgba(0, 0, 255, 1)"></</span><span style="color: rgba(128, 0, 0, 1)">div</span><span style="color: rgba(0, 0, 255, 1)">></span></pre>
</div>
</li>
<li>
<p>CSS</p>
<p>使用Modifier的类名选择:</p>
</li>
<li>
<div class="cnblogs_code">
<pre><span style="color: rgba(128, 0, 0, 1)">.block--hidden </span>{ }</pre>
</div>
</li>
<li>
<p> </p>
<p>改变Elements基于一个块级Modifier:</p>
<div class="cnblogs_code">
<pre><span style="color: rgba(128, 0, 0, 1)">.block--mod .block__elem </span>{ }</pre>
</div>
<p> </p>
<p>Elements Modifier</p>
<div class="cnblogs_code">
<pre><span style="color: rgba(128, 0, 0, 1)">.block__elem--mod </span>{ }</pre>
</div>
<p> </p>
</li>
</ul>
</li>
</ul>
<h3 id="example">Example</h3>
<p>假设你有一个From Block与modifiers<code>theme: "xmas</code>和<code>simple: true</code>和elements<code>input</code>、<code>submit</code>和元素<code>submit</code>他具有自己的修饰符<code>disabled: true</code>没填写表单时的样式。</p>
<ul>
<li>
<p>HTML</p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 0, 255, 1)"><</span><span style="color: rgba(128, 0, 0, 1)">form </span><span style="color: rgba(255, 0, 0, 1)">class</span><span style="color: rgba(0, 0, 255, 1)">="form form--theme-xmas form--simple"</span><span style="color: rgba(0, 0, 255, 1)">></span>
<span style="color: rgba(0, 0, 255, 1)"><</span><span style="color: rgba(128, 0, 0, 1)">input </span><span style="color: rgba(255, 0, 0, 1)">class</span><span style="color: rgba(0, 0, 255, 1)">="form__input"</span><span style="color: rgba(255, 0, 0, 1)"> type</span><span style="color: rgba(0, 0, 255, 1)">="text"</span> <span style="color: rgba(0, 0, 255, 1)">/></span>
<span style="color: rgba(0, 0, 255, 1)"><</span><span style="color: rgba(128, 0, 0, 1)">input
</span><span style="color: rgba(255, 0, 0, 1)">class</span><span style="color: rgba(0, 0, 255, 1)">="form__submit form__submit--disabled"</span><span style="color: rgba(255, 0, 0, 1)">
type</span><span style="color: rgba(0, 0, 255, 1)">="submit"</span> <span style="color: rgba(0, 0, 255, 1)">/></span>
<span style="color: rgba(0, 0, 255, 1)"></</span><span style="color: rgba(128, 0, 0, 1)">form</span><span style="color: rgba(0, 0, 255, 1)">></span></pre>
</div>
</li>
<li>
<p>CSS</p>
<div class="cnblogs_code">
<pre><span style="color: rgba(128, 0, 0, 1)">.form </span>{ }<span style="color: rgba(128, 0, 0, 1)">
.form--theme-xmas </span>{ }<span style="color: rgba(128, 0, 0, 1)">
.form--simple </span>{ }<span style="color: rgba(128, 0, 0, 1)">
.form__input </span>{ }<span style="color: rgba(128, 0, 0, 1)">
.form__submit </span>{ }<span style="color: rgba(128, 0, 0, 1)">
.form__submit--disabled </span>{ }</pre>
</div>
</li>
</ul>
<p><strong><span style="font-size: 18pt">一、什么是BEM?</span></strong></p>
<p> BEM代表块(Block),元素(Element),修饰符(Modifier)。无论是什么网站页面,都可以拆解成这三部分。</p>
<p><span style="font-size: 18pt"><strong>二、带你认识网页</strong></span></p>
<p> 我们来看一下qq的官网,它可以由三个块组成:logo,导航nav和页面主题mian三个模块构成,如果再细分一下呢?logo是由图片和文字两个元素组成,导航由三个元素组成,页面主题中包含图片,文字和按钮三个元素,</p>
<p>如果把一个块看作是一个数组的话,那么元素就是数组中的每一项。</p>
<p> 什么是修饰符呢?你可以看作是元素的属性,或者是他的形态、状态,比如导航中的三个元素有的长,有的短,页面主体文字有的大,有的小</p>
<p><img src="https://img2018.cnblogs.com/blog/1412010/201901/1412010-20190112160106389-483776735.png" alt="" width="843" height="447"></p>
<p><strong><span style="font-size: 18pt">三、BEM命名如何书写</span></strong></p>
<p> BEM给我们的规定是块和元素之间用<span style="background-color: rgba(121, 225, 223, 1)"> — </span>连接,元素和修饰符之间用<span style="background-color: rgba(121, 225, 223, 1)"> _ </span>连接。例如:我们要设置表格某一行的背景颜色为红色,我们可以如下命名</p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 0, 255, 1)"><</span><span style="color: rgba(128, 0, 0, 1)">div </span><span style="color: rgba(255, 0, 0, 1)">class</span><span style="color: rgba(0, 0, 255, 1)">="table-row_red"</span><span style="color: rgba(0, 0, 255, 1)">></</span><span style="color: rgba(128, 0, 0, 1)">div</span><span style="color: rgba(0, 0, 255, 1)">></span></pre>
</div>
<p> </p>
<p><span style="font-size: 18pt"><strong>四、实战篇</strong></span></p>
<p> 下面,我们来用bem的命名规范来写一下qq的官网</p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 0, 255, 1)"> <</span><span style="color: rgba(128, 0, 0, 1)">header</span><span style="color: rgba(0, 0, 255, 1)">></span>
<span style="color: rgba(0, 0, 255, 1)"><</span><span style="color: rgba(128, 0, 0, 1)">div </span><span style="color: rgba(255, 0, 0, 1)">class</span><span style="color: rgba(0, 0, 255, 1)">="logo"</span><span style="color: rgba(0, 0, 255, 1)">></span>
<span style="color: rgba(0, 0, 255, 1)"><</span><span style="color: rgba(128, 0, 0, 1)">img </span><span style="color: rgba(255, 0, 0, 1)">class</span><span style="color: rgba(0, 0, 255, 1)">="logo-img"</span><span style="color: rgba(255, 0, 0, 1)"> src</span><span style="color: rgba(0, 0, 255, 1)">="./logo.png"</span><span style="color: rgba(255, 0, 0, 1)"> alt</span><span style="color: rgba(0, 0, 255, 1)">=""</span><span style="color: rgba(0, 0, 255, 1)">></span>
<span style="color: rgba(0, 0, 255, 1)"><</span><span style="color: rgba(128, 0, 0, 1)">span </span><span style="color: rgba(255, 0, 0, 1)">class</span><span style="color: rgba(0, 0, 255, 1)">="logo-words_big"</span><span style="color: rgba(0, 0, 255, 1)">></span>QQ·<span style="color: rgba(0, 0, 255, 1)"></</span><span style="color: rgba(128, 0, 0, 1)">span</span><span style="color: rgba(0, 0, 255, 1)">></span>
<span style="color: rgba(0, 0, 255, 1)"><</span><span style="color: rgba(128, 0, 0, 1)">span </span><span style="color: rgba(255, 0, 0, 1)">class</span><span style="color: rgba(0, 0, 255, 1)">="logo-word_small"</span><span style="color: rgba(0, 0, 255, 1)">></span>PC版<span style="color: rgba(0, 0, 255, 1)"></</span><span style="color: rgba(128, 0, 0, 1)">span</span><span style="color: rgba(0, 0, 255, 1)">></span>
<span style="color: rgba(0, 0, 255, 1)"></</span><span style="color: rgba(128, 0, 0, 1)">div</span><span style="color: rgba(0, 0, 255, 1)">></span>
<span style="color: rgba(0, 0, 255, 1)"><</span><span style="color: rgba(128, 0, 0, 1)">ul </span><span style="color: rgba(255, 0, 0, 1)">class</span><span style="color: rgba(0, 0, 255, 1)">="nav"</span><span style="color: rgba(0, 0, 255, 1)">></span>
<span style="color: rgba(0, 0, 255, 1)"><</span><span style="color: rgba(128, 0, 0, 1)">li </span><span style="color: rgba(255, 0, 0, 1)">class</span><span style="color: rgba(0, 0, 255, 1)">="nav-item"</span><span style="color: rgba(0, 0, 255, 1)">></span>QQ官网首页<span style="color: rgba(0, 0, 255, 1)"></</span><span style="color: rgba(128, 0, 0, 1)">li</span><span style="color: rgba(0, 0, 255, 1)">></span>
<span style="color: rgba(0, 0, 255, 1)"><</span><span style="color: rgba(128, 0, 0, 1)">li </span><span style="color: rgba(255, 0, 0, 1)">class</span><span style="color: rgba(0, 0, 255, 1)">="nav-item"</span><span style="color: rgba(0, 0, 255, 1)">></span>申请QQ<span style="color: rgba(0, 0, 255, 1)"></</span><span style="color: rgba(128, 0, 0, 1)">li</span><span style="color: rgba(0, 0, 255, 1)">></span>
<span style="color: rgba(0, 0, 255, 1)"><</span><span style="color: rgba(128, 0, 0, 1)">li </span><span style="color: rgba(255, 0, 0, 1)">class</span><span style="color: rgba(0, 0, 255, 1)">="nav-item"</span><span style="color: rgba(0, 0, 255, 1)">></span>当前在线用户:2559393943<span style="color: rgba(0, 0, 255, 1)"></</span><span style="color: rgba(128, 0, 0, 1)">li</span><span style="color: rgba(0, 0, 255, 1)">></span>
<span style="color: rgba(0, 0, 255, 1)"></</span><span style="color: rgba(128, 0, 0, 1)">ul</span><span style="color: rgba(0, 0, 255, 1)">></span>
<span style="color: rgba(0, 0, 255, 1)"></</span><span style="color: rgba(128, 0, 0, 1)">header</span><span style="color: rgba(0, 0, 255, 1)">></span>
<span style="color: rgba(0, 0, 255, 1)"><</span><span style="color: rgba(128, 0, 0, 1)">div </span><span style="color: rgba(255, 0, 0, 1)">class</span><span style="color: rgba(0, 0, 255, 1)">="main"</span><span style="color: rgba(0, 0, 255, 1)">></span>
<span style="color: rgba(0, 0, 255, 1)"><</span><span style="color: rgba(128, 0, 0, 1)">img </span><span style="color: rgba(255, 0, 0, 1)">class</span><span style="color: rgba(0, 0, 255, 1)">="main-img"</span><span style="color: rgba(255, 0, 0, 1)"> src</span><span style="color: rgba(0, 0, 255, 1)">="./img.png"</span><span style="color: rgba(255, 0, 0, 1)"> alt</span><span style="color: rgba(0, 0, 255, 1)">=""</span> <span style="color: rgba(0, 0, 255, 1)">></span>
<span style="color: rgba(0, 0, 255, 1)"><</span><span style="color: rgba(128, 0, 0, 1)">div </span><span style="color: rgba(255, 0, 0, 1)">class</span><span style="color: rgba(0, 0, 255, 1)">="main-words_small"</span><span style="color: rgba(0, 0, 255, 1)">></span>QQ PC版9.0.8<span style="color: rgba(0, 0, 255, 1)"></</span><span style="color: rgba(128, 0, 0, 1)">div</span><span style="color: rgba(0, 0, 255, 1)">></span>
<span style="color: rgba(0, 0, 255, 1)"><</span><span style="color: rgba(128, 0, 0, 1)">div </span><span style="color: rgba(255, 0, 0, 1)">class</span><span style="color: rgba(0, 0, 255, 1)">="main-words_big"</span><span style="color: rgba(0, 0, 255, 1)">></span>从新出发·趣无止境<span style="color: rgba(0, 0, 255, 1)"></</span><span style="color: rgba(128, 0, 0, 1)">div</span><span style="color: rgba(0, 0, 255, 1)">></span>
<span style="color: rgba(0, 0, 255, 1)"><</span><span style="color: rgba(128, 0, 0, 1)">button </span><span style="color: rgba(255, 0, 0, 1)">class</span><span style="color: rgba(0, 0, 255, 1)">="mian-button_blue"</span><span style="color: rgba(0, 0, 255, 1)">></span>立即下载<span style="color: rgba(0, 0, 255, 1)"></</span><span style="color: rgba(128, 0, 0, 1)">button</span><span style="color: rgba(0, 0, 255, 1)">></span>
<span style="color: rgba(0, 0, 255, 1)"></</span><span style="color: rgba(128, 0, 0, 1)">div</span><span style="color: rgba(0, 0, 255, 1)">></span></pre>
</div>
<p> </p>
<p>是不是清晰了很多,即使是换作另一个人修改这个页面也是一眼就能找到的。<strong>这样就大大减少了我们的维护成本。</strong></p>
<p><span style="font-size: 18pt"><strong>五、拓展</strong></span></p>
<p><span style="font-size: 18pt"><span style="font-size: 14px"> <br></span></span>
</p>
<p><span style="font-size: 18pt"><span style="font-size: 14px"> 如果你还是不太理解什么是BEM,没关系,我们和人体结合一下,看看他们之间有什么相似之处。</span></span>
</p>
<p><span style="font-size: 18pt"><span style="font-size: 14px"><img src="https://img2018.cnblogs.com/blog/1412010/201901/1412010-20190112164616581-803756344.png" alt=""></span></span>
</p>
<p> 上面是一张小女孩的人体结构图,我们可以把她分成三个部门,也就是三个块(Block),分别是头(header),身体(body)和脚(footer),我们单看头部,里边有很多个元素(Element)组成,比如头发(hair)、眼睛(eye)、耳朵(ear)、牙齿(tooth)等等,</p>
<p>身体里呢?包含胳膊(arm)、手指(finger)等元素构成,脚部由脚(foot)和脚趾(toe)组成。小女孩的头发是棕色的(brown),好了,我们可以用BEM规范来命名一下小女孩的结构了</p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 0, 255, 1)"> <</span><span style="color: rgba(128, 0, 0, 1)">div </span><span style="color: rgba(255, 0, 0, 1)">class</span><span style="color: rgba(0, 0, 255, 1)">="header"</span><span style="color: rgba(0, 0, 255, 1)">></span>
<span style="color: rgba(0, 0, 255, 1)"><</span><span style="color: rgba(128, 0, 0, 1)">div </span><span style="color: rgba(255, 0, 0, 1)">class</span><span style="color: rgba(0, 0, 255, 1)">="header-hair_brown"</span><span style="color: rgba(0, 0, 255, 1)">></</span><span style="color: rgba(128, 0, 0, 1)">div</span><span style="color: rgba(0, 0, 255, 1)">></span>
<span style="color: rgba(0, 0, 255, 1)"><</span><span style="color: rgba(128, 0, 0, 1)">div </span><span style="color: rgba(255, 0, 0, 1)">class</span><span style="color: rgba(0, 0, 255, 1)">="header-eye"</span><span style="color: rgba(0, 0, 255, 1)">></</span><span style="color: rgba(128, 0, 0, 1)">div</span><span style="color: rgba(0, 0, 255, 1)">></span>
<span style="color: rgba(0, 0, 255, 1)"><</span><span style="color: rgba(128, 0, 0, 1)">div </span><span style="color: rgba(255, 0, 0, 1)">class</span><span style="color: rgba(0, 0, 255, 1)">="header-ear"</span><span style="color: rgba(0, 0, 255, 1)">></span>
<span style="color: rgba(0, 0, 255, 1)"><</span><span style="color: rgba(128, 0, 0, 1)">div </span><span style="color: rgba(255, 0, 0, 1)">class</span><span style="color: rgba(0, 0, 255, 1)">="header-ear_left"</span><span style="color: rgba(0, 0, 255, 1)">></</span><span style="color: rgba(128, 0, 0, 1)">div</span><span style="color: rgba(0, 0, 255, 1)">></span>
<span style="color: rgba(0, 0, 255, 1)"><</span><span style="color: rgba(128, 0, 0, 1)">div </span><span style="color: rgba(255, 0, 0, 1)">class</span><span style="color: rgba(0, 0, 255, 1)">="header-ear_right"</span><span style="color: rgba(0, 0, 255, 1)">></</span><span style="color: rgba(128, 0, 0, 1)">div</span><span style="color: rgba(0, 0, 255, 1)">></span>
<span style="color: rgba(0, 0, 255, 1)"></</span><span style="color: rgba(128, 0, 0, 1)">div</span><span style="color: rgba(0, 0, 255, 1)">></span><span style="color: rgba(0, 0, 0, 1)">
.......
</span><span style="color: rgba(0, 0, 255, 1)"></</span><span style="color: rgba(128, 0, 0, 1)">div</span><span style="color: rgba(0, 0, 255, 1)">></span>
<span style="color: rgba(0, 0, 255, 1)"><</span><span style="color: rgba(128, 0, 0, 1)">div </span><span style="color: rgba(255, 0, 0, 1)">class</span><span style="color: rgba(0, 0, 255, 1)">="body"</span><span style="color: rgba(0, 0, 255, 1)">></span>
<span style="color: rgba(0, 0, 255, 1)"><</span><span style="color: rgba(128, 0, 0, 1)">div </span><span style="color: rgba(255, 0, 0, 1)">class</span><span style="color: rgba(0, 0, 255, 1)">="body-arm"</span><span style="color: rgba(0, 0, 255, 1)">></span>
<span style="color: rgba(0, 0, 255, 1)"><</span><span style="color: rgba(128, 0, 0, 1)">div </span><span style="color: rgba(255, 0, 0, 1)">class</span><span style="color: rgba(0, 0, 255, 1)">="body-arm_left"</span><span style="color: rgba(0, 0, 255, 1)">></</span><span style="color: rgba(128, 0, 0, 1)">div</span><span style="color: rgba(0, 0, 255, 1)">></span>
<span style="color: rgba(0, 0, 255, 1)"><</span><span style="color: rgba(128, 0, 0, 1)">div </span><span style="color: rgba(255, 0, 0, 1)">class</span><span style="color: rgba(0, 0, 255, 1)">="body-arm_right"</span><span style="color: rgba(0, 0, 255, 1)">></</span><span style="color: rgba(128, 0, 0, 1)">div</span><span style="color: rgba(0, 0, 255, 1)">></span>
<span style="color: rgba(0, 0, 255, 1)"></</span><span style="color: rgba(128, 0, 0, 1)">div</span><span style="color: rgba(0, 0, 255, 1)">></span>
<span style="color: rgba(0, 0, 255, 1)"><</span><span style="color: rgba(128, 0, 0, 1)">div </span><span style="color: rgba(255, 0, 0, 1)">class</span><span style="color: rgba(0, 0, 255, 1)">="finger"</span><span style="color: rgba(0, 0, 255, 1)">></</span><span style="color: rgba(128, 0, 0, 1)">div</span><span style="color: rgba(0, 0, 255, 1)">></span><span style="color: rgba(0, 0, 0, 1)">
.......
</span><span style="color: rgba(0, 0, 255, 1)"></</span><span style="color: rgba(128, 0, 0, 1)">div</span><span style="color: rgba(0, 0, 255, 1)">></span>
<span style="color: rgba(0, 0, 255, 1)"><</span><span style="color: rgba(128, 0, 0, 1)">div </span><span style="color: rgba(255, 0, 0, 1)">class</span><span style="color: rgba(0, 0, 255, 1)">="footer"</span><span style="color: rgba(0, 0, 255, 1)">></span>
<span style="color: rgba(0, 0, 255, 1)"><</span><span style="color: rgba(128, 0, 0, 1)">div </span><span style="color: rgba(255, 0, 0, 1)">class</span><span style="color: rgba(0, 0, 255, 1)">="footer-foot"</span><span style="color: rgba(0, 0, 255, 1)">></</span><span style="color: rgba(128, 0, 0, 1)">div</span><span style="color: rgba(0, 0, 255, 1)">></span>
<span style="color: rgba(0, 0, 255, 1)"><</span><span style="color: rgba(128, 0, 0, 1)">div </span><span style="color: rgba(255, 0, 0, 1)">class</span><span style="color: rgba(0, 0, 255, 1)">="footer-toe"</span><span style="color: rgba(0, 0, 255, 1)">></</span><span style="color: rgba(128, 0, 0, 1)">div</span><span style="color: rgba(0, 0, 255, 1)">></span>
<span style="color: rgba(0, 0, 255, 1)"></</span><span style="color: rgba(128, 0, 0, 1)">div</span><span style="color: rgba(0, 0, 255, 1)">></span></pre>
</div>
<p> </p>
<p> </p>
<p><span style="font-size: 18pt"><strong>六、结束语</strong></span></p>
<p> BEM是一个非常有用,强大,简单的命名约定,以至于让你的前端代码更容易阅读和理解,更容易协作,更容易控制,更加健壮和明确而且更加严密。它对前端开发者都是一个巨有价值的工具。</p>
<p> </p><br><br>
来源:https://www.cnblogs.com/best/p/9553618.html
頁:
[1]