iT邦幫忙

第 12 屆 iThome 鐵人賽

DAY 4
0

前端開發時,常會遇到重複寫著相似的程式。
相似的程式有共同的特性。
因為共同特性而重複出現,這時就會需要使用 mixin。
https://ithelp.ithome.com.tw/upload/images/20200912/20119051DXCtQJ36zw.png

此圖是之前專案的截圖,簡單來說這3個區塊都有類似的味道存在,因此試著用 mixin 來開發是最省事的。

說這麼多,那 mixin 要怎麼寫?

首先,分為設計使用兩個階段,
設計階段使用 @mixin 來創造一個 mixin。

@mixin colorChange {
  color: #aabb00;
}

就像寫 function 一樣,後面放上這個 mixin 的名字,接著就如同 CSS 般用大括號將你要重複的 CSS 樣式放在裡面。

使用階段就是用 @include 來放入你使用的地方。而這是可以重複使用的,你想在100個類似的區塊中使用相同架構就呼叫100次吧!

大家還記得第一天的範例嘛? 忘了也沒差,我在下面再貼一次。
這次我要將"測試中~~~"換成草綠色。
@include 進來的 mixin,裡面的 CSS 會直接複製一份到你丟入的 class 中。

HTML

<div class="tsDiv">
    <p class="tsP">測試中~~~</p>
</div>

SCSS

.tsDiv {
  > .tsP {
    @include colorChange;
    // color: red;
    &:hover {
      color: blue;
    }
  }
}

因為是複製一份,所以上下兩段其實是相同的意思。

.tsDiv {
  > .tsP {
    color: #aabb00;
    // color: red;
    &:hover {
      color: blue;
    }
  }
}

mixin 的更進階一點的寫法?

上面的範例沒有使用參數,所以無法展現 mixin 強大的地方。

開頭說過 mixin 用於處理重複的樣式,

但對於大部分重複,小部分有所差異的樣式也是能迎刃而解。

上面那張書店活動的圖,雖然結構一樣,但顏色還是有差,

我們將 HTML 結構改成這樣

<div class="tsDiv">
    <p class="tsP">測試中~~~</p>
    <span class="tsSpan">我是小區塊</span>
    <p class="tsP2">我是第二個 P!</p>
</div>

設計一個新的 mixin,裡面依舊放著你要重複的 CSS,只是這次多了幾個可以不一樣的小地方。

@mixin colorChange($p1Color, $spanColor, $p2Color) {
  > .tsP {
    color: $p1Color;
  }
  > .tsSpan {
    color: $spanColor;
  }
  > .tsP2 {
    color: $p2Color;
  }
}

我們在 mixin 名字後面加上參數,用法與 JavaScript 的 function 類似,只是在命名參數時需要使用 $ 符號作為開頭。

將命名好的參數丟到需要微調的樣式中,這裡我要連續改三個顏色,所以分別丟到各自的 color 中。

使用階段一樣用 @include

.tsDiv {
  @include colorChange(#aabb00, red, #00bbaa)
}

看起來有點像在呼叫這個 mixin,然後放上想要呈現的樣式。

有學過 JavaScript 的應該覺得不陌生,

給沒學過的說明一下參數的應用,如上面的程式碼,我用 @include 進來的 colorChange 這個 mixin,括號內的 ##aabb00red#00bbaa 分別對應 $p1Color$spanColor$p2Color。這些自己設定的值就會被傳入該 mixin 中,因此只要修改一下值後,對應的參數所呈現的值也會隨之修改。

下圖是參數應用後渲染到畫面上的樣子。
https://ithelp.ithome.com.tw/upload/images/20200912/20119051796o6OJ8pV.png

看到這裡大家可能又會想,又是改顏色= =
不過因為改顏色最直接也最簡單,就索性用這個範例喽~(我就懶
https://ithelp.ithome.com.tw/upload/images/20200912/20119051PQV6RxIUI8.jpg


喔對,設計階段和使用階段是筆者自己在講的,去外面講八成大家都聽不懂XD
算是一個小記法吧~ 總之就像讀書一樣,自己都有自己的讀法~
明天開始就是 CSS 的設計模式喽,雖然不是 SCSS 專屬,但了解這些東西有助於未來維護網頁用,不至於到時完全看不懂自己的架構到底是啥~~ 那今天的分享就到這邊,盡請期待明天喔~~
打完才想到還沒吃午餐...
https://ithelp.ithome.com.tw/upload/images/20200912/20119051gwsmLNWBSc.jpg


上一篇
Day3. SCSS 簡單變數介紹
下一篇
Day5. CSS 設計模式(一) - SMACSS
系列文
30天前端網頁技術超入門介紹30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言