您的位置:首页 > Web前端 > CSS

CSS预处理语言:Sass

2016-06-21 17:34 633 查看
CSS 预处理器定义了一种新的语言,其基本思想是,用一种专门的编程语言,为 CSS 增加了一些编程的特性,将 CSS 作为目标生成文件,然后开发者就只要使用这种语言进行编码工作。

到目前为止,在众多优秀的 CSS 预处理器语言中就属 Sass、LESS 和 Stylus 最优秀

Sass 和 SCSS 其实是同一种东西,我们平时都称之为 Sass,两者之间不同之处有以下两点:

(1)文件扩展名不同,Sass 是以“.sass”后缀为扩展名,而 SCSS 是以“.scss”后缀为扩展名

(2)语法书写方式不同,Sass 是以严格的缩进式语法规则来书写,不带大括号({})和分号(;),而 SCSS 的语法书写和我们的 CSS 语法书写方式非常类似。

先来看一个示例:

Sass 语法

$font-stack: Helvetica, sans-serif  //定义变量
$primary-color: #333 //定义变量

body
font: 100% $font-stack
color: $primary-color


SCSS 语法

$font-stack: Helvetica, sans-serif;
$primary-color: #333;

body {
font: 100% $font-stack;
color: $primary-color;
}


编译出来的 CSS

body {
font: 100% Helvetica, sans-serif;
color: #333;
}


在书写 Sass 时不带有大括号和分号,其主要是依靠严格的缩进方式来控制的。

SCSS 是 Sass 的新语法格式,从外形上来判断他和 CSS 长得几乎是一模一样,代码都包裹在一对大括号里,并且末尾结束处都有一个分号。其文件名格式常常以“.scss”为扩展名。这样的语法格式对于从事前端工作的同学来说更易于接受,这也是 SCSS 为什么更被前端人员青眯的原因。

以下代码都用SCSS

$font-stack: Helvetica, sans-serif;
$primary-color: #333;

body {
font: 100% $font-stack;
color: $primary-color;
}


安装:

在 Windows 平台下安装 Ruby 需要先有 Ruby 安装包,大家可以到 Ruby 的官网(http://rubyinstaller.org/downloads)下载对应需要的 Ruby 版本。Ruby 安装文件下载好后,可以按应用软件安装步骤进行安装 Ruby。在安装过程中,个人建议将其安装在 C 盘下,在安装过程中选择第二个选项;Ruby 安装完成后,在开始菜单中找到新安装的 Ruby,并启动 Ruby 的 Command 控制面板;打开电脑的命令终端,输入下面的命令:

gem install sass

一:Sass 编译过程

使用 Sass 进行开发,项目中还是引用“.css”文件,Sass 只不过是做为一个预处理工具,提前帮你做事情,只有你需要时候,他才有攻效。

这样一来,也就有了要学习的内容—— Sass 的编译。因为 Sass 开发之后,要让 Web 页面能调用 Sass 写好的东西,就得有这么一个过程,这个过程就称之为 Sass 编译过程。Sass 的编译有多种方法:

命令编译、GUI工具编译、自动化编译

1 . 命令编译是指使用你电脑中的命令终端,通过输入 Sass 指令来编译 Sass。这种编译方式是最直接也是最简单的一种方式。

单文件编译:
sass <要编译的Sass文件路径>/style.scss:<要输出CSS文件路径>/style.css


这是对一个单文件进行编译,如果想对整个项目所有 Sass 文件编译成 CSS 文件,可以这样操作:

多文件编译:
sass sass/:css/


上面的命令表示将项目中“sass”文件夹中所有“.scss”(“.sass”)文件编译成“.css”文件,并且将这些 CSS 文件都放在项目中“css”文件夹中。

缺点及解决方法:

在实际编译过程中,你会发现上面的命令,只能一次性编译。每次个性保存“.scss”文件之后,都得重新执行一次这样的命令。如此操作太麻烦,其实还有一种方法,就是在编译 Sass 时,开启“watch”功能,这样只要你的代码进行任保修改,都能自动监测到代码的变化,并且给你直接编译出来:

sass --watch <要编译的Sass文件路径>/style.scss:<要输出CSS文件路径>/style.css
如:sass --watch sass/bootstrap.scss:css/bootstrap.css


2 . GUI 界面工具编译

我比较推荐使

Koala (http://www.w3cplus.com/preprocessor/sass-gui-tool-koala.html)

3 .自动化编译

Grunt 和 Gulp ,也可以通过他们来配置 Sass 的编译。

http://www.imooc.com/learn/30

注意:在Sass的编译的过程中,是不是支持“GBK”编码的。所以在创建 Sass 文件时,就需要将文件编码设置为“utf-8”。

另外一个错误就是路径中的中文字符引起的。建议在项目中文件命名或者文件目录命名不要使用中文字符。

二. 输出方法

1.嵌套输出方式

在编译的时候带上参数“ –style nested”:

sass --watch test.scss:test.css --style nested


nav {
ul {
margin: 0;
padding: 0;
list-style: none;
}

li { display: inline-block; }

a {
display: block;
padding: 6px 12px;
text-decoration: none;
}
}


编译出来的 CSS 样式风格:

nav ul {
margin: 0;
padding: 0;
list-style: none; }
nav li {
display: inline-block; }
nav a {
display: block;
padding: 6px 12px;
text-decoration: none; }


2.展开输出方式 expanded

在编译的时候带上参数“ –style expanded”:

sass --watch test.scss:test.css --style expanded


这个输出的 CSS 样式风格和 nested 类似,只是大括号在另起一行,同样上面的代码,编译出来:

nav ul {
margin: 0;
padding: 0;
list-style: none;
}
nav li {
display: inline-block;
}
nav a {
display: block;
padding: 6px 12px;
text-decoration: none;
}


3.紧凑输出方式 compact

在编译的时候带上参数“ –style compact”:

sass --watch test.scss:test.css --style compact


该方式适合那些喜欢单行 CSS 样式格式的朋友,编译后的代码如下:

nav ul { margin: 0; padding: 0; list-style: none; }
nav li { display: inline-block; }
nav a { display: block; padding: 6px 12px; text-decoration: none; }


4.压缩输出方式 compressed

在编译的时候带上参数“ –style compressed”:

sass --watch test.scss:test.css --style compressed


压缩输出方式会去掉标准的 Sass 和 CSS 注释及空格。也就是压缩好的 CSS 代码样式风格:

nav ul{margin:0;padding:0;list-style:none}nav li{display:inline-block}nav a{display:block;padding:6px 12px;text-decoration:none}


只要你的浏览器支持“sourcemap”功能即可。早一点的版本,需要在编译的时候添加“–sourcemap” 参数:

sass --watch --scss --sourcemap style.scss:style.css


在 Sass3.3 版本之上(我测试使用的版本是 3.4.7),不需要添加这个参数也可以:

sass --watch style.scss:style.css


三、Scss的基本特性-基础

1.声明变量:美元符号“”开头Sass的变量包括三个部分:声明变量的符号“”、变量名称、赋予变量的值

$btn-primary-color : #fff !default;//Bootstrap 定义 primarybutton 的颜色


2.调用:定义之后可以在全局范围内使用。

$fontSize: 12px;
body{
font-size:$fontSize;
}


3.全局变量与局部变量

全局变量就是定义在元素外面的变量,定义在元素内部的变量是一个局部变量。

$color: orange !default;//定义全局变量
.block {
color: $color;//调用全局变量
}
em {
$color: red;//定义局部变量
a {
color: $color;//调用局部变量
}
}
span {
color: $color;//调用全局变量
}


css 的结果:

//CSS
.block {
color: orange;
}
em a {
color: red;
}
span {
color: orange;
}


4.嵌套-选择器嵌套
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  SCSS-CSS