什么是SMACSS?

  SMACSS(发音"smacks"),全称Scalable and Modular Architecture for CSS。顾名思义,SMACSS是一个可扩展的,模块化的CSS架构。它不是一个CSS框架,而是一个指南,一个CSS设计的最佳实践。SMACSS旨在规范一种统一的CSS开发方式,以便开发人员能够更好的开发和维护CSS代码。

为什么要SMACSS?

  对于软件系统来说,不管使用何种语言,何种编程思想,有几个要求总是永恒不变的:可重用,可扩展,可维护。对于小项目来说,痛点并不明显。但随着项目规模的增大,难重用,难扩展,难维护的痛点越来越被放大,这个时候,一个良好的架构就至关重要。SMACSS可以帮助我们以更良好的模式来设计开发CSS,从而达到可重用,可扩展,可维护的目的。SMACSS适合任意规模的项目,而不必担心过度设计。

SMACSS最佳实践

  目前有一种设计思路很好的解决了可重用,可扩展,可维护的问题,那就是面向对象设计(OO)。许多设计无非是贯彻了OO编程思想,SMACSS也不例外。下面简单介绍些SMACSS的主要内容:

1.分类CSS规则

  任何项目都需要良好的组织。没有规划,没有组织的往文件里面添加CSS规则会对后期的开发和维护带来严重的阻碍。

  SMACSS的核心是分类CSS规则,通过分类,我们可以将CSS规则归为不同的模式,并对每种模式定义更好的实践。SMACSS将CSS规则分为以下5类:

  1. Base
  2. Layout
  3. Module
  4. State
  5. Theme

我们经常不会区分CSS规则的类别,而将所有的CSS规则写在一块。SMACSS的这种行为其实正是OO所谓的封装和模块化。封装的好处显而易见。SMACSS针对每个类别都提出了最佳实践。

  Base规则指的是默认的CSS规则,比如说一些Normalize或者Reset之类的CSS。本质上说,base style指的是不管element是否在页面上,它都应该长这样。

 html, body, form { margin:; padding:; }
input[type=text] { border: 1px solid #999; }
a { color: #039; }
a:hover { color: #03C; }

Examples of Base Styles

  Layout规则负责页面的布局,layout可以包含一个或多个modules。

  Module规则是模块化的,可重用的CSS规则。它们可以是菜单,弹出框,产品列表等等。

  State规则描述的是layouts或modules的一个特殊的状态,hidden或是expanded?active或是inactive?

  Theme规则顾名思义,它指的是所有layouts和modules的look and feel。当然,很多网站不需要Theme.css来提供更多的网站主题。

2.规范命名规则

  通过命名规则,我们可以快速的知道一个CSS规则属于什么类别。在大型项目中,CSS规则往往细分在许多文件中,在这种情况下,命名规则可以帮助我们快速的找到对应的文件。

  对于layout规则,一般使用 l- 或 layout- 作为前缀。对于state规则,一般使用 is- 作为前缀,比如 .is-hidden 或 .is-collapsed 。modules规则作为最主要的一类css规则,如果使用 module- 作为前缀,会显得有些冗余,所以SMACSS建议直接使用module名称,而不需要任何前缀。

/* Example Module */
.example { }
/* Callout Module */
.callout { }
/* Callout Module with State */
.callout.is-collapsed { }
/* Form field module */
.field { }
/* Inline layout */
.l-inline { }

3.选择符书写建议

  SMACSS简单的介绍了浏览器是如何解析CSS的,并基于此对如何书写选择符以及优化选择符性能,提出了建议。

结束语

  本文给出了SMACSS的overview,希望读者能对SMACSS有个全局的了解。SMACSS的具体内容将会在后面的文章陆续放出,尽请期待。

相关阅读

  下一章 SMACSS:一个关于CSS的最佳实践-2.Base Rules

SMACSS:一个关于CSS的最佳实践-1.Overview的更多相关文章

  1. SMACSS:一个关于CSS的最佳实践-2.Base Rules

    回顾 在上一篇SMACSS:一个关于CSS的最佳实践-Overview中,讲到SMACSS将CSS Rules分为5个Categories: Base Layout Module State Them ...

  2. SMACSS:一个关于CSS的最佳实践-3.Layout Rules

    本篇笔者要介绍的是Layout Rules.看完本篇,大家将会知道Layout Rules的作用,以及哪些CSS应该归类为Layout Rules. 什么是Layout Rules? Layout R ...

  3. Vue中CSS模块化最佳实践

    Vue风格指南中介绍了单文件组件中的Style是必须要有作用域的,否则组件之间可能相互影响,造成难以调试. 在Vue Loader Scope CSS和Vue Loader CSS Modules两节 ...

  4. CSS规范 - 最佳实践--(来自网易)

    最佳选择器写法(模块) /* 这是某个模块 */ .m-nav{}/* 模块容器 */ .m-nav li,.m-nav a{}/* 先共性 优化组合 */ .m-nav li{}/* 后个性 语义化 ...

  5. 最重要的 Java EE 最佳实践

    參考:IBM WebSphere 开发人员技术期刊: 最重要的 Java EE 最佳实践 IBM WebSphere 开发人员技术期刊: 最重要的 Java EE 最佳实践 2004 年 IBM® W ...

  6. Git 最佳实践:分支管理

    5月份,为统一团队git分支管理规范,刚开始准备自己写,在网上搜了下,发现不少不错的git分支管理实践.最后我为团队选择了这个git分支管理实践 A successful Git branching ...

  7. SpringBoot系列: Spring项目异常处理最佳实践

    ===================================自定义异常类===================================稍具规模的项目, 一般都要自定义一组异常类, 这 ...

  8. MaxCompute 构建企业云数据仓库CDW的最佳实践建议

    在本文中阿里云资深产品专家云郎分享了基于阿里云 MaxCompute 构建企业云数据仓库CDW的最佳实践建议. 本文内容根据演讲视频以及PPT整理而成. 大家下午好,我是云郎,之前在甲骨文做企业架构师 ...

  9. 使用DataStax Java驱动程序的最佳实践

    引言 如果您想开始建立自己的基于Cassandra的Java程序,欢迎! 也许您已经参加过我们精彩的DataStax Academy课程或开发者大会,又或者仔细阅读过Cassandra Java驱动的 ...

随机推荐

  1. Repeat Number

    Problem B: Repeat Number Time Limit: 1 Sec  Memory Limit: 32 MB Description Definition: a+b = c, if ...

  2. 理解C语言声明的优先级规则

    声明从它的名字开始读取,然后依次按优先级依次读取. 优先级从高到低依次是 声明中被括号括起来的那部分 后缀操作符: 括号()表示这是一个函数 方括号表[]这是一个数组 前缀操作符:星号*表示“指向.. ...

  3. linux----定义命令别名

    1.定义命令别名的语法: alias nickName='command'#用于定义. unalias  nickName#用于撤消一个别名的定义. 如:alias cls='clear' 2.应该要 ...

  4. 使用hibernate 分表做增删改查

    公司项目有一张表的数据量特别大.而且时间越长累积的数据量就越大. 后来DBA决定分表来解决性能问题. 分表是指   一个母体表  一群子表(结构和字段与母体表完全一样) 我们程序对母表操作其实就是对子 ...

  5. [有用命令]Linux 用户,用户组

    更改文件拥有者 -R 是递归的意思 chown [ -R ] root.work test 将test 文件 改为 拥有者 root , 用户组 work. chown [ -R ] work tes ...

  6. Lc.exe已退出 代码为-1问题解决方法

    对于用vs作为开发工具的同学来说,可能常常会碰到“Lc.exe已退出 代码为-1”的问题,造成这个结果的一般是因为加入了第三方的插件程序造成的,今天一一讲解如何解决. 工具/原料 vs各版本开发工具 ...

  7. R与数据分析旧笔记(十二)分类 (支持向量机)

    支持向量机(SVM) 支持向量机(SVM) 问题的提出:最优分离平面(决策边界) 优化目标 决策边界边缘距离最远 数学模型 问题转化为凸优化 拉格朗日乘子法--未知数太多 KKT变换和对偶公式 问题的 ...

  8. 常用ajax请求

    JQuery版本的ajax请求:(包括处理WebService中xml字符串) $.ajax({ type: "POST", async: true, url: "&qu ...

  9. 多个tab切换传参

    var _ =peopleslive.h5; _.main=function(){ //集赞排名1 $('#tab1 .tab_nav').find('li').click (function() { ...

  10. python 学习之Windows 下的编码处理!

    问题1: Non-ASCII character '\xe9' in file 问题原因:程序编码上出现问题 解决方法:在程序头部加上代码 #-*- coding: UTF-8 -*- 设置代码编码为 ...