sass学习记录

导入sass文件

局部文件

局部文件–专门为@import命令而编写的sass文件,并不需要生成对应的独立css文件。
-在sass中局部文件的文件名以下划线开头,sass在编译时不会单独编译这个文件输出css,而只把这个文件用作导入。

默认变量值

当反复声明一个变量时,只有最后一处声明有效且它会覆盖前边的值。

$link-color: blue; 
$link-color: red;  //有效
a {
color: $link-color;
}

使用!default标签时,如果这个变量被声明赋值了,那就用它声明的值,否则就用这个默认值。

$fancybox-width: 400px !default;
.fancybox {
width: $fancybox-width;
}

若是用户在导入sass局部文件之前声明了一个 f a n c y b o x − w i d t h 变 量 , 则 这 里 的 fancybox-width变量,则这里的 fancyboxwidth,fancybox-width: 400px就无效,否则默认为400px。

嵌套导入

sass允许在css内使用@import导入sass文件。
这种导入方式下,生成对应的css文件时,局部文件会被直接插入到css规则内导入它的地方。

// 一个名为_blue-theme.scss的文件
aside {
  background: blue;
  color: white;
}
//另一个css文件
.blue-theme {@import "blue-theme"}
 // 生成的结果:
.blue-theme {
  aside {
    background: blue;
    color: #fff;
  }
}

原生的css导入

不能用sass的@import直接导入一个原始的css文件,因为sass会认为你想用css原生的@import。但是,因为sass的语法完全兼容css,所以可以把原始的css文件改名为.scss后缀,即可直接导入了。

混合器

混合器使用@mixin标识符定义。

@mixin rounded-corners {
  -moz-border-radius: 5px;
  -webkit-border-radius: 5px;
  border-radius: 5px;
}

在样式表中通过@include来使用混合器

notice {
  background-color: green;
  border: 2px solid #00aa00;
  @include rounded-corners;
}

//sass最终生成:
.notice {
  background-color: green;
  border: 2px solid #00aa00;
  -moz-border-radius: 5px;
  -webkit-border-radius: 5px;
  border-radius: 5px;
}

给混合器传参

可以通过在@include混合器时给混合器传参,来定制混合器生成的精确样式。

@mixin link-colors($normal, $hover, $visited) {
  color: $normal;
  &:hover { color: $hover; }
  &:visited { color: $visited; }
}

在使用@include时,可以把它当作一个css函数来传参。

a {
  @include link-colors(blue, red, green);
}

//Sass最终生成的是:

a { color: blue; }
a:hover { color: red; }
a:visited { color: green; }

sass允许通过语法$name: value的形式指定每个参数的值。这种形式的传参,参数可以不按顺序

a {
    @include link-colors(
      $normal: blue,
      $visited: green,
      $hover: red
  );
}

默认参数值

可以为混合器的参数设置默认值,参数默认值使用$name: default-value的声明形式,默认值可以是任何有效的css属性值,甚至是其他参数的引用。

@mixin link-colors(
    $normal,
    $hover: $normal,
    $visited: $normal
  )
{
  color: $normal;
  &:hover { color: $hover; }
  &:visited { color: $visited; }
}

这时,调用@include link-colors(red)时,$hover$visited也会被自动赋值为red。

选择器继承

通过使用@extend,一个选择器可以继承为另一个选择器定义的所有样式。

//通过选择器继承继承样式
.error {
  border: 1px solid red;
  background-color: #fdd;
}
.seriousError {
  @extend .error;
  border-width: 3px;
}

在上边的代码中,seriousError将会继承样式表中任何位置处为.error定义的所有样式。

如果.seriousError @extend .error, 那么样式表中的任何一处.error都用.error.seriousError这一选择器组进行替换。

总结

@extend的两个要点:
  • 跟混合器相比,继承生成的css代码相对更少。
  • 继承遵从css层叠的规则。当两个不同的css规则应用到同一个html元素上时,并且这两个不同的css规则对同一属性的修饰存在不同的值,css层叠规则会决定应用哪个样式。相当直观:通常权重更高的选择器胜出,如果权重相同,定义在后边的规则胜出。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值