sass语法

文件后缀名

sass有两种后缀名文件:一种后缀名为sass,不使用大括号和分号;另一种就是我们这里使用的scss文件,这种和我们平时写的css文件格式差不多,使用大括号和分号。

而本教程中所说的所有sass文件都指后缀名为scss的文件。在此也建议使用后缀名为scss的文件,以避免sass后缀名的严格格式要求报错。

//文件后缀名为sass的语法
body
background: #eee
font-size:12px
p
background: #0982c1 //文件后缀名为scss的语法
body {
background: #eee;
font-size:12px;
}
p{
background: #0982c1;
}

1 变量

sass允许使用变量,所有变量使用$开头,而变量值和变量名之间就需要使用冒号(:)分隔开

$blue:blue;

.demo{

color:$blue;

}

如果变量使用在字符串中,需要使用#{}来调用

$side:left;

.demo1{

border-#{$side}:1px soild $blue;

}

全局变量

在变量值后面加上!global即为全局变量。这个目前还用不上,不过将会在sass 3.4后的版本中正式应用。目前的sass变量范围饱受诟病,所以才有了这个全局变量。

2 计算功能

sass允许在代码中使用算式

$height:200px;

.demo2{

margin:100px+20px;

font-size:14px/2;

width:200px*3;

height:$height*3;

}

3 嵌套

sass允许选择器嵌套

例如:

.demo4 span{ float:left;}

可以写成这样

.demo4{
  span{
    float:left;
  }
}

属性也可以嵌套     所谓属性嵌套指的是有些属性拥有同一个开始单词,如border-width,border-color都是以border开头:

例如

p{

  border:{

    color:red;
  } }
//sass style
//-------------------------------
.fakeshadow {
border: {
style: solid;
left: {
width: 4px;
color: #888;
}
right: {
width: 2px;
color: #ccc;
}
}
} //css style
//-------------------------------
.fakeshadow {
border-style: solid;
border-left-width: 4px;
border-left-color: #888;
border-right-width: 2px;
border-right-color: #ccc;
}

注意,border后面必须加上冒号。

在嵌套代码块中可以是&引用父元素,比如a:hover伪元素可以写成:

a{

  &:hover{

    color:red;

  }

}

@at-root 跳出嵌套

sass3.3.0中新增的功能,用来跳出选择器嵌套的。默认所有的嵌套,继承所有上级选择器,但有了这个就可以跳出所有上级选择器。

@at-root (without: ...)@at-root (with: ...)

默认@at-root只会跳出选择器嵌套,而不能跳出@media@support,如果要跳出这两种,则需使用@at-root (without: media)@at-root (without: support)。这个语法的关键词有四个:all(表示所有),rule(表示常规css),media(表示media),support(表示support,因为@support目前还无法广泛使用,所以在此不表)。我们默认的@at-root其实就是@at-root (without:rule)

//没有跳出循环
.parent-1{
color:red;
.child-1{
border:1px solid red;
}
} //编译后的css
.parent-1{
color:red;
}
.parent-1 .child-1 {
border: 1px solid red;
}
//普通跳出嵌套
.parent-2{
color:red;
@at-root .child-2{
border:1px solid red;
}
} //编译后的css
.parent-1{
color:red;
}
.child-2 {
border: 1px solid red;
} //跳出media嵌套,父元素的嵌套保留
@media print{
.parent-3{
color:red;
@at-root(without:media){
.child-3{
border:1px solid red;
}
}
}
} //编译后的css
@media print {
.parent-3 {
color: red;
}
} .parent-3 .child-3 {
border: 1px solid red;
}
/*跳出media和父元素的嵌套*/
@media print{
.parent-3{
color:red;
@at-root(without:all){
.child-3{
border:1px solid red;
}
}
}
} //编译后的css
@media print {
.parent-3 {
color: red;
}
} .child-3 {
border: 1px solid red;
}

@at-root&配合使用

//sass style
//-------------------------------
.child{
@at-root .parent &{
color:#f00;
}
} //css style
//-------------------------------
.parent .child {
color: #f00;
}

应用于@keyframe

//sass style
//-------------------------------
.demo {
...
animation: motion 3s infinite; @at-root {
@keyframes motion {
...
}
}
} //css style
//-------------------------------
.demo {
...
animation: motion 3s infinite;
}
@keyframes motion {
...
}

4 注释

一共有三种注释方式:

  1 标准的css注释

    /* comment*/   会保留到编译后的文件中

  2 单行注释//comment  只保留在sass源文件中,编译后会被省略

  3 重要注释 在/*后加一个!号  ------即使是压缩编译模式也会保留这行注释,通常用于声明版权信息

    /*!*/

五 代码的重用

5.1 继承性

sass允许一个选择器继承另一个选择器@extend

例如:

.class1{ border:1px solid red;}

.class2{

  @extend .class1;

  color:blue;

}

占位选择器 

在sass3.2.0之后就可以定义占位选择器%,这种选择器的优势在于:如果不调用,则不会有任何多余的css产生,避免了之前在一些基础文件中预定义了很多基础的样式,

在实际使用中,不管是否使用@extend继承这个样式,在编译时都会解析出所有的样式,占位选择符使用%标示定义,通过@extend调用

demo

%style1{
border:1px solid red;
color:red;
font-size:20px;
}
%style2{
border:1px solid blue;
color:blue;
font-size:10px;
}
.demo10{
@extend %style1;
}

编译后的代码:

.demo10 {
border: 1px solid red;
color: red;
font-size: 20px;
}

ps:在@media中暂时不能@extend @media外的代码片段,以后将会可以。

5.2 Mixin 是可以重用的代码块

使用@mixin定义一个代码块

@mixin left{

  border-left:1px solid red;

  color:blue;

}

使用@include调用这个代码块

.demo5{

  @include left;

}

mixin的强大之处在与可以指定参数和缺省值

@mixin border($borderWidth:10px){

    border:$borderWidth solid red;
} .demo6{   @include border(20px); }

@content 可以用来解决css3的@media等带来的问题。它可以使@mixin接受一整块样式,接受的样式从@content开始。(就时当定义一个mixin,并定义了@content,在@include mixin时,可以传入相应的内容到mixin中,特别是在@media中起作用)

demo:

@mixin max-screen($color){
@media only screen and(max-width:1000px)
{
@content
}
}
$color: red;
@include max-screen(blue){
body{
color:$color
}
}

编译后

@media only screen and (max-width: 1000px) {
body {
color: red;
  }
}

demo2:

@mixin color($color){
border:1px solid $color;
background-color: $color;
@content;
}
$color:red;
.demo10{
@include color(blue){
color:$color;
}
}
编译后
.demo10 {
border: 1px solid blue;
background-color: blue;
color: red;
}

5.3 颜色函数

SASS提供了一些内置的颜色函数,以便生成系列颜色。

颜色函数中又以lighten减淡和darken加深为最,其调用方法为lighten($color,$amount)darken($color,$amount),它们的第一个参数都是颜色值,第二个参数都是百分比。

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

5.4 插入文件@import

 @import "path/filename.scss";   可以简写为@import "path/filename";

如果插入的是.css文件,则等同于css的import命令。

@import "filename.css";

所有的sass导入文件都可以忽略后缀名.scss。一般来说基础的文件命名方法以_开头,如_mixin.scss。这种文件在导入的时候可以不写下划线,可写成@import "mixin"

sass的导入(@import)规则和CSS的有所不同,编译时会将@import的scss文件合并进来只生成一个CSS文件。但是如果你在sass文件中导入css文件如@import 'reset.css',那效果跟普通CSS导入样式文件一样,导入的css文件不会合并到编译后的文件中,而是以@import方式存在。

5.5 运算

sass具有运算的特性,可以对数值型的Value(如:数字、颜色、变量等)进行加减乘除四则运算。请注意运算符前后请留一个空格,不然会出错。

$baseFontSize:          14px !default;
$baseLineHeight: 1.5 !default;
$baseGap: $baseFontSize * $baseLineHeight !default;
$halfBaseGap: $baseGap / 2 !default;
$samllFontSize: $baseFontSize - 2px !default; //grid
$_columns: 12 !default; // Total number of columns
$_column-width: 60px !default; // Width of a single column
$_gutter: 20px !default; // Width of the gutter
$_gridsystem-width: $_columns * ($_column-width + $_gutter); //grid system width

6 高级用法

6.1 条件语句

@if 用来判断:

.demo{

  @if 3+5==8{

    border:1px solid red;
  }   @if 2+3>6{     border:2px solid blue;   } }

@if可一个条件单独使用,也可以和@else结合多条件使用,@else

@if lightness($color)>30%{

  background-color:red;

  }@else{

  background-color:blue;

  }

6.2 循环语句@for(语法:@for $var from <start> through <end>@for $var from <start> to <end>

@for $ifor 0 to 10{

  border#{$i}{

    border:#{$i}px solid red;
  } }

@while:

$i:7;

@while $i>0{

  .item#{$i}{

    width:100px*$i;
    $i: $i - 2;(要有空格,否则报错)
  } }

@each(语法为:@each $var in <list or map>) 作用与@for类似:

@each $number in a,b,c,d{

  .#{$number}{

    border:1px solid red;
  } }

单个字段list数据循环

$animal-list: puma, sea-slug, egret, salamander;
@each $animal in $animal-list {
.#{$animal}-icon {
background-image: url('/images/#{$animal}.png');
}
}
编译后
.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');
}
.salamander-icon {
background-image: url('/images/salamander.png');
}

多个字段list数据循环

$animal-data: (puma, black, default),(sea-slug, blue, pointer),(egret, white, move);
@each $animal, $color, $cursor in $animal-data {
.#{$animal}-icon {
background-image: url('/images/#{$animal}.png');
border: 2px solid $color;
cursor: $cursor;
}
}
编译后
.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;
}
.egret-icon {
background-image: url('/images/egret.png');
border: 2px solid white;
cursor: move;
}

多个字段map数据循环

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

6.3 三目判断

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

if(1+1>2,2,3)=======>>1+1>2为假,所以结果为
if(2+2==4,2,3)======>>2+2==4为真,所以结果是2

if(1+1>2,2,3)=======>>1+1>2为假,所以结果为3(条件是1+1>2,为真的值是2,为假的值是3)

if(2+2==4,2,3)======>>2+2==4为真,所以结果是2(条件是2+2==4,为真的值是2,为假的值是3)

6.4 自定义函数

@function sum($n,$m){

@return $n+$m;

}

.double{

  width:sum(100px,200px);

}

编译后:

.double{

width:300px;

}

sass 基本语法的更多相关文章

  1. sass高级语法的补充

    1. 继承 2.混入 3.函数 我这篇博客需要点基础才能看懂, 但我这篇博客是对上一篇的 sass高级语法 的补充 从这方面来看也无所谓了

  2. sass初级语法

    github地址:https://github.com/lily1010/sass/tree/master/course01 用到的sass语法是: sass --watch test.scss:te ...

  3. sass中级语法

    github地址:https://github.com/lily1010/sass/tree/master/course02 用到的sass语法是: sass --watch test.scss:te ...

  4. sass高级语法

    github地址:https://github.com/lily1010/sass/tree/master/course03 用到的sass语法是: sass --watch test.scss:te ...

  5. Sass基础语法

    Sass是CSS3语言的扩展,在CSS的基础之上添加了新特性和语法,能省事地写出更好的样式表.Sass引擎是基于Ruby的. 导入Sass文件: @import "colors" ...

  6. sass笔记-2|Sass基础语法之让样式表更具条理性和可读性

    这一篇主要详述保持sass条理性和可读性的3个最基本方法--嵌套.导入和注释. 零. 变量 变量本身的作用是为了保持属性值的可维护性,把所有需要维护的属性值放在同一个地方,快速更改,处处生效,可谓售后 ...

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

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

  8. sass基本语法

    sass是一种基于ruby语言开发的CSS预处理器.它可以使用变量,嵌套,混入,继承,运算,函数等编程语言具有的特性进行CSS的开发,使得CSS的开发变得简单粗暴清晰可维护. sass有两种后缀文件格 ...

  9. Sass 增强语法的样式表

    功能: 完全兼容CSS3 相对CSS,扩展了变量.嵌套和mixins 对控制颜色和其他值的非常有用的方法 高级功能,如库的直接控制 良好的格式,自定义输出 语法 对于Sass,有两种语法. 一种叫SC ...

随机推荐

  1. 洛谷P1432 倒水问题

    题目背景 In the movie "Die Hard 3", Bruce Willis and Samuel L. Jackson were confronted with th ...

  2. 【贪心+二分】codeforces C. Sagheer and Nubian Market

    http://codeforces.com/contest/812/problem/C [题意] 如何花最少的钱买最多的纪念品?首要满足纪念品尽可能多,纪念品数量一样花钱要最少,输出纪念品数量以及最少 ...

  3. 解决Genymotion运行Android 5.0一直卡在开机界面

    在一些机器,启动genymotion 的android5.0版模拟器时,会卡在启动界面,一直启动不了. 这是因为要求的开启虚拟选项没有打开,在第一次启动时,会有提示,但可能大家没有注意(我也没注意到, ...

  4. android AlertDialog常见使用

    android AlertDialog常见使用 简单提示框: AlertDialog.Builder alertDialog = new AlertDialog.Builder(this); aler ...

  5. BZOJ2059: [Usaco2010 Nov]Buying Feed 购买饲料

    数轴上n<=500个站可以买东西,每个站位置Xi,库存Fi,价格Ci,运东西价格是当前运载重量的平方乘距离,求买K<=10000个东西到达点E的最小代价. f[i,j]--到第i站不买第i ...

  6. poj3635 FULL tank(TLE) 有限制的最短路(BFS搜索)。

    用的BFS+优先队列+二进制压缩状态判重+链式前向星, TLE,好像有人这样过了...好像要用A*算法,还不太会,所以暂时放弃.但是也学会了很多,学习了链式前向星,更深理解了BFS求最优的时候,什么时 ...

  7. 前端学习之- Ajax

    Ajax:页面不做刷新,直接将数据悄悄提交到后台,然后通过回调函数处理返回结果. $.Ajax({ # 提交到后台 url:'/host', # 提交到哪里 type:'POST' # 提交方式 da ...

  8. [Bzoj3668][Noi2014]起床困难综合症(位运算)

    3668: [Noi2014]起床困难综合症 Time Limit: 10 Sec  Memory Limit: 512 MBSubmit: 2612  Solved: 1500[Submit][St ...

  9. [Bzoj4517]排列技术(错排 + 预处理)

    4517: [Sdoi2016]排列计数 Time Limit: 60 Sec  Memory Limit: 128 MBSubmit: 1508  Solved: 915[Submit][Statu ...

  10. Linux后台运行命令nohub输出pid到文件(转)

    用nohup可以启动一个后台进程.让一个占用前台的程序在后台运行,并静默输出日志到文件: nohup command > logfile.txt & 但是如果需要结束这个进程,一般做法是 ...