SASS組件開發

lo0853 7年前發布 | 11K 次閱讀 前端技術 sass

SASS組件開發

SASS預處理器,增加了css所沒有的編程能力,帶來了前端開發的效率提高,以及擴展了css的編寫技巧。

組件開發

設計一個表單提示層(包括成功success,警告warning,錯誤等狀態error)組件,css需要定義基本樣式字體(font-)、外內邊距(padding,margin)、顯示方式(display)、邊框(border)以及其他相關的內容,再為單獨的狀態定義需要的樣式。

css組件開發

先定義基本樣式,再對每一個狀態定義一套樣式

.tips { /* 基本顏色設置 */
  padding: 15px;
  margin-bottom: 20px;
  border-radius: 4px;
}
 
//成功狀態
.tips-success{
    background-color: #47a447;
    color: #fff;
}
 
//警告狀態
.tips-warning{
    background-color: #ed9c28;
    color: #fff;
}
 
//錯誤狀態
.tips-error{
    background-color: #ed9c28;
    color: #fff;
}
 

每一種狀態文字和邊框顏色需要單獨設置,稍顯繁瑣。后期擴展其它狀態,如信息info、危險dange等,就是工作成本的提高。幸好SASS提供了編程能力,為我們解決這種擔憂,提高了工作效率。

sass組件開發

組件是對數據和方法的簡單封裝。

變量默認值!default

先來看一段js的變量聲明代碼

var a = 1;
console.log(a);//1
 

再看一段sass代碼,是不是很簡單。

$color:blue;
$color:red; !default;//變量申明帶有!default,表示當前值為缺省值
p{
    color:$color;//輸出blue
}
 

聲明 !default ,在這里輸出blue,很有趣吧。簡單說下它的作用:假設變量申明帶有!default,表示此變量為默認值,可被全局的普通聲明覆蓋。這點還不能體現它的偉大作用。

<p>@mixin應用</p>
  • 先聲明@mixin
  • 在需要的地方使用@include來聲明調用mixins。
    /* mixin */
    @mixintips($background,$text-color,$tipsStylePadding) {
        background-color: $background;
        color: $text-color;
        padding: $tipsStylePadding;
        margin-bottom: 20px;
        border-radius: 4px;
    }
     
    

調用功能模塊,當前的組件可擴展出多個組件樣式。

//成功狀態
.tips-success { 
  @includetips($background,$text-color,$tipsStylePadding);
}
 
//警告狀態
.tips-warning {
  @includetips($background,$text-color,$tipsStylePadding);
}
 
//錯誤狀態
.tips-error {
  @includetips($background,$text-color,$tipsStylePadding);
}
 
//信息狀態(再擴展一個)
.tips-info {
  @includetips($background,$text-color);,$tipsStylePadding
}
 
<p>@include在需要的地方隨意調用,不夠規范,后期難以維護。</p>

組件實例

  • 現在我們新建個scss文件,這里暫且叫做_tips.scss。

    /* 變量
    ---------------------------------*/
    $background:        #47a447 !default;
    $text-color:        #fff !default;
    $tipsStylePadding:  15px !default;
    /* mixin
    ---------------------------------*/
    @mixintips($background,$text-color,$tipsStylePadding) {
        background-color: $background;
        color: $text-color;
        padding: $tipsStylePadding;
        margin-bottom: 20px;
        border-radius: 4px;
    }
    /*樣式
    ---------------------------------*/
    //成功狀態
    .tips-success { 
      @includetips($background,$text-color,$tipsStylePadding);
    }
     
    //警告狀態
    .tips-warning {
      @includetips($background,$text-color,$tipsStylePadding);
    }
     
    //錯誤狀態
    .tips-error {
      @includetips($background,$text-color,$tipsStylePadding);
    }
     
    //信息狀態(再擴展一個)
    .tips-info {
      @includetips($background,$text-color,$tipsStylePadding);
    }
     
    

接下來我們要在所需要的文件,調用這個文件,這個組件就開發完了

//導入_tpis.scss
@import '_tips';    
 

問題?

  • 組件是重復可調用的,也是對數據和方法的簡單封裝
  • 如果我們對默認的padding為15px不滿意,要改為5px,怎么弄

重新覆寫

重新覆寫,會產生相同的代碼,這不是我們想要的組件

//導入_tips.scss
@import '_tips';
.tips-success{
    padding:5px;
}
/*編譯后樣式
---------------------------------*/
.tips-success{ 
    background-color: #47a447;
    color: #fff;
    padding: 15px;
    margin-bottom: 20px;
    border-radius: 4px;
}
.tips-success{
    padding: 5px;
}
 

修改參數

改變@include的參數,同樣會產生相同的代碼,也不是我們想要的組件

//導入_tips.scss
@import '_tips';
.tips-success{
  @includetips($tipsStyleBorder,5px);
}
/*編譯后樣式
---------------------------------*/
.tips-success{ 
    background-color: #47a447;
    color: #fff;
    padding: 15px;
    margin-bottom: 20px;
    border-radius: 4px;
}
.tips-success{
    background-color: #47a447;
    color: #fff;
    padding: 5px;
    margin-bottom: 20px;
    border-radius: 4px;
}
 

正確解決方法

這里就需要使用 !default;特性

//申明$tpisStylePadding為5px
$tpisStylePadding:  5px;
 
//導入_tips.scss
@import '_tips';
 
/*編譯后樣式
---------------------------------*/
.tips-success {
    background-color: #47a447;
    color: #fff;
    padding: 5px;
    margin-bottom: 20px;
    border-radius: 4px;
}
 

變量設計原則

  • 所有變量為默認值,后面加有!default,以方便覆蓋;
  • 有些變量為開關變量,值只能是true或false,可以用來表示是否輸出樣式,應用于兼容及控制代碼;
  • 有些變量為復合變量,一個變量會有幾個值,以減少變量個數。

參考文檔

 

來自:http://web.jobbole.com/89742/

 

 本文由用戶 lo0853 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!