最好用的css輔助工具——SASS&LESS


 

前言

  首先,小編給大家解釋一下什么是SCSS和LESS,Sass 是一款強化 CSS 的輔助工具,它在 CSS 語法的基礎上增加了變量 (variables)、嵌套 (nested rules)、混合 (mixins)、導入 (inline imports) 等高級功能,這些拓展令 CSS 更加強大與優雅。使用 Sass 以及 Sass 的樣式庫(如 Compasss)有助於更好地組織管理樣式文件,以及更高效地開發項目。

同樣,Less 也是一門 CSS 預處理語言,它擴充了 CSS 語言,增加了諸如變量、混合(mixin)、函數等功能,讓 CSS 更易維護、方便制作主題、擴充。

  我相信,在大家的心中會與這么一個疑問,css真的是屬於我們程序猿的語言嗎?因為它不需要邏輯,只需要像寫作文一樣就可以將一個靜態頁面給“寫”出來。而且,在平時的css編譯中,我想大家最在意的就是樣式的權重吧。簡單的樣式還好,復雜樣式那從根目錄開始的辣末長的選擇器真心讓人不忍直視。所以,為了照顧我們程序猿那么懶得生物,大神們編譯了SCSS和LESS。他們最大的優勢就是可以將css進行類似於邏輯編譯。

 

一、最常用的輔助工具——SCSS

雖然SASS和LESS同樣為css輔助工具,但是大部分都比較喜歡使用SASS,想要知道原因,讓小編給你解釋!

 

1.1SCSS基本語法

 1、scss中的變量
  聲明變量:$變量名:變量值;

 而且,在SCSS中,允許將變量嵌套在字符串中,但是變量必須使用   ${} 包裹

1 $width :100px;
2 $position:left;
3 #div1{
4     width: $width;
5     height: $width/10;
6     background-color: red;
7     border-#{$position}:10px solid yellow;
8 }

看到聲明變量的$符,是不是覺得很熟悉?沒錯!jQuery中的獲取節點使用的也是$。所以在大部分的網頁編譯中,大部分都使用scss,便是為了編譯時更舒服。不會有使用兩種語言的感覺。

  2、scss中的運算,會將單位進行運算,使用時需注意最終的單位是否正確。
  eg:10px * 10px =100 px*px;
 
  3、scss中的嵌套:選擇器嵌套  屬性嵌套  偽類嵌套

在scss的使用中,我們通常把選擇器嵌套和偽類嵌套一起使用。因為這會極大地節省scss的代碼量;

  ①選擇器嵌套 ul{li{}}

  嵌套默認表示后代選擇器,如果需要子代選擇器,可以在選擇器前加>;可以在選擇器的{}中,使用&表示上一層的選擇器。

  ②偽類嵌套: li{&:hover{}}
  在選擇器的{}中,使用&配合偽類事件,可以表示當前選擇器的偽類。
 

 1 section{
 2   
 3     background-color: #CCC;
 4     p{color: red;}
 5     ul{
 6         padding: 0px;
 7         li{
 8             list-style: none;
 9             &:hover{
10                 background-color:red;
11             }
12             font:{
13                 size:16px;
14                 weight:bold;
15                 family:"微軟雅黑";
16                 style:"italic";
17             }
18         }
19         
20     }
21 }

 


 
  ③ 屬性嵌套: font:{size:18px;}
   對於屬性名有-分割為多段的屬性,可以使用屬性嵌套,屬性名的前半部分必須緊跟一個:才能用{}包裹屬性的后半部分。

1  font:{
2      size:16px;
3      weight:bold;
4       family:"微軟雅黑";
5       style:"italic";
6  }

屬性嵌套類似於聲明一的對象;對象名為屬性名-以前的名字;對象里面的鍵名為-以后的屬性名;值為想要設置的值;

4、注釋

//注釋一:編譯時不會被編譯到css文件中
/*
 注釋二:在非compressed壓縮模式下,會被編譯到css文件中。
 * */
/*!
 注釋三:重要注釋。在各種壓縮模式下,都會被編譯到css文件中                                                    
 * */

1.2混合宏、繼承、占位符


  1、混合宏:使用@mixin聲明混合宏,在其他選擇器中使用@include調用混合宏。

混合宏有三種方式;
  第一種方式:無參數;
  @mixin hunhe{}    .class{@include hunhe;}
  

1 @mixin hunhe(){
2     color: $color;
3 }
4 .class1{
5     @include hunhe;
6     background-color: blue;
7 }

 

第二種方式:有參數無默認值;
  @mixin hunhe(@param){}    .class{@include hunhe(value);}
  

1 @mixin hunhe($color){
2     color: $color;
3 }
4 .class2{
5     @include hunhe(green);
6     background-color: yellow;
7 }
8 

 

第三種:有參數有默認值;
  @mixin hunhe(@param:value){}    .class{@include hunhe();}
 

1 @mixin hunhe($color:red){
2     color: $color;
3 }
4 
5 .class3{
6     @include hunhe;
7     background-color: blue;
8 }

 

優缺點:
優點:①可以傳參  ②不會產生同名的class
缺點:調用時,會把混合宏中所有的代碼copy到選擇器中,產生大量重復代碼
2、繼承:聲明一個普通class,在其他選擇器中使用@extend繼承這個class;
  .class{ }               .class{ @extend.class1;}

1 //繼承
2 .class1{
3     color: red;
4 }
5 .class{
6     @extend.class1;
7     background-color: yellow;
8 }

 

優缺點:
優點:將相同代碼,提取並集選擇器,減少冗余代碼;
缺點:①不能傳參;②會產生出一個多余的class;
 3、占位符:使用%聲明占位符,在其他選擇器中使用@extend 繼承占位符;
   %class1{}             .class1{@extend %class1;}

 1 //占位符
 2 %class1{
 3     color: red;
 4 }
 5 .class4{
 6     @extend %class1;
 7     background-color: yellow;
 8 }
 9 .class5{
10     @extend %class1;
11     background-color: blue;
12 }

 

優缺點:
優點:①將相同代碼,提取到並集選擇器,減少冗余代碼;②不會生出一個多余的代碼
缺點:不能傳參
  
  

1.3條件語句、循環、函數

scss作為css的輔助工具,賦予了css類似於js的一些功能,例如循環、if條件語句、函數等;其中,一定要記得@符號的使用!!!

1、if條件結構:
      條件結構需要卸載選擇器里面,條件結構的大括號直接包裹樣式屬性。
       @if 條件{}
       @else{}
  

 1 //scss中的條件語句
 2 
 3 .class6{
 4     width: 100px;
 5     height: 100px;
 6     @if 1>2{
 7         background-color: yellow;
 8     }@else{
 9         background-color: green;
10     }
11 }

 


2、for循環:有着兩種方式,類似於開區間和閉區間;
       @for $i from 1 to 10{}  //不包含10
       @for $i from 1 through 10{}  //包含10
   

1 //for循環
2 @for $i from 1 through 10{
3     .border-#{$i}{
4         border:#{$i}px solid yellow;
5     }
6 }

 


3、while循環;
      先使用$符定義一個變量,然后進行條件判斷,在{}中進行循環;
  

1 //while循環
2 $i:0;
3 @while $i<10{
4     .while-#{$i}{
5         border:#{$i}px solid red;
6     }
7     $i:$i+1;
8 }

 


4、each 循環遍歷
      @each $item in a,b,c,d{
       //$item  表示a,b,c,d的每一項
   }

 

1 //each循環遍歷
2 $i:0;
3 @each $item in c1,c2,c3,c4{
4     $i:$i+1;
5     .#{$item}{
6         border:#{$i}px solid red;
7     }
8 }

5、函數

scss也可以想js一樣進行函數的調用;

1 @function func($num){
2     @return $num * 2;
3 }
4 
5 .funcTest{
6     width: func(10px);
7 }

 

二、LESS

less作為和scss同等地位的css輔助工具,在一些方面有着相同點,另一方面也有這他的優點;

2.1less基本語法

1、聲明變量:@變量名:變量值
     使用變量:@變量名
 相對於scss,less變量的聲明使用@符號;並且,變量一般使用在多次頻繁出現的值,后期需要統一修改的值,牽扯到數值運算的值,推薦使用變量
  
  >>>less中的變量類型
  在css中出現的屬性值,在less中都可以用作變量名
  ①數值類: 不帶單位的 123    帶單位的  1px
  ②字符串:帶引號的 "hahahaah"    不帶引號的  red   #ff0000
  ③顏色類:  red  #ff0000  RGB(255,255,0)
  ④值列表類型: 多個值用逗號或空格分隔  10px solid  red
  

1 @color :#ff0000;
2 @length:100px;
3 #div{
4     width: @length;
5     height:@length*2;
6     background-color: @color;
7 }

 


  2、混合(Mixins),我們也親切的叫做“米心”;相當scss的混合宏,同樣有着三種方式:
  ①無參數混合;實際上就是一個普通的class選擇器,會被編譯到css文件中;
       聲明: .class{}
       調用:在選擇器中,使用.class;直接調用
  

1 //無參數混合
2 .borderRadius{
3     border-radius: 10px;
4     -webkit-border-radius: 10px;
5     -moz-border-radius: 10px;
6 }

 


 ②有參無默認值混合:
       聲明:.class(@param){}
       調用:.class(paramValue);
  

 1 //有參無默認值混合
 2 .borderRadius1(@radius){
 3     border-radius: @radius;
 4     -webkit-border-radius: @radius;
 5     -moz-border-radius: @radius;
 6 }
 7 .class{
 8     width: 10px;
 9     height: 10px;
10     .borderRadius1(10px);
11 }

 


  ③有參有默認值混合:
       聲明:.class(@param:10px){}
       調用:.class(paramValue); 或 .class();
 

 1 //有參有默認值混合
 2 
 3 .borderRadius2(@radius:10px){
 4     border-radius: @radius;
 5     -webkit-border-radius: @radius;
 6     -moz-border-radius: @radius;
 7 }
 8 
 9 .class{
10     width: 10px;
11     height: 10px;
12     .borderRadius2();
13 }

 


  >>>如果聲明時沒有給參數賦默認值,則調用時必須賦值,否則報錯;
     有參混合,在編譯時,不會出現在css文件中;

 

2.2匹配、@argument、嵌套

 1、LeSS的匹配默認
       ①聲明,類似於switch語句;
       @pipei(條件一,參數){}    @pipei(條件二,參數){}   @pipei(@_,參數){}
       ②調用:
       @pipei(條件的值,參數的值){}
       ③匹配規則:
       根據調用時輸入的條件值,去尋找與之匹配的混合執行;
  

 1 /*匹配模式*/
 2 .pipei(lefts,@width:10px){
 3     margin-left: @width;
 4 }
 5 .pipei(rights,@width:10px){
 6     margin-right: @width;
 7 }
 8 .pipei(tops,@width:10px){
 9     margin-top: @width;
10 }
11 .pipei(bottoms,@width:10px){
12     margin-bottom: @width;
13 }
14 .pipei(@_,@width:10px){
15    padding:10px;
16 }
17 @position:leftssssss;
18 //當上述條件都不符合時執行,相當於default;
19 .class1{
20     .pipei(@position,20px);
21 }

 


 2、@arguments  特殊變量:
       在混合中,@arguments表示混合傳入的所有參數。@arguments中的多個參數,用空格分隔。
      

1 /*@arguments*/
2 .argu(@width,@style,@color){
3     //border:@width @style @color;
4     border:@arguments;
5 }
6 .class2{
7     .argu(10px,solid,red);
8 }

 

        
               
 
4、Less嵌套
        less中允許css選擇器按照HTML的結構進行嵌套。  相當於scss的選擇器嵌套與偽類嵌套的組合;
       

 1 /*less嵌套*/
 2 
 3 section{
 4     width: 800px;
 5     height: 200px;
 6     background-color: #cccbbb;
 7     >p{
 8         color: blueviolet;
 9         font-size: 20px;
10         font-weight: bold;
11     }
12     
13     ul{
14         padding: 0px;
15         list-style: none;
16         li{
17             display: block;
18             float: left;
19             width: 200px;
20             height: 50px;
21             background-color: yellow;
22             text-align: center;
23             &:hover{
24                 background-color: cornflowerblue;
25             }
26         }
27     }
28 }

 

有兩點值得注意;
        ①less的嵌套,默認是后代選擇器。如果需要自帶選擇器,需要在前面加>;
        ②&符號,表示這個&所在的上一層表達器;比如上述嵌套:&:hover相當於section ul:hover

 

三、less&scss的使用

作為css的輔助工具,需要其操作環境最終還要轉為css才能實現網頁的布局;使用less直接創建Less文件就可以了嗎?不,我們通常使用Koala進行less或scss到css的轉換;

將less或scss的文件夾拖進koala的主頁中,就可以隨心所欲的編譯了!!

 

編者按

對於一些簡單的 項目,使用不使用scss和less並無區別,可在一些難度較大、比較復雜的項目上,less或scss就很有必要了。既節省我們的時間,有提高效率,一舉多得!!!


免責聲明!

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



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