美文网首页
2018.2.26-2018.3.4sass学习

2018.2.26-2018.3.4sass学习

作者: 咖啡浮点 | 来源:发表于2018-02-27 12:52 被阅读0次

    一.准备工作:

    1.安装(mac):
    gem install sass;
    2.sass文件的预编译:


    屏幕快照 2018-03-05 上午12.42.16.png

    二.变量

    1.变量可以在css规则块定义之外存在。当变量定义在css规则块内,那么该变量只能在此规则块内使用。

    $border-color: green;
    
    .box {
      $font-size: 20px;
      font-size: $font-size;
      height: 300px;
      width: 300px;
      border: 1px solid $border-color;
    
    }
    

    2.将局部变量转为全局变量:!global

    .scss文件:
    .scroll-list {
      $list-style: none !global;
      li {
        list-style: $list-style;
      }
    }
    .project-list {
      list-style: $list-style;
    }
    
    编译后.css文件:
    .scroll-list li {
      list-style: none; }
    
    .project-list {
      list-style: none; }
    

    三.sass文件的导入

    1.sass的@import规则在生成css文件时就把相关文件导入进来。这意味着所有相关的样式被归纳到了同一个css文件中,而无需发起额外的下载请求。另外,所有在被导入文件中定义的变量和混合器均可在导入文件中使用。
    2.使用sass的@import规则并不需要指明被导入文件的全名。例如:@import"sidebar";可以随意修改你或别人写的被导入的sass样式文件语法,在sass和scss语法之间随意切换。
    3.sass局部文件的导入
    约定sass局部文件的文件名以下划线开头。例如: _night-sky.scss
    约定的目的: sass就不会在编译时单独编译这个文件输出css。
    导入方式:

    import 'night-sky';
    

    4.默认变量值:
    作用:局部文件可以被多个不同的文件引用,但有时需要对导入的样式做一些修改,所以需要默认变量值。

    $box-width: 30px !default;
    .box {
       width: $box-width;
    }
    

    当被导入的sass文件中已经对该变量赋了值,则导入的文件中的值无效,否则为默认值。
    5.嵌套导入
    sass允许@import命令写在css规则内:

    _2.scss:
    
    .face {
      width: 20px;
      height: 40px;
    }
    
    1.scss: 
    
    .mouse {
      @import "import-sass/2";
    }
    

    结果:

    .mouse .face {
      width: 20px;
      height: 40px;
     }
    
    

    6.原生的css文件的导入:
    三种情况下会生成原生的CSS@import,但会造成浏览器解析css时的额外下载:
    (1)被导入文件的名字以.css结尾;
    (2)被导入文件的名字是一个URL地址(比如http://www.sass.hk/css/css.css),由此可用谷歌字体API提供的相应服务;
    (3)被导入文件的名字是CSS的url()值。
    在sass文件中导入css文件的方法:
    把原始的css文件改名为.scss后缀,即可直接导入了。

    四.静默注释:

    1.作用:静默注释在生出的css文件中会被抹去.
    2.样式:

    .finger {
      font-size: 12px; // 字体大小
    }
    

    五.混合器:

    sass的混合器可以实现大段样式的重用。混合器使用@mixin标识符定义。例子:

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

    1.何时使用混合器:
    对一大段代码能起一个代表性的名字
    2.混合器中的css规则:
    混合器可以使用嵌套:

    @mixin radius {
      border-radius: 10px;
      div.box-image {
        border-color: red;
        border-width: 3px;
      }
    }
    .clothes {
      color: #000;
      @include radius;
    }
    

    结果:

    .clothes {
      color: #000;
      border-radius: 10px;
    }
      .clothes div.box-image {
        border-color: red;
        border-width: 3px; 
    }
    

    3.给混合器传入参数:

    @mixin box-color ($normal,$hover,$visited) {
      background-color: $normal;
      &:hover {
        background-color:$hover;
      }
      &:visited{
        background-color: $visited;
      }
    }
    
    .food {
      @include box-color(red,yellow,green)
    }
    

    六.使用选择器继承

    1.选择器继承:

    .aside {
      border: 1px solid red;
      background-color: yellow;
    }
    .aside div{
      color: #ccc;
    }
    .aside li {
      font-size: 20px;
    }
    .footer {
      @extend .aside;
      border-width: 2px;
    }
    

    注意:任何与.aside 相关的样式都会被继承。
    结果是:

    .aside, .footer {
      border: 1px solid red;
      background-color: yellow; }
    
    .aside div, .footer div {
      color: #ccc; }
    
    .aside li, .footer li {
      font-size: 20px; }
    
    .footer {
      border-width: 2px; }
    

    六.SassScript中的数据类型

    1.SassScript 可作用于任何属性,允许属性使用变量、算数运算等额外功能。
    2.数据类型

    数字: 1, 2, 13, 10px
    字符串: 有引号字符串与无引号字符串,"foo", 'bar', baz
    颜色: blue, #04a3f9, rgba(255,0,0,0.5)
    布尔型: true, false
    空值: null
    数组 (list): 用空格或逗号作分隔符,1.5em 1em 0 2em, Helvetica, Arial, sans-serif
    maps: 相当于 JavaScript 的 object,(key1: value1, key2: value2)
    

    3.只有当插值语句传入有引号的字符串,才会被编译为无引号字符串例子:

    @mixin font-style($selector){
      .text-title #{$selector} {
        font-style: italic;
      }
    }
    .text {
      @include font-style(".first-line");
    }
    
    编译结果:
    .text .text-title .first-line {
      font-style: italic; }
    

    4.三处会将‘/’作为运算符的情况:

    • 如果值,或值的一部分,是变量或者函数的返回值
    • 如果值被圆括号包裹
    • 如果值是算数表达式的一部分
    /*除法运算*/
    .box-img {
      $width: 20px;
      width: $width/2;
      height: (500px/2);
      margin-left: 5px + 18px/2;
    }
    
    结果:
    .box-img {
      width: 10px;
      height: 250px;
      margin-left: 14px; }
    

    5.颜色运算:

    .box-bgc {
      background-color: #111 + #222;
      color: (#888/2);
      border-color: rgba(100,100,100,0.8) + rgba(50,50,50,0.8); 
    // 其中透明度是不能计算的,必须相等
    }
    
    结果:
    .box-bgc {
      background-color: #333333;
      color: #444444;
      border-color: rgba(150, 150, 150, 0.8); }
    
    透明度运算:
    
    .list-bgc {
      $color: rgba(100,100,100,0.3);
      color: opacify($color,0.5);  //加法
      background-color: transparentize($color,0.1); // 减法
    }
    
    结果:
    .list-bgc {
      color: rgba(100, 100, 100, 0.8);
      background-color: rgba(100, 100, 100, 0.2); }
    

    6.有无引号字符串顺序的区别:

    .symbol {
      font-family: "Microsoft " + YaHei;
      border-style: i + 'talic';
    }
    
    结果:
    .symbol {
      font-family: "Microsoft YaHei";
      border-style: italic; }
    

    7.字符串运算之 +:

    连接字符串:
    .mouse {
      cursor: p + ointer;
    }
    结果:
    .mouse {
      cursor: pointer; }
    

    8.插值语句 #{}:

    $name: color;
    $attr: border;
    $font-size: 22px;
    $line-height: 11px;
    .img-#{$name} {
      #{$attr}-color: red;
      font: #{$font-size}/#{$line-height}; // 使用 #{} 可以避免 Sass 运行运算表达式,直接编译 CSS。
    }
    
    结果:
    .img-color {
      border-color: red;
      font: 22px/11px; }
    

    七.控制指令:

    1.if

    p {
      @if 1 + 1 == 2 {
        color: red;
      }
      @if 2+ 3 > 5 {
        font-size: 12px;
      }
      @if null {
        border: 1px solid #ccc;
      }
    }
    
    /*if语句*/
    
    $type: opacity;
    
    li {
      @if $type == red {
        color: #000;
      } @else if($type == yellow) {
        color: red;
    
      } @else if($type == opacity) {
        color: green;
      }
    }
    
    结果:
    p {
      color: red; }
    
    /*if语句*/
    li {
      color: green; }
    

    2.for语句:

    @for $i from 1 through 3 {
      icon-#{$i} {
        width: 20px * $i;
      }
    }
    结果:
    /*for语句*/
    icon-1 {
      width: 20px; }
    
    icon-2 {
      width: 40px; }
    
    icon-3 {
      width: 60px; }
    
    @for $i from 1 to 3 {
      fly-#{$i} {
        height: 30px * 1;
      }
    }
    
    //结果:
    fly-1 {
      height: 30px; }
    
    fly-2 {
      height: 30px; }
    

    3.each语句:

    
    @each $var in dog,cat,sheep {
      .box-#{$var} {
        background-color: red;
      }
    }
    
    @each $key,$value in (header: red,body: yellow,foot: blue) {
      .fix-#{$key} {
        color: $value;
      }
    }
    
    @each $name,$color,$url in (asia,yellow,China),(africa,black,agla),(oceania,white,austrilia) {
      .earth-#{$name} {
        color: $color;
        background: url(image/#{$url}.jpg);
      }
    }
    
    //结果:
    .box-dog {
      background-color: red; }
    .box-cat {
      background-color: red; }
    .box-sheep {
      background-color: red; }
    
    .fix-header {
      color: red; }
    .fix-body {
      color: yellow; }
    .fix-foot {
      color: blue; }
    
    .earth-asia {
      color: yellow;
      background: url(image/China.jpg); }
    .earth-africa {
      color: black;
      background: url(image/agla.jpg); }
    .earth-oceania {
      color: white;
      background: url(image/austrilia.jpg); }
    

    4.while语句:

    $while-val: 6;
    @while $while-val > 2 {
      .chart-#{$while-val} {
        width: 20px * $while-val;
      }
      $while-val: $while-val - 1;
    }
    
    // 结果:
    .chart-6 {
      width: 120px; }
    
    .chart-5 {
      width: 100px; }
    
    .chart-4 {
      width: 80px; }
    
    .chart-3 {
    
    

    相关文章

      网友评论

          本文标题:2018.2.26-2018.3.4sass学习

          本文链接:https://www.haomeiwen.com/subject/kdycxftx.html