Guide to use Compass
Sass is one kind of CSS Preprocessor, it can make CSS development simple and maintainable. But to show its real power we may need to have Compass.
This article is to introduce Compass. Once you learn Compass, your CSS development efficiency will be largely improved.

Here we assume you have mastered the major uses of CSS, if you know Sass, then it's better. It's still ok if you don't know Sass.
1. What is Compass?
In simple, Compass it the toolkit of Sass.
Sass itself is only a compiler, Compass encapsulates some templates and modules based on Sass. The relationship between Sass and Compass is similar to the relationship between JavaScript and jQuery, between Ruby and Rails, between Python and Django.
2. Installation
Compass is developed with Ruby, so before installing it, you have to install Ruby.
Assume your machine(Linux or OS X) has Ruby installed, then type the following command in command line mode:
sudo gem install compass
If you are using Windows, then no need to type sudo.
3. Initialize project
Next, you need to create a new Compass project, assume its name is myproject, then type:
compass create myproject
There will be a directory myproject created in the current directory. cd into this directory:
cd myproject
You will find a config.rb file, this is the configuration file of your project. There are two subdirectories sass and stylesheets, the previous directory will store Sass source files, the later one will store the CSS files compiled.

Next, you can start writing codes.
4. Compilation
Before writing codes, we need to know how to compile codes. The source code file are suffixed with scss, we can use it in website only after compiling it to css file.
Compilation command :
compass compile
Run this command in the project's root directory, it will compile the scss files in sass subdirectory into CSS files and store them in stylesheets subdirectory.
By default, the compiled CSS file will have many comments. But in production environment, we may need compressed CSS file, now we can use --output-style.
compass compile --output-style compressed
Compass will only compile modified scss files, if you want to compile ass files, you need to use --force
compass compile --force
Compass also has other commands. For example:
compass watch
After running this command, the scss files will be automatically compiled to CSS files as long as there are any changes to scss files.
More compass commands can be referred in its official document.
5. Modules of Compass
Compass has different modules, different modules have different functions. Currently there are five modules in compass.
* reset
* css3
* layout
* typography
* utilities
Next we will introduce these five modules one by one.
6. reset module
Usually before writing your own style, you need to reset browser default styles.
@import "compass/reset";
The above @import command will load specified module, here it is loading reset module.
7. CSS3 module
Currently this module provides 19 CSS3 commands. Here we introduce 3 of them: border-radius, opacity and inline block.
a. border-radius
@import "compass/css3";
.rounded {
@include border-radius(5px);
}
The above @include command means call some mixin(similar to macro in C), 5px is a parameter, here it specifies the radius of the round corner.
The codes after compilation is:
.rounded {
-moz-border-radius: 5px;
-webkit-border-radius: 5px;
-o-border-radius: 5px;
-ms-border-radius: 5px;
-khtml-border-radius: 5px;
border-radius: 5px;
}
If you only need the top left border-radius, you can:
@include border-corner-radius(top, left, 5px);
b.opacity
@import "compass/css3";
#opacity {
@include opacity(0.5);
}
After compilation, the code is:
#opacity {
filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=0.5);
opacity: 0.5;
}
The parameter of opacity is 0.5 which means the alpha is 50%.
Complete transparent is:
@include opacity(0);
c. inline-block
@import "compass/css3";
#inline-block {
@include inline-block;
}
The code after compilation is:
#inline-block {
display: -moz-inline-stack;
display: inline-block;
vertical-align: middle;
*vertical-align: auto;
zoom: 1;
*display: inline;
}
8. layout module
This module provides the layout functions.
For example, if you want the footer appears at the bottom of the page:
@import "compass/layout";
#footer {
@include sticky-footer(54px);
}
Or you want the child element stretch in the parent element:
@import "compass/layout";
#stretch-full {
@include stretch;
}
9. typography module
For example, specify the link color:
link-colors($normal, $hover, $active, $visited, $focus);
When using, write it as:
@import "compass/typography";
a {
@include link-colors(#00c, #0cc, #c0c, #ccc, #cc0);
}
10. utilities module
This module provide some functions other modules don't provide.
For example, clear float:
import "compass/utilities/";
.clearfix {
@include clearfix;
}
Or table:
@import "compass/utilities";
table {
@include table-scaffolding;
}
After compilation:
table th {
text-align: center;
font-weight: bold;
}
table td,
table th {
padding: 2px;
}
table td.numeric,
table th.numeric {
text-align: right;
}
11. Helper function
In addition to modules, Compass also provides some functions. Some functions are very useful. For example, image-width() and image-height() will return image's width and height.
Also, inline-image() can convert the image into data conforming to data protocol.
@import "compass";
.icon { background-image: inline-image("icon.png");}
After compilation, you can get:
.icon { background-image: url('data:image/png;base64,iBROR...QmCC');}
The major difference between mixin and function is function doesn't need @include command.
Author : 阮一峰 Source : http://www.ruanyifeng.com/blog/2012/11/compass.html
By clicking the "Mark as important" button, this article will be put to your important article list which you can find in "Amin->Article important list". Later when you want reread this article, it's easier for you to find it by checking the "Article important list".
Tags:Compass,CSS,Sass,Tutorial Read(861) Comment(0)
Previous : HTML5 Web Worker Next : Coming back, Nokia?
::Related Articles
::Comment Zone
No comment for this article.
::Comment
:: Other versions
No other versions available yet.
:: Recent articles
- Fab CEO: Why we choose Tencent in China?
- Huawei is open to acquire Nokia
- HTML Email Guide
- Use of Erlang in WhatsApp
- Write high quality JavaScript and CSS with SublimeLinter
- Is Facebook developing RSS reader?
- About tmpfs
- Differences among Enter,F5 and Ctrl+F5 in webpage refresh
- China to expand 4G network across the country
- Yahoo is going to recycle inactive user IDs
- more>>
:: Most read
- TIOBE : C overtakes Java as the No.1 programming language
- Sony is to release PlayStation4 in 2015
- Which programming language should I learn first?
- Disposable Email address
- 5 Free Open Source Chat Applications For Developers
- Never ever touch a programmer
- Hacking Vs. Programming
- TIOBE : Where is that next big programming language?
- Multitasking vs multiprogramming
- Google is developing advanced programming technology to simplify Web application development
- more>>
:: Most commented
- Hacking Vs. Programming
- Which programming language should I learn first?
- Error handling style in C
- 10 controversial programming opinions?
- C vs Java Complete Comparison
- Google+ is sick
- Unix Philosophy
- Disposable Email address
- PHP to get access token for Facebook app
- Microsoft Interview Riddle Questions
- more>>
:: Contribute
Write article:: Find us
