一些常见的 CSS 规范

Posted GoldenaArcher

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了一些常见的 CSS 规范相关的知识,希望对你有一定的参考价值。

一些常见的 CSS 规范

OOCSS

OOCSS 是 Object-Oriented CSS 的缩写,是 Nicole Sullivan 于 2008 年提出的一种 CSS 规范,使用 OOCSS 可以让 CSS 更提高复用性和扩展性,同样也更容易管理,其主要目的也是为了写出具灵活、模块化和可复用的组件。

对于 OOCSS 来说,任何重复的模式都可以已成为对象,即一段特定代码。而对于 OOCSS 来说,以下几个主旨是一定需要遵从的

  1. 对象也要有明确的 结构(structure) 和皮肤(skin)。

    结构包含的对象有:

    • Height
    • Width
    • Margins
    • Padding
    • Overflow

    皮肤包含的对象有:

    • Colors
    • Fonts
    • Shadows
    • Gradients

    举例:

    .button 
      width: 150px;
      height: 50px;
      background: #fff;
      border-radius: 5px;
    
    
    .button-2 
      width: 150px;
      height: 50px;
      background: #000;
      border-radius: 5px;
    
    

    可以简化为:

    .button 
      background: #fff;
    
    
    .button-2 
      background: #000;
    
    
    .skin 
      width: 150px;
      height: 50px;
      border-radius: 5px;
    
    
  2. 分离容器与内容

    举例说明:

    #sidebar 
      padding: 2px;
      left: 0;
      margin: 3px;
      position: absolute;
      width: 140px;
    
    
    #sidebar .list 
      margin: 3px;
    
    
    #sidebar .list .list-header 
      font-size: 16px;
      color: red;
    
    
    #sidebar .list .list-body 
      font-size: 12px;
      color: #fff;
      background-color: red;
    
    

    可以简化为:

    .sidebar 
      padding: 2px;
      left: 0;
      margin: 3px;
      position: absolute;
      width: 140px;
    
    
    .list 
      margin: 3px;
    
    
    .list-header 
      font-size: 16px;
      color: red;
    
    
    .list-body 
      font-size: 12px;
      color: #fff;
      background-color: red;
    
    

    我一开始的时候还真的写国第一种 CSS,然后到第三、四个页面就会发现,重载 CSS 会需要使用更多的选择器嵌套……

其实现在不少比较常见的 UI 库就有在实践 OOCSS,OOCSS 的优点包含:

  1. 速度

    鉴于 CSS 的结构都分离了,开发者不需要大量重复代码,自然页面也能加载的更快

  2. 扩展性

    下面的这几个还是挺显而易见的

  3. 效率

  4. 维护性

  5. 可读性

OOCSS 的缺点包括:

  1. 每个元素需要嵌套多个类
  2. 对小项目来说过于复杂
  3. 学习曲线较为陡峭

SMACSS

SMACSS 是 Scalable and Modular Architecture for CSS 的缩写,它定义了 CSS 的分类及命名规则。SMACSS 将 CSS 分为以下几种类型:

  • base

    基础 CSS,主要是默认值的设置,类似于 CSS Reset 的配置

  • layout

    布局以 l-layout- 开头,如:

    .l-full-width 
      width: 100%;
    
    
  • modules

    单独的模块,命名规范为 .object--description ,如:

    .article 
      background: #000;
    
    .article--title 
      font-size: 2em;
    
    .article--text 
      font-size: 16px;
    
    

    这里与 OOCSS 的差别就挺大的了,上文的 .article--title 如果在 OOCSS 中,就会使用 .article .title 的方式去实现。

  • state

    状态,以 is- 开头,如:

    <header id="header">
      <ul class="nav">
        <li class="nav--item is-selected">Home</li>
        <li class="nav--item">About</li>
      </ul>
    </header>
    
  • theme

    其他 UI 相关,如主题配色等

延伸阅读:Scalable and Modular Architecture for CSS,这是本书,我估计……一时半会儿内都不在我的阅读范围内了,先放一个 reference 吧:

BEM

为 Block Element Modifier 的缩写,目前是最主流的一种 CSS 规范了,这种命名规范可以比较好的解决冲突的问题。Block 为有意义的独立个体,E 和 M 就比较明确了,格式为:.block-name__element-name--modifier-name

以一个按钮来说,其命名规范如下:

.button__text 
  text-decoration: none;

.button__text_hovered 
  text-decoration: underline;

二者指向的都是 button ——这里的 button 指的是按钮,一个单独的块,而非元素——中的 text 元素,第二个 CSS 类则代表鼠标悬浮后的状态。

从市场占有率来说,BEM 最高,所以这个还是建议需要了解一下的。

ITCSS

这下面的几个都没怎么用过,先马一下,以后碰上了再补笔记。

Utility-First CSS

ACSS

以上是关于一些常见的 CSS 规范的主要内容,如果未能解决你的问题,请参考以下文章

CSS3新增的常用方法以及CSS常见属性整理

将浮点数组规范化到一定范围内,并在 Python 中保持符号

在有效范围内旋转/非规范化

CSS 布局方式与JavaScript数据结构和算法

标签分类与元素转换

如何使用模板来规范化 0 到 1 范围内的数字?