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;

    }

    

    

 

    


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM