sass应用
一、sass环境
1.sass简述
Sass是最早的Css预处理语言,采纳Ruby语言编写,Sass从第三代开始,放弃了缩进式格调,并且齐全向下兼容一般的Css代码,这一代的Sass也被称为Scss
2.sass特点
不能间接在页面中解析,须要应用ruby事后翻译成css文件
Sass性能更加弱小,领有流控语句等
齐全兼容 CSS3,在 CSS 语言根底上增加了扩大性能,比方变量、嵌套 (nesting)、混合 (mixin)
3.Sass & Scss
Sass和Scss平时都称之为Sass,是同一个货色。区别有两点:
文件后缀 (扩展名) 不同: Sass 以“.sasss”为扩展名,Scss 以“.scss”为扩展名;书写形式 (语法) 不同: Sass 以严格的缩进式语法规定来书写,不带大括号和分号; Scss 的书写形式和 Css 语法十分相似(越来越受欢迎起因之一)。
4.解析Sass
办法一:应用第三方编译工具koala,官网:http://koala-app.com/
办法二:应用vscode插件:easysass,插件配置参考:https://marketplace.visualstu...
二、sass语法
1.变量
Sass 应用美元符号“$”来申明变量。Sass的默认变量个别是用来设置默认值,而后依据需要来笼罩的,笼罩的形式也很简略,只须要在默认变量 之前 从新申明下变量即可。default:升高变量的优先级(备胎)
代码中应用:
$fontSize:60px;$bgColor:blue !default; //全局变量$bgColor:skyblue;body { font-size: $fontSize; background-color: $bgColor; div{ $bgColor:red; //局部变量 background-color: $bgColor; }}
2.@import
Sass扩大了Css的@import规定,让它可能引入Scss和Sass 文件,合并并输入一个繁多的Css文件。被导入的文件中所定义的变量或 mixins 都能够在主文件中应用。
应用:
// test.scss$bgColor:skyblue;// index.scss@import "test";body { background-color: $bgColor;}
3.嵌套
a.选择器嵌套
选择器嵌套,默认是叠加后辈选择器
div { h3 { color: red; }}
b.属性嵌套
div { border: { // 留神body 前面有个英文冒号 top:1px solid red; bottom:10px dotted blue; }}
c.伪类嵌套
div { &:hover { background-color: red; } &::after{ content: "after"; }}
4.代码复用
a.混合宏
我的项目中有几处小款式相似,能够应用变量来对立解决。须要重复使用大段的款式时,变量就无奈达到目标了。这个时候就须要混合宏来搞定。@mixin 用来申明混合宏@include 用来来调用申明好的混合宏。毛病:混合宏对于复用反复的代码块很不便,但它会生成冗余的代码块,雷同代码块不能智能合并。比方在不同的中央调用一个雷同的混合宏时。
应用:
@mixin after{ // 不带参数 content: "after"; display: block; background-color: red;}@mixin circle($radius:50px,$bgColor:skyblue){ // 带参数 width: $radius; height: $radius; border-radius: 50%; background-color: $bgColor;}div{ @include circle(50px,red); &::after{ @include after; }}
b.继承
Sass通过关键词 @extend 来继承已存在的类款式块,实现代码的继承。(能够解决混合宏不能智能合并雷同代码的毛病)
.btn{ border: solid 1px #ccc; background-color: white; font-size: 14px; padding: 5px 10px; border-radius: 4px;}.btn-primary{ @extend .btn; background-color: #33b735; // 重写背景色彩 color: white;}.btn-warnning{ @extend .btn; background-color: #da3e3e; color: white;}//===> css/*/* .btn, .btn-primary, .btn-warnning { border: solid 1px #ccc; background-color: white; font-size: 14px; padding: 5px 10px; border-radius: 4px;}
c.占位符
Sass的占位符 %placeholder 申明的代码,如果不被 @extend 调用的话,不会产生任何代码。防止了代码冗余的产生。
%popover{ // 不会保留的css中,因为未继承 background-color: #33b735;}.btn-primary{ // @extend %popover; }
区别总结
占位符独立定义,不调用时不产生任何代码;继承首先有一个基类存在,不论调用不调用,基类的款式都将会编译到 Css 代码中。
区别图示比拟:
5.非凡变量类型
a.list
List类型的取值,语法nth(list, index),第一个参数示意要取谁的,也就是list类型的变量的名称,第二个示意索引
应用:
div { $div-padding: 1px 5px 10px 20px 30px 40px; padding: { top: nth($div-padding, 1); bottom: nth($div-padding, 4); }}
b.map
Map类型取值,语法map-get(map, key),第一个参数示意要取谁的,也就是map类型的变量的名称,第二个参数示意要取的key。
应用:
div { $color-map: (r:red, g:green, b:blue); color: map-get($color-map, r);}
6.sass运算
对sass中的数值进行计算,除法运算必须加括号,其它运算能够不加,然而倡议所有运算都加上括号
应用:
div { border: solid 1px + 3px - 1px red; padding-left: (1000px / 10); padding-top: 10px * 10;}
7.sass分支与循环
a.if语句
@if 指令能够依据条件来解决款式块,条件为true返回一个款式块,false返回另外款式块。除了@if之外,还能够配合@else、@else if应用。
应用:
@mixin show($boolean: true){ @if $boolean { display: block; visibility: visible; }@else{ display: none; visibility: hidden; }}div { @include show(true);}
b.for循环
@for 循环有两种模式: @for $i from <start> through <end> 包含end这个数 @for $i from <start> to <end> 不包含end这个数循环内应用#{$i}调用以后次循环变量,循环内应用函数或mixin时,不须要包装#{},间接应用 $i;
应用:
ul { width: 500px; border: solid 1px red; li { background-color: red; margin: 10px 0; @for $w from 1 through 10 { &:nth-child(#{$w}) { width: #{$w}0%; } } }}
c.each循环list
@each 循环就是去遍历一个列表,而后从列表中取出对应的值。@each $var in <list>, $var 是个变量名,<list>返回一个列表值。变量 $var 会在列表中做遍历,并且遍历出与 $var 对应的款式块。
应用:
ul { width: 500px; border: solid 1px red; $author-list: tony tian kevin; @mixin user-imgs { @each $author in $author-list{ .photo-#{$author}{ background-image: url("/imgs/#{$author}.jpg"); } } } .author{ @include user-imgs; } }
编译后的css:
ul { width: 500px; border: solid 1px red;}ul .author .photo-tony { background-image: url("/imgs/tony.jpg");}ul .author .photo-tian { background-image: url("/imgs/tian.jpg");}ul .author .photo-kevin { background-image: url("/imgs/kevin.jpg");}
d.while循环
@while 循环和 @for相似,前面的条件为 true 就会执行,并且会生成不同的款式块,直到表达式值为 false 时进行循环。
应用:
li { background-color: red; $types: 10; $type-width: 20px; @while $types > 0{ &:nth-child(#{$types}) { width: $type-width * $types; $types: $types - 1; } } }
8.函数
Sass自备一系列的函数性能。还能够自定义函数。
可应用的函数:
字符串函数unquote($string): 删除字符串中的引号;quote($string): 给字符串增加引号;To-upper-case(): 将字符串小写字母转换成大写字母;To-lower-case(): 将字符串转换成小写字母。数字函数percentage($value): 将一个不带单位的数转换成百分比值;round($value): 将数值四舍五入,转换成一个最靠近的整数;ceil($value): 将大于本人的小数转换成下一位整数;floor($value): 将一个数去除他的小数局部;abs($value): 返回一个数的绝对值;min($numbers…): 找出几个数值之间的最小值;max($numbers…): 找出几个数值之间的最大值;random(): 获取随机数。列表函数length($list): 返回一个列表的长度值;nth($list, $n): 返回一个列表中指定的某个标签值join($list1, $list2, [$separator]): 将两个列给连贯在一起,变成一个列表;append($list1, $val, [$separator]): 将某个值放在列表的最初;zip($lists…): 将几个列表联合成一个多维的列表;index($list, $value): 返回一个值在列表中的地位值。Introspection 函数type-of($value): 返回一个值的类型;unit($number): 返回一个值的单位;unitless($number): 判断一个值是否带有单位;comparable($number-1, $number-2): 判断两个值是否能够做加、减和合并。Opacity函数alpha($color) /opacity($color): 获取色彩透明度值;rgba($color, $alpha): 扭转色彩的透明度值;opacify($color, $amount) / fade-in($color, $amount):使色彩更不通明;transparentize($color, $amount) / fade-out($color, $amount):使色彩更加通明。Sass Maps的函数map-get($map,$key):依据给定的 key 值,返回 map 中相干的值。map-merge($map1,$map2):将两个 map 合并成一个新的 map。map-remove($map,$key):从 map 中删除一个 key,返回一个新 map。map-keys($map):返回 map 中所有的 key。map-values($map):返回 map 中所有的 value。map-has-key($map,$key):依据给定的 key 值判断 map 是否有对应的 value 值,如果有返回 true,否则返回 false。keywords($args):返回一个函数的参数,这个参数能够动静的设置 key 和 value。Miscellaneous函数(三元函数)if($condition,$if-true,$if-false):条件成立时,返回的值为 $if-true,否则返回值为$if-false。RGB色彩函数rgb($red,$green,$blue):依据红、绿、蓝三个值创立一个色彩;rgba($red,$green,$blue,$alpha):依据红、绿、蓝和透明度值创立一个色彩;red($color):从一个色彩中获取其中红色值;green($color):从一个色彩中获取其中绿色值;blue($color):从一个色彩中获取其中蓝色值;mix($color-1,$color-2,[$weight]):把两种颜色混合在一起HSL函数hsl($hue,$saturation,$lightness):通过色相(hue)、饱和度(saturation)和亮度(lightness)的值创立一个色彩;hsla($hue,$saturation,$lightness,$alpha):通过色相(hue)、饱和度(saturation)、亮度(lightness)和通明(alpha)的值创立一个色彩;hue($color):从一个色彩中获取色相(hue)值;saturation($color):从一个色彩中获取饱和度(saturation)值;lightness($color):从一个色彩中获取亮度(lightness)值;adjust-hue($color,$degrees):通过扭转一个色彩的色相值,创立一个新的色彩;lighten($color,$amount):通过扭转色彩的亮度值,让色彩变亮,创立一个新的色彩;darken($color,$amount):通过扭转色彩的亮度值,让色彩变暗,创立一个新的色彩;saturate($color,$amount):通过扭转色彩的饱和度值,让色彩更饱和,从而创立一个新的色彩desaturate($color,$amount):通过扭转色彩的饱和度值,让色彩更少的饱和,从而创立出一个新的色彩;grayscale($color):将一个色彩变成灰色,相当于desaturate($color,100%);complement($color):返回一个补充色,相当于adjust-hue($color,180deg);invert($color):反回一个反相色,红、绿、蓝色值倒过去,而透明度不变。
应用:
body{ &::after{ content: to-upper-case("haoyunlai"); display: block; clear: both; }}
9.正文
// 单行正文/* 多行正文 */