哈尔滨电商网站建设收录之家
SASS是CSS预处理器,简单来说,SASS是比CSS更高一级的语言,它拥有CSS不具备的语法,比如if条件控制
SASS的预处理器
SASS是一种无法被浏览器直接执行的语言,我们需要通过预处理工具(可以理解为翻译工具),把SASS文件转化为CSS文件,预处理工具有很多,最推荐的方法的就是VScode的插件Easy SASS的方法,也可用webpack的插件sass-loader。
SASS基本语法
 嵌套规则(Nested Rules)
 SASS用缩进来简写嵌套结构
#main p {color: #00ff00;width:97%;/*嵌套后生成#main p .redbox*/.redbox {background-color:red;color:#000;}
}
 
父选择器引用(Referencing Parent Selectors: &)
 &代表父选择器简写
a {font-size:12px;&:hover {color: red;}  //生成a:hover.firebox & {color:black} //生成.firebox a
}
 
/* 多层嵌套 */
h1 {color:blue;p {color:red;& a {   //生成h1 p acolor:yellow }}
}
 
/*&规则:必须为前缀,可以加后缀 */
.main {&-head {  //生成.main-head}
}
 
父选择器 & 被作为一个后缀的时候,Sass 将抛出一个错误。
 属性的嵌套( Nested Properties)
 这部分用的很少,但是也算个功能
.funky {font:{size:12px;   //生成font-sizefamily:fatasy;  //生成font-family}
}
 
变量
 //变量的声明
 $width:5em;
 $width:5em !global //全局声明,普通声明只在当前{}下有用
//变量的使用
 width: w i d t h ; 变量名下划线和横杠互用, m a i n − h e a d 和 m a i n h e a d 默认相等,变量名必须是 width; 变量名下划线和横杠互用,main-head和main_head默认相等, 变量名必须是 width;变量名下划线和横杠互用,main−head和mainhead默认相等,变量名必须是开头
 变量的数据类型
 字符串
 数字(数值保留单位)
 颜色
 布尔值
 空值
 值列表(数组)
 maps(键值对)
 变量默认符 !default
 !default赋值的变量,如果已被赋值,则使用原值,否则使用新值
$name = 1em;
 $name = 2em !default; //已被赋值1em,使用原值1em
 插值语法#{}
 插值语法常常是用来避免sass运算的,保证其内容为纯css内容
KaTeX parse error: Expected 'EOF', got '#' at position 14: name:'foo' p.#̲{name} { //p.foo
 }
 运算符
 加减乘除±*/
 分割符/属性替代表示: #{KaTeX parse error: Expected 'EOF', got '}' at position 8: number1}̲/#{number2}
 -用作减法规则:number1 - number2前后带空格,(number1-number2)加括号,或者-number-前加空格后加数字
 +可拼接字符串
 布尔运算支持and,or,not
 支持颜色运算,支持括号,不支持数组运算
 函数
 sassscript定义了部分可直接使用的函数 函数列表
//使用函数
p {color:hsl(100%,10%,0)
}
 
关键字参数
 关键字参数是对函数参数的命名,除了方便阅读没有任何作用
p {color:hsl($light:100%,$darkness:10%,$hue:0)
}
 
css3 @规则
 @import 引入外部样式表
 @import “foo.sass”;
//如果不带后缀会搜索.sass和.scss后缀文件
@import “foo”,“tools”; //import多个
 @media 媒体查询样式
.sidebar {width:100px;@media ....... {   //@media会冒泡到顶端width:200px;}
}
 
@extend 继承类
.nav {display:block;font-size:12px
}
 
.nav-small{@extend .nav  //继承.nav所有样式color:black;
}
 
//继承css默认样式
 @extend a:hover;
//!optional标记(找不到不会报错)
 @at-root
 将嵌套的层提到父层
@debug,@warn,#error
 将结果输出到控制台
控制指令和表达式
 条件语句 if( )
 //语法
 if(布尔值,值1,值2)
if(true,1px,2px) //1px
 @if
p {@if 1+1 == 2 {color:red;}@if 1+1 == 3 {color:blue;}
}
 
@if,@else if,@else
p {@if  {}@else if{}@to}
}
 
@for的两种形式
 @for $var from through
 @for  v a r f r o m = = t o = = 循环中的参数 var from ==to== 循环中的参数 varfrom==to==循环中的参数name,不运算#{$name}
@for KaTeX parse error: Expected '}', got '#' at position 32: … 3 { .item-#̲{i} {width:2em*$i;}
 }
 @each循环
 @each $var in 
@each v a r 1 , var1, var1,var2…in <多维list or map>
@while
$i:0;@while $i<5 {.item-#{$i} {width:2em*$i;}$i : $i+1;}
 
混入样式@mixin
 SASS可以指定一个自定义的样式
//定义一个混入样式
 @
mixin mixinname{display:block;color:white;
}
 
//引入混入样式
 body {
 @include mixinname
 }
//带参数的引入样式
@mixin mixinname ($para1,$para2){display:block;color:white;
}body {@include mixname(2px,$value2) //可引入直接值和变量
}
 
//关键字参数(就是给参数起变量名,用于方便阅读)
 body {
 @include mixname( c o l o r : b l u e , color:blue, color:blue,size:3) //
 }
//可变参数…(参数数目可变)
 @mixin mixinname($para…){ //参数后面加…
 }
 @content 内容混入
 SASS可以自定义内容,并引入
//定义一个自定义内容name
@mixin name{@content
}p {include name {   //引入自定义内容name..... //content}
}
 
函数指令
 SASS可以声明函数
@function func_name ($para){@return $para*2
}
 
//使用
p {width: func_name(5);}
