Sass 和 Compass小结

Sass 简介

Sass的 SCSS 语法是 CSS3 语法 的一个超集,传统的 CSS 重复的工作太多,而 Sass 可以帮助我们减少重复劳动,当然 Sass 的作用远不止这个。

参考和推荐书籍:《Sass 与 Compass 实战》

安装 Sass 和 Compass

一般的方法是通过gem进行安装,而gem又依赖于Ruby环境,所以要先安装Ruby,然后安装sasscompass。具体命令如下:

sudo apt-get install ruby
sudo gem install sass
sudo gem install compass

但是,用这种方法我最后一直安装不上compass,试了很多方法也没用。最后找到了以下这种方法,一次性安装,方便快捷:

sudo apt-get install ruby ruby-sass ruby-compass

检验是否安装成功,查看版本即可:

image1.png

创建 Sass 文件

Sass 文件 是以 .scss 后缀的,然后通过 Sass 命令将 Sass 文件 转化为 css 文件 。命令为:

sass sass 文件 css 文件

image2.png

Sass 基本语法

有 CSS 基础来学习 Sass 的 SCSS 语法很容易上手。

变量

Sass 允许定义变量,变量可以是任何的 CSS 属性值。如:颜色值、以空格分开的多个属性值等。

html

<div id="container"></div>

Sass

$color: #456eff;
$border: 2px solid black;

div#container {
    width: 200px;
    height: 200px;
    margin: 10px auto;
    background-color: $color;
    border: $border;
}

编译后的 CSS 代码

/* line 17, ../sass/demo01.scss */
button.sprites-btn {
  border: 1px solid silver;
  -moz-border-radius: 4px;
  -webkit-border-radius: 4px;
  border-radius: 4px;
  width: 400px;
  height: 400px;
  background: url('/images/icons-sf94510dbb1.png') 0 -400px;
}

细心的我们还可以观察到,通过 Sass 编译的 CSS 代码,还帮我们解决了厂商的命名问题(浏览器的兼容问题)。

结果

image3.png

嵌套

通过嵌套,我们可以省去很多重复写父类名的工作等。

html

<div id="container">
<div id="box1">
    <ul>
        <li>1</li>
        <li>2</li>
        <li>3</li>
    </ul>
</div>
<div id="box2">
    <a href="javascript:">alink</a>
</div>
</div>

Sass

$color: #456eff;
$border: 2px solid black;

div#container {
    width: 600px;
    height: 600px;
    margin: 10px auto;
    background-color: $color;
    border: $border;
    div#box1{
        width: 200px;
        height: 200px;
        background-color: silver;
        ul{
            list-style: none;
            display: inline;
        }
    }
    div#box2{
        width: 200px;
        height: 200px;
        background-color: wheat;
        margin: 10px;
        a{
            text-decoration: none;
        }
    }
}

编译后的 CSS 代码

div#container {
  width: 600px;
  height: 600px;
  margin: 10px auto;
  background-color: #456eff;
  border: 2px solid black;
}
div#container div#box1 {
  width: 200px;
  height: 200px;
  background-color: silver;
}
div#container div#box1 ul {
  list-style: none;
  display: inline;
}
div#container div#box2 {
  width: 200px;
  height: 200px;
  background-color: wheat;
  margin: 10px;
}
div#container div#box2 a {
  text-decoration: none;
}

通过嵌套,通过编译会帮我们找到相关的嵌套关系,然后转化为相关的 CSS。

结果

image4.png

父选择器的标识符 -- &

& 是父选择器的标识符,简单来说,就是在嵌套中代替父选择器。

下面代码实现对上面例子的最外层 div 的 hover 效果。只要在 div#container 中添加下面代码即可:

&:hover{
    background-color: springgreen;
}

混合器 -- @mixin

混合器的作用:当你需要重复使用一个 CSS 代码段的时候,可以使用混合器减少重复代码。

定义混合器:

@maxin maxinName(params) { ... }

使用混合器:

{ @include maxinName(params) }

html

<div id="box1"></div>
<div id="box2"></div>
<div id="box3"></div>

Sass

@mixin divBox {
    height: 50px;
    width: 50px;
    background-color: rebeccapurple;
    border: 1px solid silver;
    border-radius: 50px;
    margin: 10px;
}

div#box1, div#box2, div#box3{
    @include divBox;
}

编译后的 CSS 代码

div#box1,
div#box2,
div#box3 {
  height: 50px;
  width: 50px;
  background-color: rebeccapurple;
  border: 1px solid silver;
  border-radius: 40px;
  margin: 10px;
}

效果

image5.png

混合器同时也可以传递相关的参数,形参是变量形式,实参是具体的属性。如:

@mixin border($size, $color){ ... }
{ @include border(1px, blue) }
或者
{ @include border($size: 1px, $color: blue) }

继承 -- @extend

继承是基于类的,所以子类继承父类,子类就会拥有父类的所有相关属性。简单理解,就是出现父类名的地方,子类也会出现。

html

<div class="box1">
    box1
    <div class="box2">
        box2
    </div>
</div>
<div class="box3">
    box3
    <div class="box2">
        box2
    </div>
</div>

Sass

.box1 {
    width: 200px;
    height: 200px;
    background-color: silver;
    padding: 10px;
    .box2{
        width: 100px;
        height: 100px;
        background-color: blue;
    }
}

.box3{
    @extend .box1;
}

编译后的 CSS 代码

.box1,
.box3 {
  width: 200px;
  height: 200px;
  background-color: silver;
  padding: 10px;
}
.box1 .box2,
.box3 .box2 {
  width: 100px;
  height: 100px;
  background-color: blue;
}

观察编译后的 CSS 代码,父类有的包括父类的属性,父类的子类属性,该有的都有。

效果

image6.png

注释

主要有两种方法:

// .........
/* ......... */

导入其他的 Sass 文件

实现方法为:

@import ”文件名“

导入的文件可以不写后缀名,这个Vue一样。然后通过 Sass 编译的时候就会寻找相关的依赖文件,最后转化为一个 CSS 文件。

Compass 简介

Compass 是一个强大的 Sass 框架, 是一套实用的工具。Compass 自身有很多 Sass 混合器和函数构成的模块,这些模块在它的官网都有详细的介绍。http://compass-style.org/

创建 Compass 文件

默认的创建方式为:

compass create project

创建成功:

image7.png

文件目录:

image8.png

默认会创建存放sass 文件的文件夹,和存放css 文件的文件夹,还有一个配置文件。

编译 Compass 文件

在文件夹中,通过编译命令,即可完成编译工作:

compass compile

image9.png
image10.png

Compass 与 CSS3

CompassCSS3 中起着非常大的作用。比如解决浏览器的兼容性前缀问题。

解决前缀问题

导入 Compass CSS3 支持

@import "compass/css3"

圆角

@include border-radius(10px);

阴影

盒子阴影:

@include box-shawdow(10px 10px 10px rgba(125, 125, 125, .8));

文字阴影:

@include text-shawdow(10px 10px 10px rgba(125, 125, 125, .8));

颜色渐变

可以简写颜色渐变:

@include backgroud(linear-fradient(360deg, 颜色变化));

Compass 与 精灵图/雪碧图

可以通过 Compass 将图片合成精灵图,不仅如此,还可以生成精灵图的 CSS 文件, CSS 文件文件中包含精灵图中的相关位置信息。使用的时候还可以设置相关的属性值。个人觉得这个十分强大~~

目录说明

首先,你得在项目在根目录下新建一个 images 文件夹, 然后在 images 文件夹中新建一个 icons 文件夹, 即: /images/icons/icons 文件夹的名字你可以随便起。

创建一个精灵地图

@import "compass/utilities/sprites";
@import "icons/*.png";
@include all-icons-sprites; // 生成 CSS 文件,文件包含精灵的位置信息。

通过以上两个语法,编译的时候就会在你的 images 文件夹中生成一张精灵图。

image10.png
image11.png
image12.png

嗯~很强!!精灵图的相关配置暂时不总结了,在相关书籍和官网上都有很多详细的介绍。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 202,980评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,178评论 2 380
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 149,868评论 0 336
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,498评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,492评论 5 364
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,521评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,910评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,569评论 0 256
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,793评论 1 296
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,559评论 2 319
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,639评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,342评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,931评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,904评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,144评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,833评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,350评论 2 342

推荐阅读更多精彩内容