| 前言 |
首先,小編給大家解釋一下什么是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就很有必要了。既節省我們的時間,有提高效率,一舉多得!!!
