面向对象的 CSS。OOCSS 的想法首先要明白 CSS 的 “Object” 是个毛线玩意。html
CSS的样式是须要应用到页面的结构上的。通俗的讲就是须要应用到HTML标签上。好比一个页面上的一个区域、控件、标签等,就是一个 Object ,大部分状况下,这种 Object 确定是能够复用的。ide
常见的好比 Button按钮。视觉上就多是一个图形按钮,而后咱们能够在其上面添加各类样式,以得到咱们想要的效果。spa
Tag : button
calss: btn
OOCSS 有个特色就是结构和样式是分开的,好比说一个渐变按钮,那么 .btn 的 class 是不会包含渐变相关的属性的,而是须要单独抽取出一个渐变的 class,而后让 .btn 去扩展从而获得一个渐变的按钮。设计
.btn {//结构 ... } .btn.btn-info {//样式 backgrond: green; }
//这彷佛有点像Bootstrap的味道
就像官方说的那样,一个 Object 包含了四个部分:code
另外一个特色在于,OOCSS 认为 container 和 content 是须要隔离开的(这里的container只是将一块区域包裹起来,并不具备任何特殊的意义)。也就是说,尽可能不要去使用依赖于节点结构位置的样式定义。好比这样的就是不容许的:htm
.video-container .title{ ... }
OOCSS 中会建议你直接这样去写:也就是直接去写这个元素。对象
.title{ ... }
BEM是一套严格但合理的命名规范使得你的 class 保持一个较好的可读性和维护性。方便合做开发,别人容易读得懂你的代码,你也容易维护好你的样式。blog
格式为:事件
.block{} .block__element{} .block--modifier{}
格式大约就是如上所属那样,固然,有一点须要注意,多层 DOM 节点的状况下正确的写法应该是这样的:图片
<div class="block"> <div class="block__e1"> <button class="block__e2"></button> </div> </div>
Stackoverflow 上有个特别好的解释对于 BEM 的说法点这里查看
简单说,就是 html 是一个 DOM树,那么你在写样式的的时候就写成一个 BEM树一一对应就能够了。看例子:
html:
<ul> <li> <a> <span></span> </a> </li> </ul>
DOM树中有以下四个节点:
ul
ul>li
ul>li>a
ul>li>a>span
那么对应的咱们就能够设计出以下的 BEM class:
<ul class="menu"> <li class="menu__item"> <a class="menu__link"> <span class="menu__text"></span> </a> </li> </ul>