Sass与Compress实战:第一章

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: 0;
    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: 0;
    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: 0;
    padding: 0;
    border: 0;
    outline: 0;
    display: block;
}

4.Compass布局

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

compass create my_grid --using blueprint

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

时间: 2024-10-08 01:32:20

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

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

学习资料:<Activiti实战> 第一章 认识Activiti 内容概览:讲解activiti的特点.接口概览.架构等基本信息. 1.3 Activiti的特点 1.使用mybatis 2.原生支持spring,可以轻松集成spring 3.引擎的Service接口 Activiti引擎提供了7大Service接口,均通过processEngine获取,支持链式API风格. Service接口 作用 RepositoryService 流程仓库服务,管理流程仓库,比如部署.删除.读取流程资源

OSGI实战第一章

第一章         解开OSGI的面纱 OSGI是什么?是Java平台的一个模块化层. 模块化:软件应用程序的代码被分割为表示独立内容的逻辑单元,可简化开发,可通过强化逻辑模块的界限来提高可维护性. Java模块化的不足 a)         Java使用访问修饰符(如public.protected.private和包级私有),解决底层面向对象封装,而不是逻辑系统划分. 比如,如果需要代码在多个包之间课件,那么包内的代码必须声明为public,那么所有的模块都可以使用这个public类.这

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

第一章Linux命令行简介 1.1 Linux命令行概述 1.1.1 Linux 命令行的开启和退出 开启:登陆账号密码进入系统 退出:exit/logout  快捷键:Ctrl+d 1.1.2 Linux命令行提示符介绍 (1)提示符由PS1环境变量控制.实例代码如下: [[email protected] ~]# set | grep PS1 PS1='[\[email protected]\h \W]\$ ' 这里的PS1='[\[email protected]\h \W]\$ ',可以

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

DirectX12 3D 第一章内容 学习目标 1.学习向量在几何学和数学中的表示方法 2.了解向量的运算定义以及它在几何学中的应用 3.熟悉DirectXMath库中与向量有关的类和方法 1.1 向量 向量是一种兼具大小和方向的量,具有这两种的量都称为向量值物理量,在几何学中我们一般用一条有向线段来表示一个向量 1.1.1 向量与坐标系 前提:计算机无法直接处理以几何方法表示的向量,所以需要寻求一种用数学方法来表示向量 在这里我们会引入一种3D空间坐标系,通过平移操作使向量的尾部位于原点,然后

Sass与Compress实战:第七章

概要:将介绍Compass如何让你从本地开发原型轻松转移到生产环境的网址或Web应用中. 本章内容: ● 生成资源URL的最佳实践 ● 撰写无需Web服务器的样式表 ● 在浏览器中进行设计的技巧 ● 如何为产品编译并构造样式表 1. 绝对URL 1.1 生成URL资源 CSS提供了url函数用来解码URL: background-image : url(‘/logo.png’) ; URL标识了资源在互联网上的位置,但是当你对照自己的资源时,你常常使用相对URL,且浏览器会根据其对当前请求的了解

Sass与Compress实战:第四章

概要:这一章将深挖Compass的工具箱,看看Compass的混合器如何帮助你省去编写重复样式表的辛苦工作. 本章内容: ● 使用Compass重置浏览器默认样式表 ● 改进样式表排版的Compass辅助器 ● 使用Compass创建粘滞的页脚.多样化的表格以及浮动 1. 一张更好的白纸源自有针对性的样式重置 1.1 全局样式重置 当你构建一个传统的Web应用程序时,如果需要支持很多浏览器,甚至包括低版本的Internet Explorer,那么一个全局的样式重置是非常给力的.Compass体统

Sass与Compress实战:第六章

概要:介绍Compass如何让你从本地开发原型轻松转移到正产环境的网址或Web应用中. 本章内容: ● CSS精灵的历史和基本原则 ● Compass混合器让精灵自动化 ● 自定义精灵图片和CSS输出的高阶技巧 1.精灵的工作原理 在早期,CSS精灵是很简单的.设计师们会把按钮的不同状态做成图片,并把它们做成一张单个图片.然后在CSS里,他们会设置按钮的宽.高以及背景图片的属性,并在不同的状态下改变背景图的位置.如下代码: .go-button { width : 75px ; height :

Sass与Compress实战:第五章

概要:第5章展示了Compass如何使你免去编写跨浏览器的CSS3的痛苦. 本章内容: ● 用Compass的CSS3模块创建跨浏览器的CSS3样式表 ● 在低版本IE中支持一些CSS3的特性 ● Compass里的CSS3高阶技能 1.什么是CSS3 CSS3,或称第三代层叠样式表,是基于CSS2的规范建立起来的.CSS3的变革可以归纳为两部分——更给力的选择器,帮助我们定位元素:各种新的属性,用于修饰元素的外观. 1.1 新属性:浏览器前缀让你烦透了吧 由于浏览器厂商有各自的发布周期,浏览器

Sass与Compress实战:第二章

1.使用变量 Sass使用$符号来标识变量,比如$highlight-color. 1.1声明变量 Sass声明变量和CSS声明属性很像: $highlight-color : #abcdef; 这意味着变量$highlight-color现在的值时#abcdef.任何可以用作CSS属性值的赋值都可以用作Sass的变量值,甚至是以空格分割的多个属性值,如$basic-border : 1px solid black;或以逗号分割的多个属性值,如$plain-font : "Myriad Pro&