一、什么是Sass

Sass (Syntactically Awesome StyleSheets)是css的一个扩展开发工具,它允许你使用变量、条件语句等,使开发更简单可维护。这里是官方文档

二、基本语法

1)变量

sass的变量名必须是一个$符号开头,后面紧跟变量名。

//sass 样式
$red: #f00;
div {
color: $red;
}
// 编译为css后
div {
color:#f00;
}

特殊变量:如果变量嵌套在字符串中,则需要写在 #{} 符号里面,如:

$top: top;
div {
margin-#{$top}: 10px; /* margin-top: 10px; */
}

默认变量:仅需在值后面加入 !default即可, 默认变量一般用来设置默认值,当该变量出现另外一个值时,无论定义先后,都会使用另外一个值,覆盖默认值

$color: red;
$color: blue !default;
div {
color: $color; /* color:red; */
}

多值变量:多值变量分为list类型和map类型,list有点像js对象中的数组,map类型像js中的对象

list : 可通过空格,逗号或小括号分割多个值,使用 nth($变量名, $索引)取值

//一维数据
$px: 5px 10px 20px 30px; //二维数据,相当于js中的二维数组
$px: 5px 10px, 20px 30px;
$px: (5px 10px) (20px 30px); // 例子
$px: 10px 20px;
div {
margin:nth($px, 1) 0 0 nth($px, 2); /* margin:10px 0 0 20px; */
}

map: 数据以key和value组成,格式:$map: (key1: value1, key2: value2); 通过map-get($map, $key);

$headings: (h1: 2em, h2: 1.5em, h3: 1.2em);
@each $header, $size in $headings {
#{$header} {
font-size: $size;
}
}

2)计算功能

sass允许使用算式。

div {
padding: 2px * 4px;
margin: (10px / 2);
font-size: 12px + 4px;
}

  

3)嵌套

标签嵌套

// sass 样式
div {
color: #333;
a {
font-size:14px;
&:hover {
text-decoration:underline;
}
}
} // 编译后css
div {
color: #333;
}
div a {
font-size:14px;
}
div a:hover {
text-decoration:underline;
}

  属性嵌套:

//sass 样式
.fakeshadow {
border: {
style: solid;
left: {
width: 4px;
color: #888;
}
right: {
width: 2px;
color: #ccc;
}
}
} //css 编译后样式
.fakeshadow {
border-style: solid;
border-left-width: 4px;
border-left-color: #888;
border-right-width: 2px;
border-right-color: #ccc;
}

4)注释

sass有两种注释风格

标准css注释: /* 注释 */, 会保留到编译后的文件中,压缩则删除

单行注释: // 注释

在标准注释 /*后面加入一个感叹号,表示重要注释,压缩模式也会保留注释,用于版权声明等。

/*! 重要注释 */

5)继承

sass 中,选择器继承可以让选择器继承另一个选择器的所有样式

// sass样式
h1 {
font-size:20px;
}
div {
@extend h1;
color:red;
}
// css编译后样式
h1 {
font-size:20px;
}
div {
font-size:20px;
color:red;
}

使用占位符选择器 % 

从sass3.2.0后,就可以定义占位选择器%,这个的优势在于,不调用不会有多余的css文件

// sass样式
%h1 {
font-size:20px;
}
div {
@extend %h1;
color:red;
}
// css编译后样式
div {
font-size:20px;
color:red;
}

  

6)混合(mixin)

sass中使用@mixin声明混合,可以传递参数,参数名义$符号开始,多个参数以逗号分开,如果参数有多组值,那么在变量后面加三个点表示,如: $var...

//sass 样式
@mixin opacity($opacity:50) {
opacity: $opacity / 100;
filter: alpha(opacity=$opacity);
} .opacity{
@include opacity; //参数使用默认值 50/100 = 0.5
}
.opacity-80{
@include opacity(80); //传递参数 80/100 = 0.8
} // css编译后样式
.opacity{
opacity: 0.5;
filter: alpha(opacity=50);
} // --------------------- // 多参数
@mixin center($width, $height) {
position: absolute;
left:50%;
top:50%;
width:$width;
height:$height;
margin:(-$height / 2) 0 0 (-$width / 2);
}
div {
@include center(200px, 100px);
}
// css编译后样式
div {
position: absolute;
left:50%;
top:50%;
width:200px;
height:100px;
margin:-50px 0 0 -100px;
} // ------------------- //多组值
@mixin box-shadow($shadow...) {
-webkit-box-shadow: $shadow;
box-shadow: $shadow;
}
div {
@include box-shadow(0 1px 0 rgba(0,0,0,.4), 0 -1px 1px rgba(0,0,0,.4));
}
// css编译后样式
div {
-webkit-box-shadow: 0 1px 0 rgba(0,0,0,.4), 0 -1px 1px rgba(0,0,0,.4);
box-shadow: 0 1px 0 rgba(0,0,0,.4), 0 -1px 1px rgba(0,0,0,.4);
}

@content:在sass3.2.0中引入, 可以用来解决css3中 @meidia 或者 @keyframes 带来的问题。它可以使@mixin接受一整块样式,接收的样式从@content开始

//sass 样式
@mixin max-screen($res){
@media only screen and ( max-width: $res )
{
@content;
}
} @include max-screen(480px) {
body { color: red }
} //css 编译后样式
@media only screen and (max-width: 480px) {
body { color: red }
}

  使用@content解决@keyframes关键帧的浏览器前缀问题

// 初始化变量
$browser: null;
// 设置关键帧
@mixin keyframes($name) {
@-webkit-keyframes #{$name} {
$browser: '-webkit-'; @content;
}
@-moz-keyframes #{$name} {
$browser: '-moz-'; @content;
}
@-o-keyframes #{$name} {
$browser: '-o-'; @content;
}
@keyframes #{$name} {
$browser: ''; @content;
}
} // 引入
@include keyframes(scale) {
100% {
#{$browser}transform: scale(0.8);
}
} // css编译后
@-webkit-keyframes scale {
-webkit-transform: scale(0.8);
}
@-moz-keyframes scale {
-moz-transform: scale(0.8);
}
@-o-keyframes scale {
-o-transform: scale(0.8);
}
@keyframes scale {
transform: scale(0.8);
}

  

7)颜色函数

sass提供了一些内置的颜色函数

lighten(#cc3, 10%)    // #d6d65c
darken(#cc3, 10%)    // #a3a329
grayscale(#cc3)     // #808080
complement(#cc3)    // #33c

  

8)引入外部文件

使用 @import 命令引入外部文件, 引入后,可使用外部文件中的变量等。

@import "_base.scss";

  

三、高级用法

1)函数 function

sass允许用户编写自己的函数,以@function开始

$fontSize: 10px;
@function pxTorem($px) {
@return $px / $fontSize * 1rem;
}
div {
font-size: pxTorem(16px);
}
// css编译后样式
div {
font-size: 1.6rem;
}

  

2)if条件语句

  @if语句可以用来判断

// sass样式
$type: monster;
div {
@if $type == ocean {
color: blue;
} @else if $type == matador {
color: red;
} @else if $type == monster {
color: green;
} @else {
color: black;
}
}
// css编译后样式
div {
color: green;
}

  三目判断:语法为 if($condition, $if_true, $if_false)。 三个参数分别表示: 条件,条件为真的值,条件为假的值

if(true, 1px, 2px) => 1px
if(false, 1px, 2px) => 2px

3)循环语句

for循环有两种形式,分别为:@for $var from <start> through <end> 和 @for $var from <start> to <end>。 $var 表示变量,start表示开始值,end表示结束值,两种形式的区别在于 through 包括 end 的值,to 不包括 end 值。

// sass样式
@for $i from 1 to 4 {
.item-#{$i} {width: 2em * $i;}
}
// css编译后样式
.item-1 {
width: 2em;
}
.item-2 {
width: 4em;
}
.item-3 {
width: 6em;
}

   while循环

// sass样式
$i: 2;
@while $i > 0 {
.item-#{$i} {width: 2em * $i;}
$i: $i - 1;
}
// css编译后样式
.item-2 {
width: 4em;
}
.item-1 {
width: 2em;
}

  

@each循环:语法为@each $var in <list or map>。 其中$var表示变量,而list和map表示数据类型,sass3.3.0新加入多字段循环和map数据循环

单字段list数据循环

//sass 样式
$animal-list: puma, sea-slug, egret;
@each $animal in $animal-list {
.#{$animal}-icon {
background-image: url('/images/#{$animal}.png');
}
}
//css 编译后样式
.puma-icon {
background-image: url('/images/puma.png');
}
.sea-slug-icon {
background-image: url('/images/sea-slug.png');
}
.egret-icon {
background-image: url('/images/egret.png');
}

   多字段list数据循环

//sass 样式
$animal-data: (puma, black, default),(sea-slug, blue, pointer);
@each $animal, $color, $cursor in $animal-data {
.#{$animal}-icon {
background-image: url('/images/#{$animal}.png');
border: 2px solid $color;
cursor: $cursor;
}
}
//css 编译后样式
.puma-icon {
background-image: url('/images/puma.png');
border: 2px solid black;
cursor: default;
}
.sea-slug-icon {
background-image: url('/images/sea-slug.png');
border: 2px solid blue;
cursor: pointer;
}

  多字段map数据循环

//sass 样式
$headings: (h1: 2em, h2: 1.5em, h3: 1.2em);
@each $header, $size in $headings {
#{$header} {
font-size: $size;
}
}
//css 编译后样式
h1 {
font-size: 2em;
}
h2 {
font-size: 1.5em;
}
h3 {
font-size: 1.2em;
}

  

SASS简介及使用方法的更多相关文章

  1. NetCat简介与使用方法

    精品学习网考试频道小编应广大考生的需要,特为参加考试的考生策划了“NetCat简介与使用方法”专题等有关资料,供考生参考! 在入侵中它是最经典的工具之一 ,NetCat被所有的网络安全爱好者和研究者称 ...

  2. PHP Socket(套接字连接)扩展简介和使用方法

    PHP socket扩展是基于流行的BSD sockets,实现了和socket通讯功能的底层接口,它可以和客户端一样当做一个socket服务器. 使用这些函数时请注意,虽然他们中有很多和C函数同名的 ...

  3. nc之一:NetCat简介与使用方法

    精品学习网考试频道小编应广大考生的需要,特为参加考试的考生策划了“NetCat简介与使用方法”专题等有关资料,供考生参考! 在入侵中它是最经典的工具之一 ,NetCat被所有的网络安全爱好者和研究者称 ...

  4. SASS - 简介

    SASS – 简介 SASS – 环境搭建 SASS – 使用Sass程序 SASS – 语法 SASS – 变量 SASS- 局部文件(Partial) SASS – 混合(Mixin) SASS ...

  5. sass兼容IE8透明度方法

    你可以轻松的利用 {Sass::Script::Functions#ie_hex_str ie_hex_str} 函数对其做转换.$translucent-red: rgba(, , , 0.5); ...

  6. Sass简介,安装环境,Sass的语法格式及编译调试

    什么是 CSS 预处理器? 定义:CSS 预处理器定义了一种新的语言,其基本思想是,用一种专门的编程语言,为 CSS 增加了一些编程的特性,将 CSS 作为目标生成文件,然后开发者就只要使用这种语言进 ...

  7. git简介及使用方法

    一.git简介及安装1.git简介 Git 是用于 Linux 内核开发的版本控制工具.与常用的版本控制工具 CVS, Subversion 等不同,它采用了分布式版本库的方式,不必服务器端软件支持, ...

  8. Retrofit简介与使用方法(翻译)

    简介 Retrofit 是一个Square开发的类型安全的REST安卓客户端请求库.这个库为网络认证.API请求以及用OkHttp发送网络请求提供了强大的框架.Retrofit库让从web api下载 ...

  9. JavaScript简介与使用方法

    1.JavaScript简介 1.1.JavaScript简史 最初:网络通信很慢,网页上的数据要传送到数据库验证,然后再返回错误结果,找客观过程要等很久,于是,网景公司开发出一门新语言,当时Java ...

随机推荐

  1. web安全-密码安全

    web安全-密码安全 1.密码的作用 2.储存 3.传输 4.替代方案 5.生物特征密码 (指纹 人脸) 6.密码单向变换彩虹表 组合 密码变换次数越多越安全 加密成本几乎不变(生成密码速度慢一点) ...

  2. 平衡树学习笔记(5)-------SBT

    SBT 上一篇:平衡树学习笔记(4)-------替罪羊树 所谓SBT,就是Size Balanced Tree 它的速度很快,完全碾爆Treap,Splay等平衡树,而且代码简洁易懂 尤其是插入节点 ...

  3. CF671A Recycling Bottles 计算几何

    It was recycling day in Kekoland. To celebrate it Adil and Bera went to Central Perk where they can ...

  4. php小试牛刀

    [构造函数] function __construct() [析构函数] 当某个对象的所有引用被删除,或者对象被显式的销毁时会执行析构函数 function __destruct() [静态方法] p ...

  5. django导入 views.py

    网上找了各种教程..均无解....自己摸索出来了..分享 给大家... 首先INSTALLED_APP 加入 自己的 app pili,然后如下图 from App名称 import views 就 ...

  6. 洛谷1026(字符串dp)

    常规dp.看到数据很小就直接暴力了,没有预处理.kmp好像过分了-- #include <cstdio> #include <cstring> #include <ios ...

  7. P3166 [CQOI2014]数三角形

    传送门 直接求还要考虑各种不合法情况,不好计数 很容易想到容斥 把所有可能减去不合法的情况剩下的就是合法情况 那么我们只要任取不同的三点就是所有可能,不合法情况就是三点共线 对于两点 $(x_1,y_ ...

  8. Xsheel远程链接ECS,Xftp上传文件到ECS

    下载Xshell 工具:用来远程实现远程访问. 下载Xftp工具:方便用来上传文件. 下载方式直接百度搜索,如下如: 下载完成之后安装. 接下来就是链接云服务器了. 直接百度经验按照步骤来就OK了,如 ...

  9. 学习Laravel遇到的问题纪录

    1.更换git  remote $ git remote rm origin $ git remote add origin git@github.com:your_username/hello_la ...

  10. hibernate打印sql日志及参数

    #log4j.properties log4j.rootLogger=info, CA# ConsoleAppenderlog4j.appender.CA=org.apache.log4j.Conso ...