美文网首页
瞎扯扯OOCSS,ACSS,BEM,SMACSS

瞎扯扯OOCSS,ACSS,BEM,SMACSS

作者: zerob13 | 来源:发表于2017-03-13 18:22 被阅读1349次

最近在看一些 CSS 的东西,想要提高一下自己在这方面的姿势水平。很久之前就了解到 BEM 了,当时还是在 ifanr 工作的网红莎莎大神和我说了这个。突然想到自己似乎也应该深入去了解一下这些东西。于是就看了一些资料,整理一下,且做个记录。

我这几年写 CSS ,核心的想法就是组件化模块化,这样就更好控制也减少改一个小东西整个页面爆炸了的可能性。所以如何去组织 CSS 也是蛮重要的一部分。

Object Oriented CSS (OOCSS)

面向对象的 CSS,字面意思就大概是这样把,反正一看到 OO 脑子里第一个反应就是 Java 的那种风格,可能是我安卓写多了……

OOCSS 的想法首先要明白 CSS 的 “Object” 是个毛线玩意。我粗鄙的理解下,应该一般指一个视觉上的图案、控件等,就是一个 Object ,大部分情况下,这种 Object 肯定是可以复用的。

常见的比如 Button ,按钮。

Tag : a,button
calss: btn

视觉上就可能是一个图形按钮等等,这里不展开说了,有兴趣可以去看 https://github.com/stubbornella/oocss/wiki

OOCSS 有个特点就是结构和皮肤是分开的,比如说一个渐变按钮,那么 .btn 的 class 是不会包含渐变相关的属性的,而是需要单独抽取出一个渐变的 class,然后让 .btn 去扩展从而得到一个渐变的按钮。

就像官方说的那样,一个 Object 包含了四个部分:

  1. HTML ,会有一个到多个的 DOM 节点
  2. CSS , 用来表示上述节点的样式, 这些样式都会以最外面的包裹层 Node 的 class Name 开始
  3. 背景图片、或者其他的一些用来展示的资源组成的组件
  4. Javascript 的事件,行为等。

另一个特点在于,OOCSS 认为 container 和 content 是需要隔离开的。也就是说,尽量不要去使用依赖于节点结构位置的样式定义。比如这样的就是不允许的:

.video-container .title{
  ...
}

OOCSS 中会建议你直接这样去写:

.title{
  ...
}

也就是直接去写这个元素。

另外 OOCSS 也定义了一整套的 Module Grid 等等,有兴趣可以去看 https://github.com/stubbornella/oocss/wiki

Atomic CSS

这个东西我是最近才看到的,官网上它也自称是为了组件化的 CSS 而设计的产物。顾名思义,这货的原则就是原子化的提供 class ,让你用起来非常顺手就像 inline 的 style 一样。

有一个思想叫做 Atomic Design ,简而言之就是一切都是原子组件构造而成。比较有趣的是,这个思想引入了一些科学名词,具体请看后面的介绍。

那么什么是原子(Atom)呢?

  • 每一个 HTML 元素就是一个原子。比如一个 input

然后用原子组成分子(molecules)

  • 就是一堆原子组件得到的东西,比如说一个输入框,前面有个 label,中间有个input,最后还有个提交 button

接着合成生物体(Organisms)

  • 所谓的生物体(不知道翻译的对不对,反正大概就是有机物之类的东西)就是一堆分子组合而成的,最简单的例子就是网站的一个 header 里面包含了搜索框、导航栏也许还有用户中心什么的。

之后一层就是比较正经的名字了,叫模版 (Templates):

  • 这个的话大家都应该熟悉了,在 ACSS 里面模版也就是把各种东西组合起来之后的布局等,基本上整个站点的结构都已经成型了

最后一层就是页面(Pages)

  • 这个就更简单了,就是加上图片等等其他的乱七八糟的东西,得到了最终的页面

Atomic CSS 有一点特别有趣的的是,基本上抛弃了所有的原来 CSS 的做法。它会针对每个选择器定义一个可以复用的 class 。比如:

.Bgc-fff{
   background-color:#fff;
}
<div class="Bgc-fff"></div>

当然,引入一些预处理的手段后,你写出来的代码可能就是这样的了:

<div class="Bgc(#fff)">
</div>
 

看上去是不是很扯,但是相信你已经 get 到 ACSS 的点了。其实就是 Style with class,就好像你所有的样式都是 inline 了一样一目了然。好处就是不用在管理各种页面各自的样式文件了,你准备好一个原子库,直接写 html 就能把样式写出来。问题也很明显,如果要做响应式就会比较麻烦,因为你的样式都是原子性的写在 html 中,那么可能比较简单的方法就只能是根据平台下发不同的 html 来解决这一个问题了。

总之还是蛮有趣的一个方案。

Block,Element,Modifier(BEM)

BEM 相对来说就比较有名了,简单的说,就是通过遵循一套严格但合理的命名规范使得你的 class 保持一个较好的可读性和维护性。
好处也很明显,方便合作开发,别人容易读得懂你的代码,你也容易维护好你的样式。这个就直接上例子了:

.block{}

.block__element{}

.block--modifier{}

格式大约就是如上所属那样,当然,有一点需要注意,多层 DOM 节点的情况下正确的写法应该是这样的:

<div class="block">
    <div class="block__e1">
       <button class="block__e2"></button>
    </div>
</div>

这里的 button 不能写出 block__e1__e2 这样就太丑了。

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>

是不是非常一目了然。当然 BEM 的教程和例子非常多,这里就不一一赘述了。

SMACSS(Scalable and Modular Architecture for CSS)

这个名字老长了,官方介绍是这样说的:

SMACSS (pronounced “smacks”) is more style guide than rigid framework.

不明觉厉。

开个玩笑,其实这个就和它的介绍一样,是一个指导性的小手册,大部分内容可以直接在网上读到。也有书可以买。说来惭愧我并没有读完这部分的内容,所以也就不强行解释一波了(实在太长了。。。)有兴趣的可以去网站看

相关文章

  • 瞎扯扯OOCSS,ACSS,BEM,SMACSS

    最近在看一些 CSS 的东西,想要提高一下自己在这方面的姿势水平。很久之前就了解到 BEM 了,当时还是在 ifa...

  • CSS常见分层方法

    概要 为什么要分层? SMACSS BEM SUIT ACSS ITCSS 参考的网站 CSS, Sass, SC...

  • CSS架构(命名组织方式)札记

    css组织命名方式(CSS架构)主要有OOCSS,BEM,SMACSS,MVCSS等。关于css framewor...

  • CSS分层

    为什么要分层? SMACSS BEM SUIT ACSS 原因 CSS有语义化的命名约定和CSS层的分离,将有助于...

  • 值得参考的css理论:OOCSS、SMACSS与BEM

    原文日期:2014-09-30最近在The Sass Way里看到了Modular CSS typography一...

  • 2.CSS模块化

    CSS设计模式: OOCSS 面向对象CSS ,结构与设计分离,容器与内容分离 SMACSS 可扩展和模块...

  • css-BEM OOCSS

    BEM是什么? 关于BEM 简单来说 理解成css的命名一种规范。 B E M分别指:Block Element ...

  • BEM规范与OOCSS

    一、BEM样式命名规范 BEM(Block, Element, Modifier)是由Yandex团队提出的一种前...

  • 起步 css理论 OOCSS/SMACSS 实战心得

    序言:无论什么工作,最好都带上自己的思想,明悟一条清晰的行为方针。 2019年,后端转前端工作数月后,认为前端开发...

  • 浅谈css设计模式(OOCSS、SMACSS、Meta CSS、

    1.官方的解释: 设计模式(Design pattern)是一套被反复使用、多数人知晓的、经过分类的、代码设计经验...

网友评论

      本文标题:瞎扯扯OOCSS,ACSS,BEM,SMACSS

      本文链接:https://www.haomeiwen.com/subject/ggdqnttx.html