Sass語法介紹進階篇

變量的操作分為兩種:一、直接操作變量(即變量表達式);二、通過函數(shù)。

函數(shù)又分為兩種:一、跟代碼塊無關(guān)的函數(shù),多是自己的內(nèi)置函數(shù),稱functions;二、可重用的代碼塊,稱mixin,類似于C語言中的宏。

mixin又細分為兩種概念:一、使用時以賦值拷貝的方式存在的,通過@include方式調(diào)用;二、使用時以組合聲明的方式存在的,通過@extend的方式調(diào)用。

變量表達式和functions

兩者的使用范圍都較窄,歪果仁關(guān)于表達式變量的例子經(jīng)常是下面這個樣子的:

p {
  height: (500px / 2);
}

從這個例子中可以看出兩點:一、歪果仁的數(shù)學(xué)不咋地;二、變量表達式的運算可以帶單位。

Sass官網(wǎng)上列出了所有的functions,看這里 。比如hsl(),HSL是CSS3新增的顏色表示模式,HSL就是色調(diào)(Hue)、飽和度(Saturation)和亮度(Lightness)的縮寫。Sass是CSS的超集,所以當(dāng)然也支持這種模式。可以通過@functions聲明函數(shù)。

mixin:@include

定義

mixin的定義以@mixin開頭,如下:

@mixin col-6 {
  width: 50%;
  float: left;
}

也可以增加參數(shù)信息使mixin更具有可配置性,如下:

@mixin col($width) {
  width: $width;
  float: left;
}

當(dāng)然,mixin也支持默認參數(shù),如下:

@mixin col($width:50%) {
  width: $width;
  float: left;
}

使用

也許你會說,mixin代碼塊的定義是如此簡單,那么,你可能會覺得代碼塊的使用更簡單,只需要使用@include引入即可,如下:

@include col-6();
@include col(25%);

mixin:@extend

場景介紹

首先考慮一個樣式正交性的問題,設(shè)想這樣一個場景,假設(shè)你有下面兩個div:

<div class="error">今天沒有學(xué)習(xí)!!!!</div>
<div class="serious-error">這兩天都沒有學(xué)習(xí)!??!</div>

現(xiàn)在你想讓error類顯示紅色的字體,而serious-error類除了字體為紅色之外,還要有一個紅色的邊框,那么你可能會這樣設(shè)計兩個類的樣式,然后再給serious-error的div增加一個error類名。

.error {
  color: #f00;
}
.serious-error {
  border: 1px solid #f00;
}

或者這樣設(shè)計類的樣式:

.error {
  color: #f00;
}
.serious-error {
  color: #f00;
  border: 1px solid #f00;
}

顯然,這兩種做法都不太好,冗余,不好維護。

extend登場

Sass的extend屬性可以幫助我們解決這個問題,明確指定一個類去繼承另一個類的樣式。

.serious-error {
  @extend .error;
  border: 1px solid #f00;
}

編譯生成的css文件如下:

.error, .serious-error {
  color: #f00;
}
.serious-error {
  border: 1px solid #f00;
}

extend工作的原理很簡單,就是把繼承者的選擇器(.serious-error)插入到被繼承者的選擇器(.error)出現(xiàn)的地方。

繼承多個和連續(xù)繼承

繼承多個類的情況下,可以寫多個extend,每個后面跟一個類名,也可以寫一個extend,后面的類名以逗號分隔。

連續(xù)繼承也很簡單,如下,存在多個繼承和連續(xù)繼承的情況:

.error {
  color: #f00;
}
.normal {
  font-size: 15px;
}
.serious-error {
  @extend .error, .normal;
  border: 1px solid #f00;
}

.dead-error {
  @extend .serious-error;
  border-color: #000;
}

extend的兩個知識點

  1. extend不可以繼承選擇器系列

    .A .B { 
      color: #f00;
    }
    .C { 
      @extend .A .B; //錯誤的
    }
    

    但是這樣做卻是可以的,雖然你可能并不想要這樣的效果。

    .A .B { 
      color: #f00;
    }
    .C { 
      @extend .B;
    }
    .D {
      @extend .A;
    }
    

    生成的CSS代碼如下:

    .A .B, .D .B, .A .C, .D .C {
      color: #000;
    }
    
  2. 可以使用%,用來構(gòu)建只用來繼承的選擇器。

    %error {
      color: #f00;
    }
    .serious-error {
      @extend %error;
      border: 1px solid #f00;
    }
    

    error的樣式不會輸出到生成的css文件里。


文字資料來自慕課網(wǎng)課程

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容