OOCSS

OOCSS 意为面向对象的CSS。这种方法有两种主要 观点:

  • 结构与设计分离
  • 容器和内容分离

使用这套结构,开发者能得到可以在不同地方使用的一般类。

在这一步,会存在两点(通常就好和坏):

  • 好: 通过重复利用减少代码量 (DRY原则)。
  • 坏: 组合使用。当你改变一个特定元素的样式, 你需要改变的很有可能不仅仅是CSS(因为大多是类都是公共的),而且还会添加新的类。

此外,这种OOCSS的方法本身并没有明确的规则,而是抽象的建议,所以这种方法在生产中的结果会有不同。

实际结果就是,这种OOCSS的思想启发了其他人创建出属于他们自己更具体的代码结构。

SMACSS

SMACSS意为可扩展、模块化(Scalable and Modular Architecture)的CSS。这种方法的主要目的是减少代码量,并且使代码维护更简单。

Jonathan Snook将样式分为了5个部分:

  1. Base rules. 这些是主要的网页元素样式 - body, input, button, ul, ol等。在这部分, 我们主要使用
    HTML标签和属性选择器, 特殊的情况下使用 - 类 (例如, 你有JavaScript的样式选择);
  2. Layout rules. 这些是全局元素的样式,比如
    的尺寸等。Jonathan建议在这些元素中使用id选择器,因为这些元素在页面中不会出现超过一次。然而,这篇文章的作者认为这并不是好的做法。(在样式文件中,不管id什么时候出现,都会在其它的某个地方造成些麻烦).
  3. Modules rules.在单个页面中,块会被多次使用。对于模块的分类,并不建议使用id和标签选择器(分别为了重复使用和上下文独立性)。
  4. State rules. 在这一部分,规定了模块的不同状态和网页基础,这是唯一可以使用关键字!Important 的地方。
  5. Theme rules. 设计你可能需要更换的样式。

另外,还建议对属于某个特定分组的类设定命名空间,并为JavaScript中使用的类使用单独的命名空间。

这种方法使得编写和维护代码都更加容易,并且吸引了很多开发者。

Atomic CSS

使用Atomic CSS,为每一个可重用的属性创建一个单独的类。比如 margin-top: 1px;就可以创建一个类 mt-1,width: 200px;可以创建一个w-200。

这种风格允许通过重复声明来尽可能减少代码,并且改变模块样式也相对容易,for example, when changing a technical task.

然而,这种方法也有很大的缺点:

  • 类名都是描述性的属性名,而不是对元素本身的语义化描述,有时会使得开发复杂化。
  • 直接在HTML中显示设置。

因为这些缺点,这种方法遭到了大量批评。但是,这种方法对于大型项目而言,还是很有效的。

此外Atomic CSS也被用在不同的框架里来指明矫正元素样式,还有一些其它方法的展现层。

MCSS

MCSS是多层CSS。这种书写代码的风格建议将样式分为几个部分,称为层(layers)。

  • 底层(Zero layer or foundation)。这层代码负责重置浏览器样式(比如reset.css 和
    normalize.css);
  • 基础层(Base layer)包含网站重复使用的元素的样式:按钮、文本输入框等。
  • 项目层(Project layer)包含单独的模块和一个“上下文”——根据客户端浏览器,查看站点/应用程序的设备,用户角色等对元素的修改。
  • 修饰层(Cosmetic layer)代码是OOCSS的风格,对元素的外观做一些小的修改。建议只保留影响元素外观,但不会破坏网站布局的样式(比如颜色和不重要的缩进)。

层级之间的交互层次是很重要的:

  • 基础层(base layer)定义中性样式,不影响其他层。
  • 基础层(base layer)的元素只会影响本层的类。
  • 项目层(project layer)的元素能影响基础层和项目层。
  • 修饰层(cosmetic layer)是以描述性OOCSS类(“atomic”类)的形式设计的,并且不会影响其他的CSS代码,可选择性的用于标记当中。

AMCSS

AMCSS就是"Attribute Modules for CSS(css的属性模块)"。

让我们看一个例子:

<div class="button button--large button--blue">Button</div>

这样一个类的链并不简单,所以让我通过属性来组织这些值。

结果如下:

<div button="large blue">Button</div>

为了避免命名冲突,添加命名空间到属性上是个好主意。然后,我们的按钮就变成了下面的样子:

<div am-button="large blue">Button</div>

如果你使用验证器检查代码,会发现并没有am-button这个属性,所以可以在属性名称前加上data-。

使用一个鲜为人知,作为class属性的选择器"~ =" (IE7+):该选择器选择属性值包含指定单词的元素,用空格分隔。所以,这种class~="link"的选择器类似于a.class.button这样的选择器。即使专门使用,因为class选择器也只是该属性选择器的特殊情况。

因此,CSS代码

.button {...}
.button--large {...}
.button--blue {...}

转换为

[am-button] {...}
[am-button~="large"] {...}
[am-button~="blue"] {...}

如果你觉得这样的代码不常见,也可以使用不那么激进的AMCSS形式:

<div am-button am-button-large am-button-blue></div>

FUN

FUN表示选择器的扁平结构(Flat hierarchy of selectors),功能样式(Utility styles),命名分割组件(Name-spaced components)。

每个字母后面都有特定的原则:

  • F, flat hierarchy of selectors: 建议使用类来选择元素,避免无用的串联,并且不使用id。
  • U, utility styles: 鼓励创建atomic风格的服务来解决典型的拼凑任务,比如 w100表示width:
    100%;,fr表示float: right;
  • N, name-spaced components: Ben建议添加命名空间来指定特殊的模块元素的样式。这种方法避免了类名的重叠。

一些开发者注意到使用这种原则来书写和维护代码是相当方便的;在某种程度上,作者拿出了最好的成果,并且以一种简洁的方式展示了这项技术。

这种方法对项目和代码结构还有不小要求,它只建立记录元素的首选形式和标记使用的方法。但是在小项目中,这些规则足够创建出足够高质量的代码。

总结

正如你所见,这些方法里并没有一个完美的。这些方法中没有一条绝对的规则——你可以从开始使用一套方案来创建你自己的东西, 或者从头开始创建一条新的方法。

你感兴趣的文章:

学习前端开发的路线是什么?互联网趋势,技能需求

年薪30W前端程序员,需要吃透的前端书籍推荐

学习前端的人越来越多,为什么前端工作越来越难找了?

程序员的技能树,决定了一生职业的高度

前端开发入门到实战:六种组织CSS的方式相关推荐

  1. 前端开发入门到实战:JavaScript字符串转换数字

    js 字符串转换数字方法主要有三种: 转换函数.强制类型转换.利用js变量弱类型转换. 1. 转换函数: js提供了parseInt()和parseFloat()两个转换函数.前者把值转换成整数,后者 ...

  2. React前端开发入门与实战案例

    课程介绍 本课程主要讲解React的基础使用技巧及实战案例. React 是一个用于构建用户界面的 JavaScript 库,主要用于构建UI,很多人认为 React 是 MVC 中的 V(视图).R ...

  3. 前端开发入门到实战:HTML5 video视频播放

    一.下面播报一则新闻 Chrome 70已经原生支持HTML5 <video>播放时候Picture-in-Picture,也就是俗称的画中画技术,也就是很多视频网站看评论时候,播放视频变 ...

  4. web前端开发入门(一)

    web前端开发入门(一) 前端开发入门 HTML/CSS/JavaScript JavaScript 总结 思考和实践 前端开发入门 首先必须掌握 HTML/CSS/JavaScript 这三大基础技 ...

  5. 转圈加载html,web前端入门到实战:纯CSS实现加载转圈样式

    web前端入门到实战:纯CSS实现加载转圈样式 发布时间:2020-05-27 18:11:33 来源:51CTO 阅读:134 作者:前端向南 不同的项目中对于等待加载时转圈圈的样式是不同的,有的是 ...

  6. web前端开发入门学习线路图详解-2019升级版

    现如今,Web前端工程师已经成为各大互联网公司不可或缺的热门职位,从业者队伍日渐庞大,这其中不乏零基础学习者和转行人士.为了方便大家系统而全面的掌握前端基础知识,千锋小编特意整理了web前端开发入门学 ...

  7. Web前端开发入门之网页制作三要素!

    Web前端开发是由网页制作演变而来的,主要由HTML.CSS.JavaScript三大要素组成.专业的Web前端开发入门知识也一定会包含这些内容,今天小千就给大家简单介绍一下. HTML,超文本标记语 ...

  8. Web前端开发入门学习分享

    Web前端开发入门学习分享 1:如何开始学习Web前端 首先你需要学习html的各个标签,掌握其用法和规范,明白其作用. 开始学习css的使用,你先学习在html页面中为标签增加css样式,其次是将c ...

  9. Web前端html5+css3前端开发入门学习笔记

    文章目录 前言 HTML 认识HTML 1. 网页组成和本质 2.了解浏览器 3.web标准 4.HTML感知 5.HTML骨架 6.编译软件vscode的简介和使用 7.注释 8.标签组成和关系 9 ...

最新文章

  1. php 许愿墙 阶段案例_房地产全周期设计管控流程解析及跨部门合作及案例分析...
  2. Spring Security——login显示[Bad credentials]
  3. oracle11 删除表空间,oracle11g启动停止服务,修改字符集,导入导出,创建删除表空间,卸载oracle等...
  4. 聚合,组合,继承的区别
  5. php5.3降5.2,php5.3降级为5.2
  6. webpack打包优化_提速MAX 京东通天塔WEBPACK构建发布优化实践
  7. 使用fieldset、label标签制作form表单
  8. 28th Dec, 2012 我自己的问题
  9. Ubuntu 20.04 锐捷客户端安装记录
  10. 计算机桌面图标损坏,Excel图标变成这样如何恢复:excle图标损坏
  11. 内存结构、地址总线、数据总线详解
  12. adobe flash player android 4.4,adobe flash player最新版
  13. Python的应用场景和市场需求
  14. 移动光猫超级管理员密码获取
  15. 《互联网周刊》:中国互联网10年大事记
  16. python哪些城市好发展_我用Python爬了各大城市的旅游数据后发现,最好玩的还是这里......
  17. 数据标注自动化工具 - Snorkel【机器学习】
  18. eclipse配置python开发环境_Python开发环境配置步骤
  19. SSH学习(个人笔记)
  20. 一个好的创意值多少钱?

热门文章

  1. Linux安装软件、python开发环境
  2. 中国石油大学《红楼梦研究》第一阶段在线作业
  3. 一文看懂:数据指标体系的4大类型
  4. 1411: 喜闻乐见的a+b(20进制)
  5. matlab rand randn 每次生成的随机数都一样的解决方案
  6. 三次技术转型,程序员的北漂奋斗史 | 程序员有话说
  7. 关于差分隐私的一些基本概念的整理
  8. 计算机应用在我们生活中的哪些方面,计算机在我们生活中的应用
  9. SPSS简单介绍及入门
  10. T507|全志T507核心板价格|芯片参数配置|资料|原理图|性能|功耗-飞凌