CSS预编译
为什么要学习css预编译
CSS入门简单,深入就比较难,虽然样式简单,但难以维护。需要考虑大量的样式,覆盖、权重和很多!important。
什么是 css预处理器
CSS预处理器定义了一种新的语言,其基本思想是,用一种专门的编程语言,为CSS增加了一些编程的特性,将CSS作为目标生成文件,然后开发者就只要使用这种语言进行编码工作。通俗的说,CSS预处理器用一种专门的编程语言,进行Web页面样式设计,然后再编译成正常的CSS文件,以供项目使用。CSS预处理器为CSS增加一些编程的特性,无需考虑浏览器的兼容性问题,例如你可以在CSS中使用变量、简单的逻辑程序、函数等等在编程语言中的一些基本特性,可以让你的CSS更加简洁、适应性更强、可读性更佳,更易于代码的维护等诸多好处。
css预处理器语言
现今市面上主要有 Sass
、Less
、Stylus
这三类预处理器语言。
1、背景介绍
-
Sass背景介绍
Sass是对CSS的语法的一种扩充,诞生于2007年,最早也是最成熟的一款CSS预处理器语言,它可以使用变量、常量、嵌套、混入、函数等功能,可以更有效有弹性的写出CSS。Sass最后还是会编译出合法的CSS让浏览器使用,也就是说它本身的语法并不太容易让浏览器识别,因为它不是标准的CSS格式,在它的语法内部可以使用动态变量等,所以它更像一种极简单的动态语言。 注:Sass官网地址:http://sass-lang.com
-
Less背景介绍
2009年开源的一个项目,受Sass的影响较大,但又使用CSS的语法,让大部分开发者和设计师更容易上手。 注:LESS的官网:http://lesscss.org
-
Stylus背景介绍
Stylus,2010年产生,来自于Node.js社区,主要用来给Node项目进行CSS预处理支持,不过Stylus的人气相对于Sass和Less则逊色很多。 注:Stylus官网:http://learnboost.github.com/stylus
2、Sass和Less对比
- 实现方式 Less是基于JavaScript引擎,需要在客户端处理的。
Sass是基于Ruby环境,是在服务器端处理的。
相比之下less环境相对Sass简单 注:很多开发者不会选择LESS因为JavaScript引擎需要额外的时间来处理代码然后输出修改过的CSS到浏览器。关于这个有很多种方式,我选择的是只在开发环节使用LESS。- 使用率(热度) 国内前端团队使用LESS的同学会略多于Sass 国外则普遍使用Sass,热度高
- 功能 Sass较Less略强大一些
- 已有成熟框架对比 Sass在市面上有一些成熟的框架,比如说
Compass
,而且有很多框架也在使用Sass,比如说Foundation,bootstrap也开始使用sass
Sass入门
Sass环境安装
编写scss代码,通过sass的工作引擎编译成css代码,最后的部署阶段,其实部署的是生成的css代码,从这个流程可以看出sass并不是万金流,使用命令行也好,使用服务端集成框架也好,使用图形用户界面工具也好,最关键的环节是输入css,从这里也可表现出sass就是帮助我们更快的写出具有高可维护性的css代码
- GUI工具 Koala
koala 是一款桌面程序,支持 less 、 sass 、 coffeescript 即时编译,帮助 web 开发者更高效地使用 less 、 sass 、 coffeescript 开发。 下载: http://koala-app.com/index-zh.html - 命令操作
1.安装ruby环境 官网地址:http://www.ruby-lang.org/en/ 下载RubyInstaller后记得勾选 add ruby executables to your PATH 选项 2.更改ruby包的sources- gem sources --remove https://rubygems.org/
- gem sources --add https://ruby.taobao.org/ (如果你系统不支持https,请将淘宝源更换成:gem sources -a http://gems.ruby-china.org)
- gem install sass
- gem update(更新ruby程序)
- gem install sass --vertion=3.3
- gem list (列出本地安装的所有ruby程序包)
- gem uninstall sass --vertion=3.3.0(删除相应的程序包)
- sass main.scss main.css(将.scss文件编译成.css文件)
- sass --style compressed test.sass test.css(压缩文件)
- 自动化构建工具 gulp 注:Gulp官网
- 服务端集成工具之 webStorm
###Sass语法入门
####sass和scss的区别:
sass有两种语法,一种是
sass
(缩排写法),这种语法的文件需要以.sass扩展名。另一种则是在sass的基础上,对css3扩从的scss
,这种语法的文件需要以.scss扩展名。
第一种sass语法,是不使用花国号,对空格 换行 敏感,通过缩排的方式来表达选择符,语法特点是更加简洁,像习惯编写ruby phthon的人可以可能会比较喜欢。
第二种scss语法,延续之前的css语法,大多数地道的前端团队会选择scss
/*sass语法*/
h3
color: #eee
font-size:12px
/*scss语法*/
h3{
color: #eee;
font-size:12px;
}
使用命令行转换格式: sass-convert main.scss main.sass
嵌套(Nesting)
/***选择器嵌套***/
.recom-r{
ul{
li{
color:red;
&:nth-child(1) a,&:nth-child(2) a{
border-right:none;
}
a{
border: 1px 0 0 #ddd;
}
}
}
}
//编译为
.recom-r ul li{
color:red;}
.recom-r ul li a {
border-bottom: 1px solid #ddd; }
.recom-r ul li:nth-child(1) a, .products-recom .modcon .recom-r ul li:nth-child(2) a {
border-right: none; }
/***属性嵌套嵌套***/
.abc{
border:{
style:solid;
left:{
width:4px;
color:red;
}
right{
width:1px;
color:blue;
}
}
}
//编译为
.abc{
border-style: solid;
border-left-width: 4px;
border-left-color: red;
border-right-width: 1px;
border-right-color: blue;
}
导入 @import
@import "reset" //这里是简写 _reset.scss,以下划线开头的scss文件默认不自动编译出来,是专门用来导入的文件
变量 $
/***默认变量***/
$default-color: #2898fd;
body{
color:$default-color;
}
//解析如下
body{
color:#2898fd;
}
/***多值变量***/
$a-color:red blue yellow;
a{
&:hover{color:$a-color,1}
&:active{color:$a-color,2}
}
//解析如下
a:hover{color:red}
a:active{color:blue}
注:compass中采用中划线的方式命名
注释
/* */ 标准的css注释方式
// 这种单行注释是不会解析到css文件中
混合(mixin)
@mixin transition($transition){
-webkit-transition: $transition;
-moz-transition: $transition;
-o-transition: $transition;
transition: $transition;
}
a{
@include transition(all 0.2s linear);
}
//编译为
a{
-webkit-transition: all 0.2s linear;
-moz-transition: all 0.2s linear;
-o-transition: all 0.2s linear;
transition: all 0.2s linear;
}
运算
body{
width:100%;
}
article{
width:600px / 1200px *100%;
}
//编译为
body{
width:100%;
}
article{
width:50%;
}
扩展/继承@extent
.a{
color:red;
font-size:12px;
padding:10px;
}
.b{
@extent .abc;
margin:10px;
}
.c{
@extent .abc;
margin:20px;
}
//编译为
.a, .b , .c{
color:red;
font-size:12px;
padding:10px;
}
.b{
margin:10px;
}
.c{
margin:20px;
}
控制指令
/******@if******/
$type: monster;
p {
@if $type == ocean {
color: blue;
} @else if $type == matador {
color: red;
} @else if $type == monster {
color: green;
} @else {
color: black;
}
}
//编译为
p {
color: green;
}
/******@while******/
$i: 6;
@while $i > 0 {
.item-#{$i} { width: 2em * $i; }
$i: $i - 2;
}
//编译为
.item-6 {
width: 12em;
}
.item-4 {
width: 8em;
}
.item-2 {
width: 4em;
}
选择器
子组合选择器
>
:选择一个元素的直接子元素 同层相邻组合选择器+
:选择紧跟在后面的同级元素 同层全体组合选择器~
:选择所有跟在后的同层元素颜色函数
$ sass -i > rgb(200,40,88) //根据r:200,g:40,b:88计算出一个十六进制颜色值 得出:#c82858 > rgba(#c82858,.65) //根据#c82858的65%透明度计算出一个rgba颜色值 得出:rgba(200, 40, 88, 0.65) > red(#c82858) //从#c82858颜色值中得到红色值200 得出:200 > green(#c82858) //从#c82858颜色值中得到绿色值40 得出:40 > blue(#c82858) //从#c82858颜色值中得到蓝色值88 得出:88 > mix(#c82858,rgba(200,40,80,.65),.3) //把#c82858和rgba(200,40,88,.65)两颜色按比例混合得到一个新颜色 rgba(200, 40, 80, 0.65105) > lighten(red,10%)//将red颜色安装亮度值增加10% 得出:#ff3333 > darken(red,10%)//将red颜色安装亮度值变暗10% 得出:#cc0000 >complement(red)//获取red颜色的补充色 得出#00ffff ...
注:详细参见Sass官网
Compass框架
介绍
Compass是一个强大的Sass框架,能够利用它写出可维护性更高的样式表。 Compass由三个主要部分组成:混合器和实用工具的类库,能够集成到应用开发环境中的开发系统,以及一个用于构建框架和扩展的平台。
Compass自身包含了很多由Sass混合器和函数构成的模块,所有的这些模块在Compass的官网上都有详细的说明和示例。
这些库会帮助你解决跨浏览器兼容问题,以及提供给你很多已经被证明过的优秀模式,比如说重置、网格布局、列表样式、表格辅助器等。 注:Comapass官网安装
使用命令行: gem install compass(这样就创建好了)
项目初始化
先创建一个文件夹 mkdir compasstext, 点击进入这个文件 cd compasstext, 创建compass项目的文件 compass create mallApp, 点击进入这个文件 cd mallApp, 这个时候我们想要清楚 可以输入 compass clean 如果想重新开始编译 可以输入 compass compile 开启监听 可以输入:compass watch
常见的命令操作 输入
compass -h
进行查看
编译
- Compass的编译命令是:compass compile
注:该命令是在项目根目录下运行,会将sass子目录中的scss文件编译成css文件,保存再stylesheets子目录中
- Compass的压缩命令是:compass commpile -- output-style compressed
注:compass只编译发生变动的文件,如果需要重新编译未变动的文件,需要使用 compass compile --force
- Compass自动编译:compass watch
运行该命令后,只要scss文件发生变化,就会自动编译成css文件,并且在cmd上导出文件变化的具体信息
Compass模块
compass采用模块的结构,不同的模块提供不同的功能,总共内置了五个模块:
- [ ] resect
- [ ] css3
- [ ] layout
- [ ] typography
[ ] utulities 注:除了内置的5个模块外,还可以自行加载网上的第三方模块或者手动编写
resect模块
这个模块的内容是一些初始化样式,也就是说我们需要重置的浏览器默认样式的样式代码 写法是: @import "compass/reset";-
css3模块
目前这个模块提供19种css3命令
首先需要导入css3模块,写法是: @import "compass/css3"
比如圆角,写法如下:
.rounded {
@include border-radius(5px);
}
//编译后
.rounded {
-moz-border-radius: 5px;
-webkit-border-radius: 5px;
-o-border-radius: 5px;
-ms-border-radius: 5px;
-khtml-border-radius: 5px;
border-radius: 5px;
}
比如行内区块,写法如下:
#inline-block {
@include inline-block;
}
//编译后
#inline-block {
display: -moz-inline-stack;
display: inline-block;
vertical-align: middle;
*vertical-align: auto;
zoom: 1;
}
比如透明,写法如下:
#opacity {
@include opacity(0.5);
}
//编译后
#opacity {
filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=0.5);
opacity: 0.5;
}
-
layout模块
该模块顾名思义就是提供布局功能(使用率较低)
首先需要导入layout模块,写法是: @import "compass/layout"
//指定页面的footer部分总是出现在浏览器最底端:
#footer {
@include sticky-footer(54px);
}
//指定子元素占满父元素的空间:
#stretch-full {
@include stretch;
}
//编译为
#stretch-full {
position:absolute;
top:0;
right:0;
bottom:0;
left:0;
}
-
typography模块
该模块提供版式功能。首先需要导入typography模块,写法是: @import "compass/typography"
比如指定链接颜色的mixin为:
link-colors($normal, $hover, $active, $visited, $focus);
使用时写成:
a {
@include link-colors(#00c, #0cc, #c0c, #ccc, #cc0);
}
-
utilities模块
该模块提供某些不属于其他模块的功能。
首先需要导入utilities模块,写法是: @import "compass/utilities"
比如清除浮动,写法如下:
.clearfix {
@include clearfix;
}
//编译为
.clearfix {
overflow: hidden;
*zoom: 1;
}
比如表格,写法如下:
table {
@include table-scaffolding;
}
//编译后
table th {
text-align: center;
font-weight: bold;
}
table td,
table th {
padding: 2px;
}
table td.numeric,
table th.numeric {
text-align: right;
}
比如制作雪碧图(Sprite) 个人认为这个是compass中的重中之中,实在太强大。 你需要将合并的图片放在一个文件夹下面,compass会自动合并成一张图片,并且设定好坐标 写法如下:
@import "icons/*.png"; @include all-icons-sprites; //all-後面接著的「icons」代表文件夹的名称
//编译后
.icons-sprite, .icons-facebook, .icons-twitter, .icons-yahoo {
background: url('icons-s0859518ac7.png') no-repeat;
}
.icons-facebook { background-position: 0 0; }
.icons-twitter { background-position: 0 -32px; }
.icons-yahoo { background-position: 0 -64px; }
注:功能太多,详细查看Comapass官网
Sass调试
1、Koala调试方式
1.Koala上点击相应的文件,然后就会出现右边的编译选项,即可选择是否开启source map,debug info
2.打开Chrome浏览器,F12打开调试面板,点击调试面板右上角的齿轮图标打开设置,在general选项中勾选Enable CSS source map 和 Auto-reload generated CSS
3.开启--sourcemap编译,f12打开调试面板,就可以看到原先右边的css文件变成了我们现在的scss文件
4.点击scss文件,会跳到source里面的scss源文件,现在可以在里面进行修改,修改完成后可以右键选择save或save as命令,然后替换我们本地的scss源文件,刷新chrome就可以看到变化(注意,解析样式需要一定时间)。以后只要ctrl+s保存修改就可以在浏览器中看到修改效果了。