Sass 混合宏、繼承、占位符

1. 混合宏

@mixin mt($var){
  margin-top: $var;  
}

.block {
  @include mt(5px);

  span {
    display:block;
    @include mt(5px);
  }
}

.header {
  color: orange;
  @include mt(5px);

  span{
    display:block;
    @include mt(5px);
  }
}

總結:編譯出來的 CSS 清晰告訴了大家,他不會自動合并相同的樣式代碼,如果在樣式文件中調(diào)用同一個混合宏,會產(chǎn)生多個對應的樣式代碼,造成代碼的冗余,這也是 CSSer 無法忍受的一件事情。不過他并不是一無事處,他可以傳參數(shù)。

個人建議:如果你的代碼塊中涉及到變量,建議使用混合宏來創(chuàng)建相同的代碼塊。

2. 繼承

.mt{
  margin-top: 5px;  
}

.block {
  @extend .mt;

  span {
    display:block;
    @extend .mt;
  }
}

.header {
  color: orange;
  @extend .mt;

  span{
    display:block;
    @extend .mt;
  }
}

總結:使用繼承后,編譯出來的 CSS 會將使用繼承的代碼塊合并到一起,通過組合選擇器的方式向大家展現(xiàn),比如 .mt, .block, .block span, .header, .header span。這樣編譯出來的代碼相對于混合宏來說要干凈的多,也是 CSSer 期望看到。但是他不能傳變量參數(shù)。

個人建議:如果你的代碼塊不需要專任何變量參數(shù),而且有一個基類已在文件中存在,那么建議使用 Sass 的繼承。

3. 占位符

%mt{
  margin-top: 5px;  
}

.block {
  @extend %mt;

  span {
    display:block;
    @extend %mt;
  }
}

.header {
  color: orange;
  @extend %mt;

  span{
    display:block;
    @extend %mt;
  }
}

總結:編譯出來的 CSS 代碼和使用繼承基本上是相同,只是不會在代碼中生成占位符 mt 的選擇器。那么占位符和繼承的主要區(qū)別的,“占位符是獨立定義,不調(diào)用的時候是不會在 CSS 中產(chǎn)生任何代碼;繼承是首先有一個基類存在,不管調(diào)用與不調(diào)用,基類的樣式都將會出現(xiàn)在編譯出來的 CSS 代碼中?!?/p>


image.png

補充:本文非原創(chuàng),只是記錄下來方便自己查閱。

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

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

  • 聲明變量 定義變量的語法: 在有些編程語言中(如,JavaScript)聲明變量都是使用關鍵詞“var”開頭,但是...
    Junting閱讀 1,533評論 0 6
  • 一、Sass的語法格式及編譯調(diào)試 1. Sass和scss的區(qū)別 本質(zhì)上來說是同一個東西,只是語法上有細微的差異:...
    沒汁帥閱讀 1,485評論 0 5
  • 前言 什么是CSS預處理器 定義:CSS預處理器定義了一種新的語言,其基本思想是,用一種專門的編程語言,為CSS增...
    SA_Arthur閱讀 3,209評論 0 18
  • 2015年10月20日 1.嵌套 Sass 中還提供了選擇器嵌套功能,但這也并不意味著你在 Sass 中的嵌套是無...
    a0d560da7818閱讀 695評論 0 1
  • 1、SCSS 是 Sass 的新語法格式,從外形上來判斷他和 CSS 長得幾乎是一模一樣,代碼都包裹在一對大括號里...
    夜幕小草閱讀 1,812評論 2 10

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