复用

通常,Harry Roberts 所说的 DRY (Don't repeat yourself) 经常被曲解成永远不要重复做通一件事。 但实际上这是不现实的,而且常常导致过分抽象,用太多的精力去过分优化代码,最后得不偿失。

过度抽象化代码有多痛苦,在 语义篇 已经讲过了,Mixins 也是一个问题。

同时我们要去考虑抽象, 我们怎么办呢?

如何复用 Style ?

一种做法是用逗号分隔符实现,例如:

.someThing,
.anotherThing {
color: red;
}

这就是一个简单的复用技术,关于其他的复用技术,我们会在模块篇,状态篇,修饰符篇讨论。

有关 Mixins

就像工具类一样,修改 mixins 后会自动作用到所有的实例。

同时 mixins 容易致使多个规则,多参数和多条件。这导致后期难以维护。

为了降低复杂度,我们会创建小粒度的 mixins ,例如,作用红色文本 (red text) 。期初开起来不错,但是这并非是 red mixins 声明,更像一个规则本身。color: red?

如果我们需要在多个地方更新规则,搜索和替换就非常必要了,此外,当 red mixin 变为 orange 时,其名称都要更新。

所以,mixins 很不错,我们应该使用它,但是要明智地使用它。

有关 Performance

如果 css 超过了 100kb, 再进行盲目的 DRY ,收效就不是很大了,我们要做的就是使 css 更小,才能使 HTML 更强大。

压缩图片能显著提高性能。这就是我想表达的,解决其他形式的冗余可以提高维护性和性能。

违反 DRY 的原则

例如,如果尝试复用 float:left,就像在不同的 Javascript 对象中复用变量名,这也是不可取的。

最后总结

DRY 如果导致过度抽象和过度编程, 我们会难以维护。所有,我们不应该痴迷它的形式,而应该关注于复用具体的模块。我会在以后章节中说明这些。

MaintainableCSS 《可维护性 CSS》 --- 复用篇的更多相关文章

  1. 深入css布局篇(2) — 定位与浮动

    深入css布局(2) - 定位与浮动      在css知识体系中,除了css选择器,样式属性等基础知识外,css布局相关的知识才是css比较核心和重要的点.今天我们来深入学习一下css布局相关的知识 ...

  2. 深入css布局篇(3)完结 — margin问题与格式化上下文

    深入css布局(3) - margin问题与格式化上下文      在css知识体系中,除了css选择器,样式属性等基础知识外,css布局相关的知识才是css比较核心和重要的点.今天我们来深入学习一下 ...

  3. CSS效果篇--纯CSS+HTML实现checkbox的思路与实例

    checkbox应该是一个比较常用的html功能了,不过浏览器自带的checkbox往往样式不怎么好看,而且不同浏览器效果也不一样.出于美化和统一视觉效果的需求,checkbox的自定义就被提出来了. ...

  4. CSS效果篇--这里有你想要的CSS3漂亮的自定义Checkbox各种复选框

    在原来有一篇文章写到了<CSS效果篇--纯CSS+HTML实现checkbox的思路与实例>.这篇文章主要写各种自定义的checkbox复选框,实现如图所示的复选框: 大致的html代码都 ...

  5. MaintainableCSS 《可维护性 CSS》 --- 模板篇

    什么是模块(Modules) ? 模块是一个特别的独立单元,可以与其他模块组合以形成更复杂的结构. 在客厅里,我们可以认为电视,沙发和墙艺术是模块.它们聚在一起创造一个可用的房间. 如果我们把其中一个 ...

  6. MaintainableCSS 《可维护性 CSS》 --- ID 篇

    ID 从语法上讲,当只有一个实例时,我们应该使用一个ID.当有多个时,我们应该使用一个 class. 但是,ID 作用的优先级高于 class ,在我们想覆盖一个样式的时候,这就会导致问题. 为了演示 ...

  7. MaintainableCSS 《可维护性 CSS》 --- 约定篇

    约定 可维护的CSS具有以下约定: .<module>[-<component>][-<state>] {} 根据所讨论的模块,方括号是可选的.这里有些例子: /* ...

  8. Css 进阶篇

    一.Css2 高阶知识(常用) 1. css 优先权 优先权(从低到高) 浏览器缺省设置 外部样式表 内部样式表(位于 <head> 标签内部) 内联样式(在 HTML 元素内部) 因此, ...

  9. html/css基础篇——iframe和frame的区别【转】

    转自共享圈的使用iframe的优缺点,为什么少用iframe以及iframe和frame的区别.其中本人不认同的地方有做小修改 注:HTML5不再支持使用frame,iframe只有src 属性 一. ...

随机推荐

  1. Welcome to my Blog

    Only English? Oh my god!!! why open live write can't write by Chinese?

  2. C# 关于操作datatable的列名和删除某一列的数据

    1.获取一个数据集表 DataTable dt = selectDEGS(type, words, KUser); 2.删除某一列 dt.Columns.Remove("TaskID&quo ...

  3. 7.java 加解密技术系列之 AES

    java 加解密技术系列之 AES 序 概念 原理 应用 代码实现 结束语 序 这篇文章继续介绍对称加密算法,至于今天的主角,不用说,也是个厉害的角色 — — AES.AES 的出现,就是为了来替代原 ...

  4. List集合数据太多进行分批,List的subList方法应用

    List<String> mStrings=new ArrayList<>(); //初始化 for (int i = 0; i < 1020; i++) { mStri ...

  5. Spring Mvc 用Demo去学习

    1:首先大体知道 SpringMVC 框架的 运行原理(图片来自网络 ) 2:SpringMVC 是依照DispatcherServlet 展开的 这里可以约Structs2对比,structs2 是 ...

  6. [原创]LAMP+phpmyadmin+FTP环境搭建

    ***简单ftp服务器搭建: rpm –qa|grep vsftpd   //检查是否安装服务 yum –y install vsftpd-*   //安装服务 mkdir /var/ftp/uplo ...

  7. 【面向对象设计原则】之接口隔离原则(ISP)

    接口隔离原则(Interface  Segregation Principle, ISP):使用多个专门的接口,而不使用单一的总接口,即客户端不应该依赖那些它不需要的接口. 从接口隔离原则的定义可以看 ...

  8. docker dead but pid file exists 问题

    You may have to enable the public_ol6_latest repo in order to get this package. sudo yum-config-mana ...

  9. 刨根究底字符编码之十三——UTF-16编码方式

    UTF-16编码方式 1. UTF-16编码方式源于UCS-2(Universal Character Set coded in 2 octets.2-byte Universal Character ...

  10. 用java实现简单快速的webservice客户端/数据采集器(支持soap1.1和soap1.2标准,支持utf-8编码)

    前言: 用了cxf,axis等各种wbeservice实现库,简单试用了一下动态调用的方式,很不满意,完全无法满足业务的需要,所以自己实现了一个webservice采集客户端,方便动态调用外部webs ...