綱要
本週開始我們正式進入了用程式邏輯來撰寫樣式的篇章,要做到高效率切版就必須建立起複用性高、且容易擴充的共用組件,而在這之後的課程中也會陸續帶領同學們建立自己的 Sass Library。
這周我們就先來看看如何利用程式邏輯幫助建構樣式吧!
語法: @for $var from Num1 through/to Num2
$var
可以自定義變數,每次回傳數字類型的結果。
through
包含Num2
在內的範圍
to
不包含Num2
在內,例如1 to 24
只會回傳到23為止
flex示例
padding 內留白的示例
語法: @each $var in Array
$var
可以自定義變數,每次回傳Array
對應的值。
Array
陣列,可以直接在in
的後面接'icon_1', 'icon_2'...
或者直接另外定義變數存放:
@each
會自動以Array中有幾個值,每次由左至右回傳對應位置的值
圖片路徑示例: 不同圖檔名稱的分配
圖片路徑示例: 加上不同裝置版本路徑的分類
如果你的圖檔包需要拆分不同裝置使用的路徑,@each
裡面還可以再有一層@each
做巢狀結構
以下是@each高級用法,我們可以在這定義類似JSON MAP的組件來模組化分配的內容。
結構會稍微有點複雜,但各位同學可以斟酌參考這個例子。
@each map-get()做按鈕樣式的例子
Sass自從更新了3.3ver後多了組件定義取值的方法,我們先建立一個樣式組件:
調用時的語法稍有改變:@each $name, $value in $config
進階的用法看起來稍微有點複雜,但說穿了只是把對應的名稱和值配出去給目標class而已。
語法: @if $var == (>, <, >=, <=, !=) value (and, or)(value2)
==
等於
>
大於
>=
大於或等於
<
小於
<=
小於或等於
!=
不等於
and
以及
or
或者
$var
為自定義變數,判別是否符合Value
當有其他條件時,也可使用@else
或@else if
分別表示 2 個以上條件。
但需要注意@else if
會編譯出第一個符合value
的結果,不會把所有符合條件的樣式做編譯。
而@if
後頭又接了@if
則會把符合的值一併編譯,造成同樣的屬性會出現兩個以上不同的值。
舉個例子:
@else if
看起來相當的正常,但如果後面接的是@if
呢?
看得出來$i = 2
時color
被編譯了兩次結果對吧?
而瀏覽器會以最後一個結果為主,這就可能造成不是我們要的樣式覆蓋了正確的樣式,也會讓編譯資源佔據不少垃圾影響效能。
根據不同版本提供不同字型的例子:
假設現在我們有一包字體對照檔
語法: @function $var(args){ @return }
$var
為自定義變數,後綴加上一個以上的參數args
,通常作為計算用途。
計算padding的例子
回家作業: RWD手機網頁排版
作業不要忘了下週 2/29 在課堂上繳交喔!每週都讓自己變強是最有成就感的事情!
從本週開始,大家應該都可以感覺得出來使用程式邏輯管理CSS是什麼樣的感受。
一直以來寫程式最容易上手的原則就是 Write less, do more.
等到累積足夠的經驗後能處理更多稍稍複雜的需求,回過神來發現自己其實已經走了很長一段路。
Scss
flexbox
data-attribute