发表于: 2019-10-09 23:51:16

3 1059


    SASS基本入门

    一、基本了解

    参考:

    入门篇:https://www.imooc.com/learn/311

    进阶篇:https://www.imooc.com/learn/311

    1. 1. Sass 是一门高于 CSS的元语言,它能用来清晰地、结构化地描述文件样式,有着比普通 CSS 更加强大的功能,Sass能够提供更简洁、更优雅的语法即缩进式风格,同时提供多种功能来创建可维护和管理的样式表。

    2. 2. sass和scss的区别

    文件扩展名不同,Sass  是以“.sass”后缀为扩展名,而 SCSS 是以“.scss”后缀为扩展名;

    语法书写方式不同,Sass  是以严格的缩进式语法规则来书写,不带大括号({})和分号(;),而 SCSS 的语法书写和我们的 CSS 语法书写方式非常类似。

    SCSS CSS 写法无差别,这也是 Sass  后来越来越受大众喜欢原因之一。


    1. 3. 安装https://www.cnblogs.com/sting2me/p/6817909.html):

    Ruby 的官网(http://rubyinstaller.org/downloads)下载对应需要的 Ruby 版本;

    安装时,记得全点勾,或者要点添加到环境变量path那选项,完成ruby安装;

    打开ruby的命令面板,输入gem install sass,即可安装sass;

     

    二、语法

    1. 1. “.sass”只能使用 Sass 老语法规则(缩进规则),“.scss”使用的是 Sass 的新语法规则,也就是 SCSS 语法规则(类似 CSS 语法格式);

    2. 2. Sass 编译过程即将预处理语言变为css文件并引用,Sass的编译有多种方法:命令编译、GUI工具编译、自动化编译;

    3. 3. 命令编译:直接最简便,但编译时显示的参数较多;

    单文件编译:

    sass <要编译的Sass文件路径>/style.scss:<要输出CSS文件路径>/style.css

    多文件编译:

    sass sass/:css/

    自动监控编译:添加--watch,只要保存sass文件即可直接修改已输出的css文件;

    sass --watch <要编译的Sass文件路径>/style.scss:<要输出CSS文件路径>/style.css


    1. 4. GUI工具编译

    相比之下,我比较推荐使用以下两个:

    Koala  (http://www.w3cplus.com/preprocessor/sass-gui-tool-koala.html)

    CodeKit  (http://www.w3cplus.com/preprocessor/sass-gui-tool-codekit.html)


    1. 5. 自动化编译:不能直接照搬

    ① Grunt 配置 Sass 编译的示例代码:http://www.imooc.com/learn/30

    Gulp 配置 Sass 编译的示例代码;

     

    1. 6. 常见的编译错误

    字符编译错误:要用utf-8,每次新建都要修改,不用GBK

    路径中文字符错误:建议在项目中文件命名或者文件目录命名不要使用中文字符;


    1.  7. Sass 中编译出来的样式风格也可以按不同的样式风格显示。其主要包括以下几种样式风格:

    嵌套输出方式 nested:

    a. 编写sass时,可以如此编写:父元素 { 子元素 {样式} },并在编译时添加--style nested,如:

    sass --watch test.scss:test.css --style nested

    b. 即可实现编译出的css文件,格式变为后代选择器,末位大括号与样式并列一行;

    展开输出方式 expanded:编译时添加--style expanded,但与nested不同的是,编译出的css文件,末位大括号另起一行,即常规格式;

    紧凑输出方式 compact:编译时添加--style compact,编译出则是所有样式并列一行的单行css样式,而以上两种编译出则是每个样式为一行;

    压缩输出方式  compressed:编译时添加--style compressed,编译出则是css样式会去掉标准的 Sass CSS 注释及空格,即min版本的压缩格式,如不需要编写css文件后,可以编译出min版本来方便引用;

     

    1. 8. sass调试:只要你的浏览器支持“sourcemap”功能即可。早一点的版本,需要在编译的时候添加“--sourcemap”  参数:

    sass --watch --scss --sourcemap style.scss:style.css

    3.3版本以上的版本直接编译即可:

    sass --watch style.scss:style.css


    如是chrome浏览器还需进一步调试,如下:

    a.找到你的谷歌插件,在网址处输入chrome://flags/找到Developer Tools experiments工具,中文名是开发者实验,搜索也行,然后开启enabled;

    b. 然后F12打开开发者调试面板,点开设置setting,在preferences的面板里面,找到Enable CSS source maps选项,并点开;

     

    c. 再在同样是设置里面的Workspace面板,点击add folder,来把对应的sass文件的文件夹添加到workspace

    d. 由此可以在chrome的source面板选择sass文件打开,进行改动,刷新页面即可联动调试并使本地文件变化,但要保持必须保持ruby命令窗口的状态;

     


     

     

    三、基本特性--基础

    1. 1. 声明变量:声明变量的符号“$”+变量名称+赋予变量的值,如$color:red;

    2. 2. 变量类型

    普通变量:直接声明;

    默认变量:声明之后加个!default,如$baseLineHeight:1.5  !default;,可以根据需求来覆盖的,覆盖的方式也很简单,只需要在默认变量之前重新声明下变量即可,即在默认变量的上面声明;


    1. 3. 调用变量:在声明变量下面,在选择器{   }里面来给样式定义变量名称即可,如body { color: $color; }
    1. 4. 声明变量情况

    全局变量:在元素外声明的变量为全局变量,也可以增加!global,会应用于所有相同的变量名称;

    局部变量:在局部范围(选择器内、函数内、混合宏内...)声明一个已经存在于全局范围内的变量时,该变量为作用于局部范围内的局部变量,会覆盖全局变量,如em值的作用情况;

    变量声明时候:

    a. 该值至少重复出现了两次;

    b. 该值至少可能会被更新一次;

    c. 该值所有的表现都与变量有关(非巧合)。

     

    1. 4. 变量的嵌套分为选择器嵌套、属性嵌套、伪类嵌套‘

    选择器嵌套:如是作用于同一个子元素,可以(父元素 &)来放在子元素的{  }里面如下:

    nav  {

      a {

        color: red;

     

        header & {

          color:green;

        }

      } 

    }

    属性嵌套:如作用的样式前缀一样,后缀不一样,如font-sizefont-weight,可以分开后缀定义:

    .box  {

      font: {

       size: 12px;

       weight: bold;

      } 

    }

    伪类嵌套:可以配合父选择器(&)使用,即在{ } 里相当于父选择器,如:

    .clearfix{

    &:before,

    &:after  {

        content:"";

        display: table;

      }

    尽可能避免选择器嵌套,避免难以阅读和过多冗长;

     

    1. 5. 混合宏@mixin,用来声明混合宏的关键词,可以混合多个大段样式,也可以混合条件函数;

    不带参数的混合宏:

    @mixin  border-radius{

        -webkit-border-radius: 5px;

        border-radius: 5px;

    }

    带参数的混合宏:

    @mixin  border-radius($radius:5px){

        -webkit-border-radius: $radius;

        border-radius: $radius;

    }

    复杂的混合宏,如参数括号里要带有条件函数或复杂参数,可以用 代替,如下:

    @mixin  box-shadow($shadow...) {

      @if length($shadow) >= 1 {

        @include prefixer(box-shadow, $shadow);

      } @else{

        $shadow:0 0 4px rgba(0,0,0,.3);

        @include prefixer(box-shadow, $shadow);

      }

    }

    1. 6. 调用混合宏@include,调用已声明的混合宏名称,如下:

    button  {

        @include border-radius;

    }


    1. 7. 传递参数

    传递一个不带值的参数:声明时为@mixin color $color) { };,调用时,可以

    @include color(red),来赋予$color=red

    传递一个带值的参数:声明时@mixin color $color=red { };,此时声明的$color为默认值,可以在调用时直接调用,或者在()里赋予新值来覆盖;

    传递多个参数:可以在声明时在括号里用逗号隔开参数,如@mixin center($width,$height){ }

    调用时,@include center(500px,300px);,当混合宏传的参数过多之时,也可以在声明时应用特别的参数“…”替代,调用时一样要按顺序赋值;

    混合宏的不足:在多个选择器调用同一个混合宏,但编译出来不会合并选择器来定义样式,出现较多的代码块,不够简洁;

     

    1. 8. 继承@extend,可以给另一个选择器赋予已定义好的选择器的所有样式,编译出来即是合并选择器共用相同的样式,如:.btn-second       {  @extend .btn; }

    占位符:%placeholder,不调用时不会在css编译出来,方便维护,如$一样声明一个占位名称作为一个样式代码块,可以通过@extend来调用该占位名称,如:

    %mt5 { margin-top:  5px; }

    .btn { @extend %mt5; }


    1. 9. 混合宏、继承、占位符的应用情况:

     

    1. 10. 插值#{ } ,通过$声明一个变量名称为字符串,可以通过#{ 变量名称 },来提取字符串,并应用在定义样式上,只能获取双引号内的字符串,不能获取其他数值,不能在 mixin 中调用,但可以用于继承和占位符,如下:

    @mixin  generate-sizes($class, $small) {

        .#{$class}-small { font-size: $small; }

    }

    @include  generate-sizes("header-text", 12px);


    1. 11. 注释:使用 /* ”开头,结属使用 */ ”才能在css编译出来,如是// ,则不会在css编译出来;

    2. 12. 数据类型:如JavaScript一样,

    数字: 如,1、 2、 13、  10px;

    字符串:有引号字符串或无引号字符串(如其他css属性值),插值会把有引号字符串变为无引号字符串,如,"foo"、 'bar'、 baz、#{".btn"}=.btn

    ③  颜色:如,blue、 #04a3f9、 rgba(255,0,0,0.5);

    布尔型:如,true、  false;

    空值:如,null;

    值列表:用空格或者逗号分开,如,1.5em  1em 0 2em 、 Helvetica, Arial, sans-serif。


    1. 13. 值列表:如数组,

    空格隔开或者多个()组合都为一个值列表,里面包含多个值,值列表的)在css不会编译出来,如:10px  15px 0 0 为四个值和 (1px 2px) (5px  6px) 为两个值;

    如用逗号隔开,则是多个值列表组合,如:1px 2px, 5px 6px

    如有空值,可以用: 1px 2px () 3px  1px 2px null 3px 表示,不能只用一个()表示;

    进阶功能,如数组一样调用:

    a. nth函数(nth  function) 可以直接访问值列表中的某一项;

    b. join函数(join  function) 可以将多个值列表连结在一起;

    c. append函数(append  function) 可以在值列表中添加值;

    d. @each规则(@each rule 则能够给值列表中的每个项目添加样式。

     

    四、基本特性——运算

    1. 1. 加法:在变量或属性中都可以做加法运算,需要左右都要空格隔开,且不能相加不同的单位,如:

    .box { width: 20px + 8in; }


    1. 2. 减法:同加法类似,也不能相减不同的单位,如

    .content { width: $full-width -  $sidebar-width; }


    1. 3. 乘法:如相乘相同单位的数值,只需赋予其中一个数值单位即可,也不能相乘不同的单位,如:

    .box { width: 10px * 2; }


    1. 4. 除法:由于/ 符号在css为一个符号存在,所以需要符合以下才能作为运算符:

     如果数值或它的任意部分是存储在一个变量中或是函数的返回值。

     如果数值被圆括号包围。

      如果数值是另一个数学表达式的一部分

    如下:

      width: $width / 2;            // 使用了变量,是除法运算

      width: round(1.5) / 2;        // 使用了函数,是除法运算

      height: (500px / 2);          // 使用了圆括号,是除法运算

      margin-left: 5px + 8px /  2px; // 使用了加(+)号,是除法运算

    如果两个值带有相同的单位值时,除法运算之后会得到一个不带单位的数值;

     

    1. 5. 变量计算:可以用已声明的变量进行计算,如:width:       $content-width + $sidebar-width + $gutter;

    2. 6. 数字运算:可以直接按四则运算,应数字进行运算,加减要相同单位,乘除只需一个赋予单位;

    3. 7. 颜色运算:所有算数运算都支持颜色值,也能将数字和颜色值 一起运算,并且都是分段运算的,即每两个数字运算,按十六进制运算,如:

    p {

      color: #010203 + #040506; //计算为 01 + 04 = 0502 + 05 = 07 03 + 06 = 09

    }

    如此编译出来的  CSS 为:

    p {

      color: #050709;

    }


    1. 8. 字符运算:可以通过加法符号“+”来对任何字符串(有引号和无引号)进行连接,如

    $content: "Hello" + "" + "Sass!";

    如果相加的左侧为有引号,右侧为无引号,则得出结果为有引号字符串,如:

    content: "Foo " + Bar;    ==content: "Foo  Bar";

    如果相加的左侧为无引号,右侧为有引号,则得出结果为无引号字符串,如:

    font-family: sans- + "serif";  ==font-family: sans-serif;

     

    五、条件指令

    1. 1. 条件判断指令@if,可以配合@else增加false条件,根据混合宏的()里的真假情况编译,如:

    @mixin  blockOrHidden($boolean:true) {

      @if $boolean {

          @debug "$boolean is  #{$boolean}";

          display: block;

        }

      @else {

          @debug "$boolean is  #{$boolean}";

          display: none;

        }

    }


    1. 2.顺序循环指令@for,可以声明循环数列 i,通过插值来获取 i 的值来给后缀为数列的类应用

      函数声明,如:

    @for  $i from <start> through <end>

    @for  $i from <start> to <end>

    其中through包含end值,to不包含end

    函数应用,可以按数列顺序遍历各个类来应用:

    $grid-prefix:  span !default;

    $grid-width:  60px !default;

    $grid-gutter: 20px !default;

    @for  $i from 1 to 13 {

      .#{$grid-prefix}#{$i}{

        width: $grid-width * $i + $grid-gutter *  ($i - 1);

      } 

    }


    1. 3. 条件循环指令@while,判定为true继续执行,直到表达式值为 false 时停止循环,如:

    @while  $types > 0 {

        .while-#{$types} {

            width: $type-width + $types;

        }

        $types: $types - 1;

    }


    1. 4. 列表循环指令@each,遍历一个值列表即数组中的各个值,如:@each $var in       <list>

    $list: adam john wynn mason kuroir;

    @each  $author in $list {

            .photo-#{$author} {

                background:  url("/images/avatars/#{$author}.png") no-repeat;

            }

        }

     

    六、字符串和数字函数

    1. 1. 字符串函数:

    ① unquote($string) 函数:删除字符串的引号,只能删除字符串最前和最后的引号(双引号或单引号),而无法删除字符串中间的引号;

    ② quote($string )函数:给字符串添加引号,即使自身带有引号都会统一换成双引号 ""

          a.只能给字符串增加双引号,而且字符串中间有单引号或者空格时,需要用单引号或双引号括起;

            b.碰到特殊符号,比如: !?> 等,除中折号 - 下划线_ 都需要使用双引号括起;

    ③ To-upper-case() 函数将字符串小写字母转换成大写字母,To-lower-case() 函数将字符串转换成小写字母;

     

    1. 2. 数字函数:

    percentage($value):将一个不带单位的数转换成百分比值,不能转换有单位的数,如:

    .footer{   width : percentage(.2) } ==.footer { width:  20%;


     round($value):将数值四舍五入,转换成一个最接近的整数,小于0.5退一位,大于等于0.5进一位,可以转换带有任何单位的数值,如:

    .footer { width:round(12.3px) }   ==.footer { width: 12px; }

      ceil($value):将大于自己的小数转换成下一位整数,只有有小数都会进一位,如:

    .footer { width:ceil(12.3px); } ==》.footer {  width: 13px; }

    ④  floor($value):将一个数去除他的小数部分,不做任何进位,如:

    .footer { width:floor(12.3px); } ==》.footer { width: 12px; }

     abs($value):返回一个数的绝对值,可以对有单位的数值返回后带有同样单位,如:

    .footer { width:abs(-12.3px); } ==.footer {  width: 12.3px; }


    min($numbers…):找出几个数值之间的最小值,尤其值数列,但不能同时出现两种不同类型的单位;

    max($numbers…):找出几个数值之间的最大值,同样不能出现两种不同类型的单位,如:

    min(6,50,10%,3,300%) == 3

    max(10px,23px) == 23px

    random(): 获取一个随机数,即0~1之间的带有小数的随机数。()里无需有数值;

     

    七、列表函数

    1. 基本是对一个值列表中的属性参数进行获取并返回;
    2. 1. length($list)函数:主要用来返回一个列表中有几个值,()里的列表参数之间要使用空格隔开:

    >>  length(10px 20px (border 1px solid) 2em)

    4

     

    1. 2. nth($list, $n) 函数:用来指定列表中某个位置的值,$n 必须是大于 0 的整数,顺序从1计起:

    >>  nth((1px solid red) border-top green,1)

    (1px  "solid" #ff0000)

     

    1. 3.  join($list1, $list2, [$separator]):把逗号隔开的两个列变为空格隔开的一个列,只能作用两个列,如

    >>  join((blue,red),(#abc #def))

    (#0000ff,  #ff0000, #aabbcc, #ddeeff)

    如果需要将多个列,多个join函数一起用,则:

    >>  join((blue red), join((#abc #def),(#dee #eff)))

    (#0000ff  #ff0000 #aabbcc #ddeeff #ddeeee #eeffff)

    $separator,用来给列表函数连接列表值时使用的分隔符号,默认值为 auto,可以具体声明为comma(逗号)、space(空格),由于auto的情况比较多,所以一般都要明确声明:

    >>  join(blue,red,comma)

    (#0000ff,  #ff0000)

     

    1. 4.  append($list1, $val, [$separator]):将某个值$val放在列表$list1的最后一位,如:

    >>  append((blue green),red,comma)

    (#0000ff,  #008000, #ff0000)

     

    1. 5. zip($lists):将几个列表结合成一个二维列表,且都要是数值个数一样多,即length值一样,如

    >>  zip(1px 2px 3px,solid dashed dotted,green blue red)

    ((1px  "solid" #008000), (2px "dashed" #0000ff), (3px  "dotted" #ff0000))

     

    1. 6. index($list, $value):返回一个值在列表中的位置值,即返回索引号,如果指定的值不在列表中(没有找到相应的值),那么返回的值将是 false,如:

    >>  index(1px solid red, solid)

    2

     

    1. 7. Introspection 函数,对数值的类型等判断,方便排错:

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

    number  为数值型

    string  为字符串型

    bool  为布尔型

    color 为颜色型

    如:

    >>  type-of(100)

    "number"

     

    unit($number):返回一个值的单位,如没有返回"",如遇到多个单位,只有乘除生效,如

    >>  unit(1em)

    "em"

     

    unitless($number):判断一个值是否带有单位,如果不带单位返回的值为 true,带单位返回的值为  false,可以实现使用混合宏时,用条件函数判断是否带有单位,如没有则乘1个单位来加上单位,如:

    @mixin  adjust-location($x) {

      @if unitless($x) {   

        $x: 1px * $x;

      }

    }

    comparable($number-1, $number-2):判断两个值是否可以做加、减运算,如果可以返回的值为 true,如果不可以返回的值是 false,一般不同单位都是不可以(除了cm和mm),如:

    >>  comparable(2px,1%)

    false

     

    1. 8. Miscellaneous 函数if($condition,$if-true,$if-false),称为三元条件函数,如果当条件成立返回一种值,当条件不成立时返回另一种值,如:

    >>  if(true,1px,2px)

    1px

     

    1. 9. map函数:如数组,可以赋予同样后缀,不同前缀的类多个数值,可以方便增减和管理该数组,如:

    $map:  (

        $key1: value1,

        $key2: value2,

        $key3: value3

    )

    map为声明好的数组名,key1等为可以遍历的数值名,都可以根据实际情况声明;

    也可以嵌套,如:

    $map:  (

        key1: value1,

        key2: (

            key-1: value-1,

            key-2: value-2

        )

    );

     

    1. 10. map函数 自身带了七个函数

    map-get($map,$key):根据给定的  key 值,返回 map 中相关的值,如果不存在则返回null,如:

    .btn-dribble{

      color: map-get($social-colors,facebook);

    }

    map-merge($map1,$map2):将两个 map 合并成一个新的 map,如果 $map1 $map2 中有相同的 $key 名,那么将 $map2 中的 $key 会覆盖 $map1 中的相同key值,如:

    $newmap: map-merge($color,$typo);

     

    map-remove($map,$key):从 map 中删除一个 key,返回一个新 map,如果删除的 key 并不存在于 $map 中,那么  map-remove() 函数返回的新 map 和以前的 map 一样,如:

    $map:map-remove($social-colors,dribble);

     

    map-keys($map):返回  map 中所有的 key,变为一个数值名key的列表,也可以运用list的列表函数进行处理,如index函数来判断是否存在对应值,如:

    @function  colors($color){

        $names: map-keys($social-colors);

        @if not index($names,$color){

            @warn "Waring: `#{$color} is not  a valid color name.`";

        }

        @return map-get($social-colors,$color);

    }

     

    map-values($map):返回  map 中所有的 value,即变为一个value值的列表,同样可以用list的列表函数进行处理,如:

    $color: map-values($social-colors)

     

    map-has-key($map,$key):根据给定的  key 值判断 map 是否有对应的 value 值,如果有返回 true,否则返回 false,可以结合@if来返回没有对应值时的情况,如

    @if  map-has-key($social-colors,facebook){

        .btn-facebook {

            color:  map-get($social-colors,facebook);

        }

    }  @else {

        @warn "No color found for faceboo in  $social-colors map. Property ommitted."

    }

     

    keywords($args):返回一个函数的参数,这个参数可以混合宏或函数参数来动态的设置  key 和 value,返回的参数成对出现且key值没有$符号,如:

    @mixin  map($args...){

        @debug keywords($args);

    }

    通过@include map { },在{ } 里面设置新的$key1:value1等值

     

    八、颜色函数

    1. 1. RGB函数

    rgb($red,$green,$blue):根据红、绿、蓝三个值创建一个颜色;

    rgba($red,$green,$blue,$alpha):根据红、绿、蓝和透明度值创建一个颜色;

     

    red($color):从一个颜色中获取其中红色值,返回一个十进制的数值(0~255);

    green($color):从一个颜色中获取其中绿色值,返回一个十进制的数值(0~255

    blue($color):从一个颜色中获取其中蓝色值,返回一个十进制的数值(0~255

     

    mix($color-1,$color-2,[$weight]):把两种颜色混合在一起;

    a. $color-1 和  $color-2 指的是你需要合并的颜色,颜色可以是任何表达式,也可以是颜色变量。

    b. $weight 为  合并的比例(选择权重),默认值为 50%,取值为0~1,指第一个颜色的占比;

     

    1. 2. 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):通过改变一个颜色的色相值,创建一个新的颜色;

    a. 在基础值相加减,这个度数值是在 -360deg 360deg 之间,可以是百分数,如果两个值(抛弃 deg 100%)相同,计算出来的颜色也会一样;

    b. 如果超过360deg-360deg,则会继续顺时针或逆时针旋转;

     

    lighten($color,$amount):通过改变颜色的亮度值,让颜色变亮,创建一个新的颜色;

    darken($color,$amount):通过改变颜色的亮度值,让颜色变暗,创建一个新的颜色;

    a. 在基础的亮度值相加减新亮度值,可以是 0~1 之间,不过常用的一般都在  3%~20% 之间;

    b. 当颜色的亮度值接近或大于 100%,颜色会变成白色;反之颜色的亮度值接近或小于 0 时,颜色会变成黑色

     

    saturate($color,$amount):通过改变颜色的饱和度值,让颜色更饱和,从而创建一个新的颜色

    ⑩desaturate($color,$amount):通过改变颜色的饱和度值,让颜色更少的饱和,从而创建出一个新的颜色;

    a. 在基础的饱和度值相加减新饱和度值,可以是 0~1 之间,不过常用的一般都在  3%~20% 之间;

    b. 当颜色的饱和度值大于 100%,按100%计算;反之颜色的饱和度值小于 0 时,按0%计算;

     

    ⑩① grayscale($color):将一个颜色变成灰色,即饱和度值为0,相当于desaturate($color,100%);

    ⑩② complement($color):返回一个补充色,相当于adjust-hue($color,180deg);

    ⑩③ invert($color):返回一个反相色,红、绿、蓝色值倒过来,而透明度不变。

     

    1. 3. Opacity函数(控制整个元素的透明度)

    alpha($color)  /opacity($color):获取颜色透明度值,默认值为1

    rgba($color,  $alpha):改变颜色的透明度值;

     

    opacify($color,  $amount) / fade-in($color, $amount):使颜色更不透明;

    ④ transparentize($color, $amount) / fade-out($color, $amount):使颜色更加透明。

    a. 在基础值上相加减,其取值范围主要是在 0~1 之间

    b. 当透明度值增加到大于 1 时,会以 1 计算,表示颜色不具有任何透明度

    c.   当计算出来的结果小于 0 时会以 0 计算,表示全透明。

     

      九、自定义函数

      1. 1. 如自定义自动获取颜色值的函数,如没有对应值则会警告

      @function colors($color){

          @if not  map-has-key($social-colors,$color){

              @warn "No  color found for `#{$color}` in $social-colors map. Property omitted.";

          }

          @return  map-get($social-colors,$color);

      }

       

       

      十、指令——@规则

      1. 1. @import:能够引入 SCSS Sass 文件。 所有引入的 SCSS Sass 文件都会被合并并输出一个单一的 CSS 文件,如:

      @import "rounded-corners", "text-shadow";

      Sass 会在当前目录下寻找其他 Sass 文件, 如果是 RackRails Merb 环境中则是 Sass 文件目录;

       

      @import 根据文件名引入。 默认情况下,它会寻找 Sass 文件并直接引入;

      在少数几种情况下,它会被编译成  CSS 的 @import 规则:

      如果文件的扩展名是  .css。

      如果文件名以  http:// 开头。

      如果文件名是  url()。

      如果 @import 包含了任何媒体查询(media queries)。

      如果上述情况都没有出现,并且扩展名是 .scss .sass 该名称的 Sass SCSS 文件就会被引入。 如果没有扩展名, Sass 将试着找出具有 .scss   .sass 扩展名的同名文件并将其引入;

       

      不希望被编译为一个 CSS 文件,可以在文件名前面加一个下划线,就能避免被编译,引入时不用加_线,如:@import "colors";//不用加下划线

      但在同一个目录不能同时存在带下划线和不带下划线的同名文件。 例如, _colors.scss 不能与 colors.scss 并存;

       

      嵌套:一般在顶层文件使用 @import引用,也可以在元素内部引用,相当于混合宏那样的代码块;

       

      1. 2. @media:如css的一样,但可以嵌套,置于元素或@media的内部,可以只作用于该元素或该@media,也可以配合插值#{ }来定义屏幕情况,如:

      $media:  screen;

      $feature:  -webkit-min-device-pixel-ratio;

      $value:  1.5;

      @media  #{$media} and ($feature: $value) {

        .sidebar {

          width: 500px;

        }

      }

       

      1. 3. @extend:用来扩展选择器或占位符,相当于继承,可以继承多个任何选择器,如:

      .seriousError  {

        @extend .error;

        @extend .attention;

        border-width: 3px;

      }

      或者结合占位符来代替子选择器:

      #context a%extreme { color: blue; }

      .notice { @extend %extreme; }

      ==》#context a.notice { color: blue; }

       

      1. 4. @at-root:跳出根元素,即将嵌套的子元素编译时删除前面的父元素,变为只有一个类元素,如:

       .c {

            color: yellow;

            @at-root .d {

              color: green;

            }

          }

      编译后:

      .d { color: green; }

       

      1. 5. @debug:用来给排错分类,Sass 代码在编译出错时,在命令终端会输出你设置的提示 Bug,如:

      @debug 10em + 12em;

      编译后:

      Line 1 DEBUG: 22em

      1. 6. @warn:如@debug一样,编译出错时,编译出以设置好的文本,多用于条件函数,如:

      @warn  "Assuming #{$x} to be in pixels";

      1. 7. @error:和 @warn@debug 功能一样,都是出错提示,主要是用于不同的错误情况分别设置不同的文本,如:

      @error "你需要将#{$x}值设置在10以内的数";



返回列表 返回列表
评论

    分享到