自从走进前端圈,一直忙于学习和工做,虽有常常记下点滴收获,却没有时间好好地写出来。此刻,恰逢"五一",正好挤时间写写博客,跟你们分享下近期结合使用Sass和Compass的一些经验。文章主要面向对Sass和Compass还不熟悉的同窗,相信对你有必定的帮助。大牛请补充,欢迎留下建议或补充说明。css
Sass和Compass的安装你们能够参考它们各自的官网,里面有详细的install步骤。如下是它们的官网:html
这里须要提下,安装Sass和Compass以前,请先确保本地已经装了Ruby环境,由于这二者都是用Ruby语言开发的。至于Ruby环境的安装,本文提供两个途径:css3
Sass有两种语法规则 -- Sass 和 Scss, 如下所说的都是针对Scss语法。如下示例只给出Scss的写法,若有须要了解编译后样式的,推荐参考官网。缓存
Scss有四种编译风格,分别是:sass
nested(默认): 嵌套缩进ruby
expanded: 扩展的
compact: 简洁格式
compressed: 压缩
至于怎么编译,咱们放在下面跟Compass一块儿讲,由于这里主要分享和compass结合使用。若是要单独编译Sass,能够参考官网上提供的在线编辑器,或者用koala软件,一款Less、Sass编译器,若是项目中有用Gulp或Webpack,能够用它们的插件自行编译便可。
如下两种注释方式,你们自取所需便可。
//这种注释方式,不会被编译到css文件中,只能保留在源文件 /* 这种注释能够被编译到css文件中 */
Scss语法支持使用变量,变量都以$符号开头,如下给出简单示例:
$font-color: #ff637c; $sm-padding: 6px; .main { color: $font-color; padding-top: $sm-padding; }
Scss支持选择器嵌套使用,省去咱们写不少相同的选择器名称,如:
.prev-item { border: 1px solid $primary-color; padding: $sm-padding; p { line-height: 28px; } }
这里提醒一点,嵌套层级太深会影响网页性能,通常推荐嵌套不超过3层。
scss代码的复用,这里讲如下几种:
@mixin
和 @include
@mixin size($width, $height: $width) { width: $width; height: $height; } .containter { @include size(60px); }
class
/ placeholder
和 @extend
请你们看看如下两种形式,注意两种形式的编译结果:
%auto { margin-left: auto; margin-right: auto; } .box { @extend %auto; width: 80px; }
.auto { margin-left: auto; margin-right: auto; } .content { @extend .auto; width: 80px; }
第一种写法是Scss的placeholder的用法,编译结果以下,也就是”%auto“的样式是不会单
被编译出来的,只在引用它的选择器里面生效:
.box { margin-left: auto; margin-right: auto; width: 80px; }
而第二个编译结果是
.auto { margin-left: auto; margin-right: auto; } .content { margin-left: auto; margin-right: auto; width: 80px; }
所以,若是你的html中须要用到诸如”auto“这个类的,选用第二种方法,若是html中不须要用到“auto”这个类,scss中的“auto"纯属用来服务其余类的,那咱们选择第一种方法,减小css中多余的样式。
@import
@import命令在css模块化的运用中起着重要的做用,它用来引入外部的文件。好比咱们已经写好了_reset.scss、header.scss和modal.scss,以下:
这里咱们在写index.scss时,须要用到header和modal的样式,那么咱们直接在index.scss里面,经过@import命令引进来就行,如图:
这里提醒注意两点
scss文件的文件名若是是有下划线“—”,则不会单独被编译成一份css文件,而只会在引用它的文件里面编译。可是在引用它时,不用加上下划线, 如上面的 @import 'reset'
;
确保每份scss文件最上面都有 @charset 'utf-8'
, 以防编译中文注释时,出现乱码。
Sass还有不少高级用法,如自定义函数、条件语句等, 有兴趣的同窗能够看看官方文档。
Compass和Sass结合使用,能够大大加快咱们编写css的速度,由于Compass里面已经有不少现成的sass模板,咱们能够直接拿来用。先看看在项目里面装了Compass之后,compass里面会有一个config.rb文件、一个存放Sass文件的文件夹和一个存放编译后的css文件夹(文件夹名称可自行修改),你也能够放入其余文件,以下图的images文件夹。
咱们看看下图config.rb文件:
在代码的6~9行,咱们能够设置文件的路径,在14行设置编译后的css格式,20行设置 line_comments = false
去除默认状态下大量的注释,若是须要去除缓存文件,则加上一句 cache = false
便可。
若是项目中没有使用gulp或者webpack,单纯用compass来编译的话,能够命令行中项目的根目录下,执行 compass compile
,这样compass就会把Scss文件夹中的scss文件, 编译成css 并存放在css(或默认名为stylesheets)的文件夹里面。Compass 也能够像gulp或者webpack同样,实时编译,只须要在项目的根目录下,打 compass watch
, 这样compass就会实时监听scss文件,一旦sass文件有改动,及当即编译到css文件。
有了compass,咱们不用再本身写一个reset.scss文件,或者定义一大堆css3的@mixin等,能够直接在scss文件里面引用compass的现成模块。具体模块不少,有兴趣的同窗能够浏览官网,上面有详细的用法说明,这里只给出简单示例:
这样这份scss文件在编译后,就会自动生成 css reset
的代码,咱们也能够经过 @include
来直接引用compass/css3中的19种命令,如 clearfix
、 box-sizing
或者其余css3新属性border-radius
等,参考下图:
此外,值得推荐的是,咱们能够把项目里面 共用的变量
和 计划用到的工具
,包括自定义的 @mixin
, 放在一个base文件里面,这样,咱们就不用在每一个sass文件里面都声明、引用一些相同的东西,直接经过 @import
命令,在其余文件里面引用一个base文件就行。下面是定义好的base文件:
这时咱们须要在application.scss里面用到base里面的这些变量和工具,咱们直接在 application.scss
里面这样写就行:
@import 'base';
更多模块操做,请细读官方教程。
Compass有不少封装好的函数,方便咱们直接使用,这里挑个比较经常使用的讲下. 好比,咱们在图片路径时,能够引用 image-url
函数,直接在config.rb文件里面,配置好图片的路径,而后在scss文件中,直接把图片名称做为参数传给 image-url
便可,如图:
你也能够拿它再和scss结合使用,封装出更实用的代码,如封装一个兼容1倍屏和2倍屏图片的@mixin,代码以下:
@mixin bg-img($image1, $image2) { background: image-url($image1); background: -webkit-image-set(image-url($image1) 1x, image-url($image2) 2x); }
在须要用到的地方,经过 @include
引进来,并传入图片名称,以下所示:
.icon-bg { @include bg-img('icons.png','icons@2x.png'); }
更多实例,请参考这里.
篇幅有限,就先写这么多了,若是你有更多的发现,欢迎一块儿分享...