Allenmind's Blog
听说,Sass和Compass更配哟。来看看Compass的基本用法!
目录
一、Compass和Sass
之前写了一篇关于Sass基本用法的文章。Sass可以加快CSS的编写效率,让CSS的开发变得更加简单和可维护。但是,想要发挥Sass的全部功力,就需要配合Compass一起使用。(就好像,下雨天和巧克力更配哟~这样的道理)
Compass是Sass的工具库(Toolkit)。
Sass本身只是一个编译器,Compass是在它的基础上,封装了一系列有用的模板和模块,补充了Sass的功能。它们之间的关系,有点像Javascript和jQuery、Ruby和Rail、python和Django。
二、安装Compass
Compass和Sass一样,同样是Ruby语言开发的,所以,要先安装Ruby。
当安装完Ruby后,现在假设在Windows环境下,只要在命令行输入一下命令,即可安装Compass:
gem install compass
三、项目初始化
现在我们来创建一个Compass项目,假设项目名称为“learnCompass”,我们在当前目录的命令行输入:
compass create learnCompass
然后就会看到在当前目录中会出现一个叫learnCompass的文件夹。
里面有3个东西:
- config.rb文件:是项目的配置文件
- sass文件夹:存放Sass源文件
- stylesheet文件夹:存放编译后的css文件

四、编译
当我们写完.scss文件后,需要经过编译,才能生成css文件。现在说一下如何通过Compass来编译.scss文件。
Compass的编译命令是:
compass compile
这条命令要在 项目的根目录 下运行。效果是会将sass文件夹里面的.scss文件,编译成css文件,然后保存在stylesheet文件夹里面。
默认情况下,编译出来的css文件是带有很多的注释。在生产环境中,我们需要的是压缩后的css文件,这时候要使用 --output-style 参数。
compass compile --output-style compressed
Compass只编译 发生变动的文件 ,如果要重新编译未变动的文件,需要使用 --force 参数:
compass compile --force
除了使用命令行的参数,还可以直接在配置文件(config.rb)中指定编译模式:
output_style = :compressed

这里的参数和Sass的编译模式一一对应,:nested、:expanded、:compact和:compressed。
另外,可以指定environment的值(:production或:development),智能判断编译模式。
environment = :development
output_style = (environment == :production) ? :compressed : :expanded

在命令行模式下,除了一次性编译命令,Compass还有自动编译命令:
compass watch
运行这条命令后,只要.scss文件发生了变化,就会被自动编译成css文件。
更多Compass命令行的用法,请参考官方文档
五、Compass的模块
Compass采用模块结构,不同的模块提供不同的功能。目前,Compass内置了5个模块:
这5个模块提供了Compass的主要功能。
当然,我们也可以自行加载网上的第三方模块,或者自己动手编写模块。
下面来介绍一下如何使用模块:
使用模块的大致方法是:先用@i 大专栏 Allenmind's Blogmport命令把那个模版加载进来,然后再用@include命令调用模版里面的各种mixin。
1、reset模版
这个reset模版编译出来的CSS文件,就是一般用来重置浏览器默认样式的CSS文件(reset.css)。
@import "compass/reset";
2、css3模版
这个模版已经帮你把19种CSS3属性分别写成了19个Mixin,每个Mixin里面写好了各种浏览器前缀和兼容手段。导入模版后,用@include命令调用你想用的属性的Mixin即可。具体各个Mixin的用法请看:这里。
例子1: CSS圆角(border-radius)
@import "compass/css3";
.rounded1 {
@include border-radius(5px);
}
.rounded2 {
@include border-corner-radius(top, left, 5px);
}
编译后的CSS代码为:
.rounded1 {
-moz-border-radius: 5px;
-webkit-border-radius: 5px;
border-radius: 5px;
}
.rounded2 {
-moz-border-radius-topleft: 5px;
-webkit-border-top-left-radius: 5px;
border-top-left-radius: 5px;
}
例子2:透明(opacity)
@import "compass/css3";
#opacity {
@include opacity(0.5);
}
编译后的CSS代码为:
#opacity {
filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=50);
opacity: 0.5;
}
例子3:inline-block
@import "compass/css3";
.div-inline {
@include inline-block;
}
编译后的CSS代码为:
.div-inline {
display: inline-block;
vertical-align: middle;
*vertical-align: auto;
*zoom: 1;
*display: inline;
}
3、layout模版
layout模版提供了布局功能(目前有3个功能:Grid Background、Sticky Footer 和 Stretching)。
例子:指定子元素占满父元素(Stretching):
@import "compass/layout";
#stretch-full {
@include stretch;
}
4、typography模版
typography模版提供了版式功能(链接、列表、文本处理、Vertical Rhythm)。
例如,指定链接(Link)各个状态的颜色的Mixin为:
link-colors($normal, $hover, $active, $visited, $focus)
使用时写成:
@import "compass/typography";
a {
@include link-colors(#F00, #0F0, #00F, #CCC, #AC0);
}
编译后的CSS代码为:
a {
color: #F00;
}
a:visited {
color: #CCC;
}
a:focus {
color: #AC0;
}
a:hover {
color: #0F0;
}
a:active {
color: #00F;
}
5、utilities模版
utilities模版提供某些不属于其他模块的功能。
比如,清除浮动:
@import "compass/utilities";
.clearfix{
@include clearfix;
}
六、Compass的Helper函数
Compass提供了一些补充函数。这些函数可以大大增强Sass的威力。
例如,image-width() 和 image-height() 可以返回图片的宽和高。
又例如,inline-image() 可以将图片转为data协议的数据。
@import "compass";
$picWidth: image-width("pic1.png");
$picHeight: image-height("pic1.png");
.pic {
width: $picWidth;
height: $picHeight;
}
(图片默认放在该compass项目目录里面的images文件夹里面,没有就新建一个)

编译后的CSS代码为:
.pic {
width: 405px;
height: 540px;
}
(本文主要参考阮一峰老师的文章)
Allenmind's Blog的更多相关文章
- 日向blog开发记录
一点历史关于,Sonne Blog 2016.03.25springmvc + hibernate框架搭建.2016.04.21日向blog首页.2016.04.24分页实现.2016.04.30登录 ...
- blog (后续更新)
设计Model(设计数据库) from django.db import models # Create your models here. class BlogsPost(models.Model) ...
- tensorflow 一些好的blog链接和tensorflow gpu版本安装
pading :SAME,VALID 区别 http://blog.csdn.net/mao_xiao_feng/article/details/53444333 tensorflow实现的各种算法 ...
- http://blog.csdn.net/java2000_wl/article/details/8627874
http://blog.csdn.net/java2000_wl/article/details/8627874
- [Android Pro] http://blog.csdn.net/wuyinlei/article/category/5773375
http://blog.csdn.net/wuyinlei/article/category/5773375
- android 蓝牙 http://blog.csdn.net/u012843100/article/details/52384219
http://blog.csdn.net/u012843100/article/details/52384219
- 【三】用Markdown写blog的常用操作
本系列有五篇:分别是 [一]Ubuntu14.04+Jekyll+Github Pages搭建静态博客:主要是安装方面 [二]jekyll 的使用 :主要是jekyll的配置 [三]Markdown+ ...
- django开发个人简易Blog—nginx+uwsgin+django1.6+mysql 部署到CentOS6.5
前面说完了此项目的创建及数据模型设计的过程.如果未看过,可以到这里查看,并且项目源码已经放大到github上,可以去这里下载. 代码也已经部署到sina sea上,地址为http://fengzhen ...
- 使用Hexo搭建专属Blog
喜欢折腾的自己最开始在博客园有仿写几篇Blog,虽也可以自己改变风格,可是到底不是独立的一块儿地方,要知道独立的才是自己的;有属于自己独立的域名和Blog,真真是一件很爽的存在.在各种大牛的分享下在G ...
随机推荐
- Python笔记_第一篇_面向过程_第一部分_7.文件的操作(.txt)
在平时,我们不光要对程序内的代码进行输入和输出的操作,还要对程序外的文件进行和语言之间的交换.操作和运算.在基础部分,先讲解对于外部的.txt文件的操作. 第一部分 基本内容讲解 1. 什么是文件 ...
- Android 自定义dialog类
首先定制style样式 styles.xml 加入自定义样式 <style name="CustomLoadingDialog"> <item name=&quo ...
- Codeforces 558E A Simple Task(计数排序+线段树优化)
http://codeforces.com/problemset/problem/558/E Examples input 1 abacdabcda output 1 cbcaaaabdd input ...
- 研究NLP100篇必读的论文---已整理可直接下载
100篇必读的NLP论文 100 Must-Read NLP 自己汇总的论文集,已更新 链接:https://pan.baidu.com/s/16k2s2HYfrKHLBS5lxZIkuw 提取码:x ...
- day27-控制台输出彩色文字
格式:\033[显示方式;前景色;背景色m 说明:显示方式 意义------------------------- 0 终端默认设置 1 ...
- 调用其他VBA工程中的过程和函数以及API函数
Excel VBA中,同一个应用程序下面包括多个工作簿,每个工作簿都有自己独立的VBAProject 在同一个VBA工程中,使用Call即可调用其他模块中的过程和函数,例如: Call Module2 ...
- OC门与OD门以及线与逻辑
OC(Open Collector)门又叫集电极开路门,主要针对的是BJT电路(从上往下依次是基极,集电极,发射极)OD(Open Drain)门又叫漏极开路门,主要针对的是MOS管(从上往下依次是漏 ...
- Redis实现高并发分布式锁
分布式锁场景在分布式环境下多个操作需要以原子的方式执行首先启一个springboot项目,再引入redis依赖包: <!-- https://mvnrepository.com/artifa . ...
- mongodb 前人埋坑的奇怪问题
接手一个很老的项目 数据库用的mongodb 代码里的collections表名用的auth没问题 直接去monogdb show table 确实有auth表 想在本地登录,看看用户信息 > ...
- 深入JVM内核--GC参数
堆 GC参数 - 串行收集器 最古老,最稳定 效率高 可能会产生较长的停顿 -XX:+UseSerialGC 新生代.老年代使用串行回收 新生代复制算法 老年代标记-压缩 0.844: [GC 0.8 ...