sass(scss) less stylus使用区别

sass(scss) 、less、 stylus等都是css预处理器

sass:是一种动态样式语言,比css多出了很多功能(如变量,计算,混入,颜色处理,函数,继承, 嵌套等),更易阅读,扩展名.sass

   需要严格的遵循缩进的语法规则,不带{}和分号;

    h1

      color:red;

scss:是sass语法进行改良后的语法,兼容原来的语法,只是将原来的缩进排版方式改成了我们熟悉的{},扩展名 .scss

    h1{

      color:red

    }

less:Less也是一种动态语言,受sass影响很大,对css赋予了动态语言的特性,如变量,计算,继承,函数等。Less既可以在客户端运行(支持IE6+),也可以在服务端运行(借助nodejs)

  h1{

    color:red

  }

stylus:主要是给node项目进行css预处理支持,人气不如前两个。扩展名是.styl

    同时支持缩进和css常规书写方式,如下两种方式都是可以的

    h1

      color:red

    h1{

      color:red

    }

 

变量:sass(scss),less,stylus等让人们收益的一个重要特性就是变量的引入,我们可以把经常使用的css属性值,定义成一个变量,然后通过变量名来引用他们。

  sass(scss) 变量必须以$开头,变量和值之间用:隔开,如:

     $color:#fff;

    h1{

      border:1px solid $color

    }

  less变量必须以@开头,已经被赋值的变量及其他常亮(如像素,颜色等)都可以参与运算。

    @color:#fff;

    h1{

      border:1px solid @color

    }

  stylus:可以以$开头或其他任何字符,但是不能以@开头。

    $color = #ddd;

    borderwidth = 1px;

    h1{

      border:borderwidth solid $color

    }

 

嵌套:

  sass(scss),stylus,less等都支持嵌套

  div {

    ul{

      li{

        ......

      }

    }

  }

 

运算符:sass,less,stylus中都支持运算+ - * / %等。

    body {

      margin: (14px/2);

      top: 50px + 100px;  //150px  不能写100% - 10px  sass stylus中不兼容 less中会计算成90%

      right: 80 * 10%;

    }

    less中,calc以下两种方式都可以:

      @width:10px;

      calc(100% - @width) 

      calc(~"100% - 10px")

    sass中,

      cacl(100%  -  #{$width})

      calc(100% - 10px)

    stylus中:

      calc(100% - 10px);

      'calc(100% - %s)' % width;

      'calc(100% - %s)' % width;

 颜色处理 : css预处理器一般都会内置一些颜色处理函数用来对颜色值进行处理,如加亮,变暗,颜色梯度等。

  sass颜色预处理函数:

    lighten($color, 10%);  // 在给定颜色基础上变量10%

    darken($color, 10%);  // 在给定颜色基础上变暗10%

    saturate($color, 10%);  // 在给定颜色基础上饱和度增加10%

    desaturate($color, 10%);  // 在给定颜色基础上饱和度降低10%

    grayscale($color);  // 将该颜色转换为对应的灰度颜色

    complement($color);   // 将该颜色旋转180°之后的颜色

    invert($color);  // 和complement类似,获取颜色旋转180°之后的颜色,但是不能改变透明度

    mix($color1, $color2, 50%);    // color1按照50%比例和color2混合

  less中颜色预处理函数

    lighten(@color, 10%);

    darken(@color, 10%);

    saturate(@color, 10%);

    desaturate(@color, 10%);

    spin(@color, 10);  // 色相值增加10

    spin(@color, -10);

    mix(@color1, @color2);

  stylus中颜色预处理函数:

    lighten(color, 10%)

    darken(color, 10%);

    saturate(color, 10%);

    desaturate(color, 10%);

导入:

  @import filepath

继承:

  当我们需要为多个元素定义相同样式的时候,可以使用继承

  .message{

    border:1px solid red;

    padding:10px;

  }

  sass中,通过@extend来实现代码组合申明,使代码更加优越整洁

    .success{

      @extend .message

      border-color:green

    }

  less中:

    .success{

      .message

      border-color:green

    }

  stylus中:

    .success{

      @extend .message

    }

 

混入:

  sass中可用mixin定义一些代码片段,且可传参数,方便日后根据需求调用,比如说处理css3的浏览器前缀:

    @mixin error($borderwidth:2px){

      border:$borderwidth solid red;

    }

    .message{

      padding:4px;

      @include error(5px);

    }

  

  less中,css的混入写法:

    .error(@borderwidth:2px){

      border:@borderwidth solid red;

    }

    .message{

      padding:4px;

      .error(5px);

    }

  

  stylus中,写法如下:

    error(borderwidth=2px){

      border:borderwidth solid red;

    }

    .message{

      padding:4px;

      error(5px)

    }

 高级语法:

1)条件语句

  scss中 @if   @if...@else if.....@else...

    @mixin message($type:''){

      @if $type==info{

        color:green

      } @else if $type==warning{

        color:yellow

      } @else{

        color:red

      }

    }

    .error{

      @include message(error)

    }

    .info{

      @include message(info)

    }

  less中,使用when实现条件语句

    .mixin(@type) when(@type=error){

      color:red

    }

    .mixin(@type) when(@type=warning){

      color:yellow

    }

     .error{

      .mixin(error)

    }

    .warning{

      .mixin(warning)

    }

   stylus中,和js语法很相似 直接使用if...else if....else

    error(type=''){

      if type==error{

        color:red;

      } else if type==warning{

        color:yellow;

      }else{

        color:green;

      }

    }

    .error{

      error(error)

    }

    .warning{

      error(warning)

    }

文件引用:

  1)vue中导入外部样式文件,写法都差不多

    <style lang="scss">
      @import "./src/css/style.scss"
    </style>
 
    <style lang="less">
        @import "./src/css/style.less";
    </style>
 
    <style lang="stylus">
        @import "./src/css/style.styl";
    </style>
  2)样式文件中引入别的样式文件:
    scss中使用@use "文件名"
    // base.scss
    style.scss中引入base.scss
    @use "base"

区别:

  1)编译环境不一样:

    sass需要Ruby服务,是在服务端支持的

    Less需要引入less.js来处理Less代码输出css到浏览器,也可以在开发环节使用less,编译成css,直接放到项目中。

    stylus需要安装node,然后安装最新的stylus包即可。

  2)变量符号不一样:

    less是@, scss是$  stylus中的变量没有任何限制,可以$开头,结尾的;可有可无,但变量名和变量值之间的=是需要的。stylus变量不要使用@符号开头。

    变量的调用方法是完全相同的。

  3)变量的作用域不一样

    sass中,变量分为局部作用域(嵌套规则内定义的变量)和全局作用域(不在嵌套规则内定义的变量)

    $width:3px;  // 全局作用域

    .message{

      $width:2px; // 局部作用域

      border:$width solid red;

    }

    

    

 

    

posted @ 2020-07-15 11:55  陌上花开缓缓归!  阅读(3155)  评论(0编辑  收藏  举报
Top ↑