sass笔记

1、导入

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

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

2、定义变量

$fontSize: 12px;
$wid:500px;

.cc{

  font-size:$font-size;

  width:$wid;

}

//编译为css后,为字体是12px,宽度为500px

 

3、混合(有无参数)

@mixin margin{
  margin:20px auto;
};
@mixin opacity($opacity:50){
  opacity:$opacity/100;
  filter:alpha(opacity=$opacity)
}

.cc{

  @include margin;

  @include opacity(20);

}

//编译为css后,为margin:20px auto; 透明度为0.2

 

@mixin box-shadow($shadow...){
box-shadow:$shadow;
-webkit-box-shadow:$shadow;
-moz-box-shadow:$shadow;
-ms-box-shadow:$shadow;
-o-box-shadow:$shadow;
}

@include box-shadow(0 2px 2px rgba(0,0,0,.3),0 3px 3px rgba(0,0,0,.3),0 4px 4px rgba(0,0,0,.3));

//编译后为:box-shadow:(0 2px 2px rgba(0,0,0,.3),0 3px 3px rgba(0,0,0,.3),0 4px 4px rgba(0,0,0,.3));

 

4、层级关系

.cc{

  font-size:12px;

  a{
    color:$color;
    font-size:16px;
    text-decoration:none;
    &:hover{
    color:$color1;
  }
}

 

编译后为.cc , .cc a , .cc a:hover

5、继承

.dd{
  @extend .cc;

  }

 

表示.dd继承.cc的所有相关样式

6、mix()函数

mix($color-1,$color-2,$weight)

$color-1和$color-2指的是你需要合并的颜色,颜色可以是任何表达式,也可以是颜色变量。$weight合并的比例(表示$color-1所占的比例),默认值为50%,其取值范围是0~1之间。

7、lighten() & darken()函数

lighten()和darken()两个函数都是围绕颜色的亮度值做调整的,其中lighten()函数会让颜色变得更亮,与之相反的darken()函数会让颜色变得更暗。这个亮度值可以是0~1之间,不过常用的一般都在3%~20%之间。

如:

background: lighten($baseColor,10%)

 8、saturate() & desaturate()函数

这两个函数是通过改变颜色的饱和度来得到一个新的颜色,他们和前面介绍的修改亮度得到新颜色的方法非常相似。

9、opacify() & fade-in()函数

这两个函数是用来对已有颜色的透明度做一个加法运算,会让颜色更加不透明。

其接受两个参数,第一个参数是原始颜色,第二个参数是你需要增加的透明度值,其取值范围主要是在0~1之间。当透明度值增加到大于1时,会以1计算,表示颜色不具有任何透明度。

其中fade-in()函数又名fade_in()函数。其所起作用等效。

>> opacify(rgba(22,34,235,.6),.2)

rgba(22, 34, 235, 0.8)

>> opacify(rgba(22,34,235,.6),.5)

#1622eb

>> opacify(hsla(22,34%,23%,.6),.15)
rgba(23, 34, 34, 0.65)

>> fade-in(rgba(23,34,34,.5),.615)

#172222

10、transparentize() & fade-out()函数

transparentize()fade-out()函数所起作用刚好与opacify()fade-in()函数相反,让颜色更加的透明。这两个函数会让透明值做减法运算,当计算出来的结果小于0时会以0计算,表示全透明。

>> transparentize(red,.5) 
rgba(255, 0, 0, 0.5) 
>> transparentize(#fde,.9) 
rgba(255, 221, 238, 0.1)
>> fade-out(hsla(98,6%,23%,.5),.6)
 rgba(58, 62, 55, 0)

11、unquote()和quote()

unquote()函数主要是用来删除一个字符串中的引号,如果这个字符串没有带有引号,将返回原始的字符串。
quote()函数刚好与unquote()函数功能相反,主要用来给字符串添加引号。如果字符串,自身带有引号会统一换成双引号""

 如:

content:unquote("hello world")

  content:quote(hello world)

 

注:quote()只能给字符串添加双引号,如字符串中有单引号或空格,需要用字符串包裹

12、数学函数

percentage($value):将一个不带单位的数转换成百分比值;
round($value):将数值四舍五入,转换成一个最接近的整数;
ceil($value):向上取整;
floor($value):向下取整;
abs($value):返回一个数的绝对值;
min($numbers…):找出几个数值之间的最小值;
max($numbers…):找出几个数值之间的最大值。

注:min()和max()函数中,如果出现单位不一致,会报错

13、列表函数

length($list):返回一个列表的长度值(参数之间使用空格隔开,不能使用逗号,否则函数将会报错)如:length(19px 20px (border 1px solid) 2em)会返回4,
nth($list, $n):返回一个列表中指定的某个标签值
如:

nth(10px 20px 30px,1)//返回10px
nth((Helvetica,Arial,sans-serif),2)//返回 “Arial”
nth((1px solid red) border-top green,1)//返回(1px "solid" red)

join($list1, $list2, [$separator]):将两个列给连接在一起,变成一个列表(join函数中,只能将两个列表合并,多于两个将会报错,如需要个列表进行合并,则可选择多使用几次join函数
append($list1, $val, [$separator]):将某个值放在列表的最后;
如:

append(10px 20px,30px)返回 (10px 20px 30px)

zip($lists…):将几个列表结合成一个多维的列表(每个单一的列表个数值必须是相同的);
如:

zip(1px 2px 3px,solid dashed dotted,green blue red) //返回((1px "solid" #008000), (2px "dashed" #0000ff), (3px "dotted" #ff0000))

index($list, $value):返回一个值在列表中的位置值(如指定的值$value不在$list中,则返回false,否则返回位置值)。
如:

index(1px solid red,1px)//返回1

 

14、判断型函数

type-of($value):返回一个值的类型
如:

type-of(200)//返回 “number”
type-of(abc)//返回“string”
type-of(red)//返回color

unit($number):返回一个值的单位(如遇到复杂的计算时,如果时乘除运算,会返回多单位);
如:

unit(200px)//返回“px"
unit(10px / 3rem)//返回”px/rem“

 


注:如果是加减遇到不同单位时,除px于cm、mm运算外,unit()函数会报错
unitless($number):判断一个值是否带有带位(不带单位返回true,带单位返回false,%也属于单位
comparable($number, $number):判断两个值是否可以做加、减和合并(如果可以返回true,不可以返回false

Miscellaneous函数
在这里把Miscellaneous函数称为三元条件函数,主要因为他和JavaScript中的三元判断非常的相似。他有两个值,当条件成立返回一种值,当条件不成立时返回另一种值:

if($condition,$if-true,$if-false)
上面表达式的意思是当$condition条件成立时,返回的值为$if-true,否则返回的是$if-false值。
如:

 if(true,1px,2px)//返回1px
if(false,1px,2px)//返回2px

 

15、自定义函数
如:去掉一个值的单位

@function strip-units($number){
      @return $number/($number * 0 +1);
}

 

16、特殊变量

如:

$borderTop: top !default;
$baseFontSize: 12px !default;

$baseLineHeight: 1.5 !default;

.border-#{$borderTop}{
  border-#{$borderTop}:1px solid #ccc;
}

body{
  font:#{$baseFontSize}/#{$baseLineHeight};
}

 

17、多值变量

$linkColor: #08c #333 !default;
a {
  color: nth($linkColor, 1);
  &:hover {
    color: nth($linkColor, 2);
  }
}

$headings: (h1: 2em, h2: 1.5em, h3: 1.2em);

@each $header, $size in $headings {

   #{$header} {
  font-size: $size;
}

}

18、全局变量(在选择器中声明的变量会覆盖全局变量)

$fontSize: 12px;

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

p {
  font-size: $fontSize;
}

 

编译后body的font-size是14px。p的font-size值均为12px

19、@at-root跳出嵌套

 注:

  默认@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-2 {
  color: #f00;
  @at-root .child {
    width: 200px;
  }
}
//跳出多个嵌套
@media print {
  .parent2 {
    color: #f00;
    @at-root (without: media) {
      .child2 {
        width: 200px;
      }
    }
  }
}

 

 

 20、@at-root&配合使用

.child{
    @at-root .parent &{
        color:#f00;
    }
}
//编译后
.parent .child {
  color: #f00;
}

 


21、
用于@keyframe
.demo {
    ...
    animation: motion 3s infinite;

    @at-root {
        @keyframes motion {
          ...
        }
    }
}
//编译后
.demo {
    ...   
    animation: motion 3s infinite;
}
@keyframes motion {
    ...
}

 

22、@content
@mixin max-screen($res){
  @media only screen and ( max-width: $res )
  {
    @content;
  }
}

@include max-screen(480px) {
  body { color: red }
}

//编译后
@media only screen and (max-width: 480px) {
  body { color: red }
}                  

 

 
23、
@if判断

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

$lte7: true;
$type: monster;
.ib{
    display:inline-block;
    @if $lte7 {
        *display:inline;
        *zoom:1;
    }
}
p {
  @if $type == ocean {
    color: blue;
  } @else if $type == matador {
    color: red;
  } @else if $type == monster {
    color: green;
  } @else {
    color: black;
  }
}

//编译后
.ib{
    display:inline-block;
    *display:inline;
    *zoom:1;
}
p {
  color: green; 
}

 

24、@for循环
@for $i from 1 through 3 {
  .item-#{$i} { width: 2em * $i; }
}

//编译后
.item-1 {
  width: 2em; 
}
.item-2 {
  width: 4em; 
}
.item-3 {
  width: 6em; 
}
25、@each循环
$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'); 
}

 

 

 


posted @ 2017-03-09 14:27  dongxiaolei  阅读(135)  评论(0)    收藏  举报