1.消除冗余代码的方式:

▶通过变量来复用属性值

例如,一段冗余的CSS代码:

h1#brand {
color : #1875e7
}
#sidebar {
background-color : #1875e7
}

  使用Sass,把属性值赋给变量,然后在一个地方管理散落在各处的属性值。几乎任意属性值都可以赋给变量:

$company-blue : #1875e7;
h1#brand{
color : $company-blue;
}
#sidebar{
background-color : $company-blue;
}

▶使用嵌套来快速写出多层级的选择器

使用多层级选择器的CSS:

ul.nav { float : right; }
ul.nav li { float : left; }
ul.nav li a { color : #111 }
ul.nav li.current { font-weight : blod; }

Sass可以减少重复的劳动:

ul.nav{
float : right;
li {
float : left;
a {
color : #111;
}
&.current {
font-weight : blod;
}
}
}

编译出来的CSS:

ul.nav {
float: right; }
ul.nav li {
float: left; }
ul.nav li a {
color: #111; }
ul.nav li.current {
font-weight: bold; }

▶使用混合器来复用一段样式

  变量能够复用属性值,但是如果想要复用一大段规则,传统的做法是,如果在样式表中发现重复,就把公共的规则抽离出来放到新的CSS类中。

传统的CSS重构:

ul.horizontal-list li {
float : left;
margin-right : 10px;
}
#header ul.nav {
float : right;
}
#footer ul.nav {
margin-top : 1em;
}

  通过使用@mixin和@include重用代码:

@mixin horizontal-list {
li {
float : left;
margin-right : 10px;
}
}
#header ul.nav {
@include horizontal-list;
float : right;
}
#footer ul.nav {
@include horizontal-list;
margin-top : 1em;
}

  顾名思义,Sass混合器用于将一些规则混入到别的规则当中。使用@mixin命令,你可以将水平列表的规则抽取出来放到一个合适的命名混合器中。然后使用@include命令,将这些规则引入进来。因此你不再需要.horizontal-list类,因为那些规则已经被混入到ul.nav的规则中,输出的CSS代码:

#header ul.nav {
float: right; }
#header ul.nav li {
float: left;
margin-right: 10px; } #footer ul.nav {
margin-top: 1em; }
#footer ul.nav li {
float: left;
margin-right: 10px; }

更便利的是混合器和变量的结合,根据参数来决定使用的样式,从而使混合器更具可复用性。

@mixin horizontal-list($spacing: 10px) {
li {
float: left;
margin-right: $spacing;
}
}
#header ul.nav {
@include horizontal-list;
float: right;
}
#footer ul.nav {
@include horizontal-list(20px);
margin-top: 1em;
}

  我们给混合器添加了一个参数$spacing,其默认值为10px。在底部导航的列表中,通过传入值20px,从而增加列表元素之间的间距,输出CSS代码:

#header ul.nav {
float: right; }
#header ul.nav li {
float: left;
margin-right: 10px; } #footer ul.nav {
margin-top: 1em; }
#footer ul.nav li {
float: left;
margin-right: 20px; }

  混合器能够复用一段属性,但是输出的样式表中仍然存在冗余,这是因为混合器在每一个被包含进来的地方,都会复制一段样式。Sass的选择器继承就可以解决这个问题。

▶使用选择器继承来避免重复属性

  选择器继承的意思就是让一个选择器能够复用另一个选择器的所有样式,但又不重复输出这些样式属性。

例如,修饰错误信息的CSS:

.error {
border: 1px #f00;
background: #fdd;
}
.error.intrusion {
font-size: 1.2em;
font-weight: bold;
}
.badError {
@extend .error;
border-width: 3px;
}

  通过选择器继承,可以让.barError继承父类.error,也就是复用父类的所有样式,编译输出的结果如下:

.error, .badError {
border: 1px #f00;
background: #fdd; } .error.intrusion, .intrusion.badError {
font-size: 1.2em;
font-weight: bold; } .badError {
border-width: 3px; }

在选择器继承中使用占位选择器:

%button-reset {
margin:;
padding: .5em 1.2em;
text-decoration: none;
cursor: pointer;
}
.save {
@extend %button-reset;
color: white;
background: #blue;
}
.delete {
@extend %button-reset;
color: white;
background: red;
}

  占位,顾名思义继承了%button-reset的选择器在输出的CSS中占据了%button-reset的位置。编译出的CSS代码:

.save, .delete {
margin:;
padding: .5em 1.2em;
text-decoration: none;
cursor: pointer; } .save {
color: white;
background: #blue; } .delete {
color: white;
background: red; }

  占位选择器能把常用的样式保存到一处,且不影响任何一个类名。当然,如果一个占位选择器没有被继承,其中的样式就不会被编译到CSS当中,以减少生产环境中样式表的无用样式,使其更小。

2.Compass

  Compass是一个强大的Sass框架,它的设计目标是顺畅、高效地装扮互联网。Compass由三个主要部分组成:混合器和实用工具的类库、能够集成到应用开发环境中的开发系统以及一个用于构建框架和扩展的平台。

▶创建Compass

  在终端输入如下命令:

compass create sample

  一个新的Compass项目包含了一个配置文件、CSS输出文件等,如上命令将该文件命名为sample。

3.Compass重置模块

  通过以下代码引入Compass的重置模块,一个模块就是Compass框架中独立的一部分,可被随意引用添加到你的项目中。

@import "compass/reset"

  Compass模块位于样式表的前边,只要被引入就会执行global-reset这一混合器。

@mixin global-reset {
html, body, div, span, applet, object, iframe,
h1, h2, h3, h4, h5, h6, p, blockquote, pre,
a, abbr, acronym, address, big, cite, code,
del, dfn, em, font, img, ins, kbd, q, s, samp,
small, strike, strong, sub, sup, tt, var,
dl, dt, dd, ol, ul, li,
fieldset, form, label, legend,
table, caption, tbody, tfoot, thead, tr, th, td {
@include reset-box-model;
@include reset-font; }
body {
@include reset-body; }
ol, ul {
@include reset-list-style; }
table {
@include reset-table; }
caption, th, td {
@include reset-table-cell; }
q, blockquote {
@include reset-quotation; }
a img {
@include reset-image-anchor-border; } }

  可以看到,Compass使用了Sass的@mixin混合器和@include包含特性来构建reset模块。在global-reset之外,reset模块还提供了一系列有特定用途的重置混合器,其中有一个是专门为HTML5元素服务的。通过在你的Sass文件中添加@include reset-html5命令,输出文件中会生成额外的CSS规则来对HTML5的元素进行基本的样式修改。

article, aside, canvas, details, figcaption, figure,
footer, header, hgroup, menu, nav, section, summary {
margin:;
padding:;
border:;
outline:;
display: block;
}

4.Compass布局

  Compass以混合器的形式提供了对网格框架样式的支持,这样做的好处是按需使用;Compass对网格布局的支持方式即是对其他框架的方式改进。假设通过Blueprint创建一个Compass工程,在终端输入以下命令:

compass create my_grid --using blueprint

  可以在my_grid目录下找到一个全新的Compass工程,在一系列基本布局的样式里面,可以看到有一个Blueprint模块快速的总览。

5.表格辅助器

  表格辅助器由一系列Sass混合器构成,它使表格样式编写更轻松容易。Compass表格辅助器代码:

@import "compass/reset"
@import "compass/utilities/tables";
table {
$table-color: #666;
@include table-scaffolding;
@include inner-table-borders(1px, darken($table-color, 40%));
@include outer-table-borders(2px);
@include alternating-rows-and-columns($table-color,
adjust-hue($table-color, -120deg), #222222); }

  首先通过@import引入表格辅助器,这样就有了4个可用的混合器。table-scaffolding混合类提供了最基本的样式修饰,用于已经过CSS重置处理的th和td元素,其中包括我们常用的一些修饰,比如说数字列会有一个右对齐。表格辅助器中的混合器代码:

@mixin table-scaffolding {
th {
text-align: center;
font-weight: bold; }
td,
th {
padding: 2px;
&.numeric {
text-align: right; } } }

  inner-table-borders和outer-table-borders混合器正如其名,用于给表格以及表格内的单元格添加边框。最后,alternating-rows-and-columns混合器提供了一种更简单的方式,来给你的HTML表格添加斑马条纹样式。按照行或列修改颜色的混合器:

@mixin alternating-rows-and-columns(
$even-row-color,
$odd-row-color,
$dark-intersection,
$header-color: white,
$footer-color: white) {
th {
background-color: $header-color;
&.even, &:nth-child(2n) {
background-color: $header-color - $dark-intersection; }
}
tr.odd {
td {
background-color: $odd-row-color;
&.even, &:nth-child(2n) {
background-color: $odd-row-color - $dark-intersection; }
}
}
tr.even {
td {
background-color: $even-row-color;
&.even, &:nth-child(2n) {
background-color: $even-row-color - $dark-intersection; }
}
}
tfoot {
th, td {
background-color: $footer-color;
&.even, &:nth-child(2n) {
background-color: $footer-color - $dark-intersection; }
}
}

6.CSS3属性无需再写厂商前缀

  以边框圆角为例,假设要给一个<div>元素设置5px的边框圆角,你需要这么写CSS:

.rounded {
-webkit-border-radius : 5px;
-moz-border-radius : 5px;
}

  而使用Compass的CSS3模块中的边框圆角混合器可以免去这部分的重复工作。首先在Sass文件中引入CSS3模块,然后引入混合器:

@import "compass/css3";
.rounded {
@include border-radius(5px);
}

看一下生成的CSS:

.rounded {
-moz-border-radius: 5px;
-webkit-border-radius: 5px;
-o-border-radius: 5px;
-ms-border-radius: 5px;
border-radius: 5px;
}

这么做不仅避免了重复输入厂商前缀,同时也支持其他的一般常用的厂商命名空间。

Sass与Compress实战:第一章的更多相关文章

  1. Spring实战第一章学习笔记

    Spring实战第一章学习笔记 Java开发的简化 为了降低Java开发的复杂性,Spring采取了以下四种策略: 基于POJO的轻量级和最小侵入性编程: 通过依赖注入和面向接口实现松耦合: 基于切面 ...

  2. activiti实战--第一章--认识Activiti

    学习资料:<Activiti实战> 第一章 认识Activiti 内容概览:讲解activiti的特点.接口概览.架构等基本信息. 1.3 Activiti的特点 1.使用mybatis ...

  3. Spring3实战第一章 Aop 切面 XML配置

    刚看spring3实战书籍第一章  切面以前没有关注过 现在看到了  随手试验一下 AOP AOP(Aspect Oriented Programming),即面向切面编程,可以说是OOP(Objec ...

  4. 2017.2.20 activiti实战--第一章--认识Activiti

    学习资料:<Activiti实战> 第一章 认识Activiti 内容概览:讲解activiti的特点.接口概览.架构等基本信息. 1.3 Activiti的特点 1.使用mybatis ...

  5. 学习笔记-[Maven实战]-第一章:Maven简介

    Maven简介: Maven 可翻译为:知识的积累,也可以翻译为"专家"或"内行". Maven 是一个跨平台的项目管理工具,是Apache组织中一个很成功的开 ...

  6. DirectX12 3D 游戏开发与实战第一章内容

    DirectX12 3D 第一章内容 学习目标 1.学习向量在几何学和数学中的表示方法 2.了解向量的运算定义以及它在几何学中的应用 3.熟悉DirectXMath库中与向量有关的类和方法 1.1 向 ...

  7. 核心系统命令实战 第一章Linux命令行简介

    第一章Linux命令行简介 1.1 Linux命令行概述 1.1.1 Linux 命令行的开启和退出 开启:登陆账号密码进入系统 退出:exit/logout  快捷键:Ctrl+d 1.1.2 Li ...

  8. Sass与Compress实战:第七章

    概要:将介绍Compass如何让你从本地开发原型轻松转移到生产环境的网址或Web应用中. 本章内容: ● 生成资源URL的最佳实践 ● 撰写无需Web服务器的样式表 ● 在浏览器中进行设计的技巧 ● ...

  9. Sass与Compress实战:第四章

    概要:这一章将深挖Compass的工具箱,看看Compass的混合器如何帮助你省去编写重复样式表的辛苦工作. 本章内容: ● 使用Compass重置浏览器默认样式表 ● 改进样式表排版的Compass ...

随机推荐

  1. java 实现Excel压缩成Zip导出

    1 概述 在web项目中常见的一种场景就是将文件导出为Excel,但是当需要导出多个Excel时,使用者将频繁操作,这样就严重降低了项目的友好交互性以及易用性,那么怎么才能优雅的解决这个问题呢?笔者今 ...

  2. Cstring 的用法

    CString位于头文件afx.h中. 这篇文章就来讨论这些技巧. 使用CString可以让你对字符串的操作更加直截了当.这篇文章不是CString的完全手册,但囊括了大部分常见基本问题. 这篇文章包 ...

  3. Leetcode-37-Sudoku Solver(Hard)

    此处先留空 使用搜索和回溯,递归来实现 参考:http://blog.csdn.net/zxzxy1988/article/details/8586289 描述简介,代码量最少

  4. Ansible Filter

    没啥好说的. 自己看吧 http://docs.ansible.com/ansible/playbooks_filters.html

  5. 第一百一十八节,JavaScript,动态加载脚本和样式

    JavaScript,动态加载脚本和样式 一动态脚本 当网站需求变大,脚本的需求也逐步变大.我们就不得不引入太多的JS脚本而降低了整站的性能,所以就出现了动态脚本的概念,在适时的时候加载相应的脚本. ...

  6. 第一百一十七节,JavaScript,DOM元素尺寸和位置

    学习要点: 1.获取元素CSS大小 2.获取元素实际大小 3.获取元素周边大小 本章,我们主要讨论一下页面中的某一个元素它的各种大小和各种位置的计算方式,以便更好的理解. 一.获取元素CSS大小 1. ...

  7. sql优化--in和exists效率

    系统要求进行SQL优化,对效率比较低的SQL进行优化,使其运行效率更高,其中要求对SQL中的部分in/not in修改为exists/not exists 修改方法如下: in的SQL语句 SELEC ...

  8. Openjudge-NOI题库-简单算术表达式求值

    题目描述 Description 两位正整数的简单算术运算(只考虑整数运算),算术运算为: +,加法运算:-,减法运算:*,乘法运算:/,整除运算:%,取余运算. 算术表达式的格式为(运算符前后可能有 ...

  9. mac xcode 快捷键

    shift + cmd + n     新建项目 cmd + n             新建文件 视图 option + cmd + 回车 打开助理编辑器 cmd + 回车           显示 ...

  10. centos6 搭建hdwiki

    前期准备:安装好Mysql+apache+PHP,测试apache能够解析index.php文件后就可以. 用户名 xiaohe 密码 123456 #### mysql安装好后: adduser w ...