此篇會教學如何將 Bootstrap 通用類別 utilities 自幹一個出來。
事前準備:
使用到四隻檔案:
@media
響應式。可以搭配註解看原始碼,Bootstrap 註解算寫的蠻好理解的。
粗略拆為三個部分講解
後續會大量應用到 @mixin
、@include
、@content
不熟悉的朋友請參考這篇:@mixin 建立專屬語法資料庫(蠻好理解的,最後也有附上 CodePen 範例)
取得斷點參數的 key(ex:xs、sm、md、lg)將其組合成陣列,再透過迴圈讀取出來。
@each $breakpoint in map-keys($grid-breakpoints) {
}
先撰寫外層 @media 樣式,最後會再依照 utility 參數判斷是否要寫入到斷點中。
@include media-breakpoint-up($breakpoint) {
$infix: breakpoint-infix($breakpoint, $grid-breakpoints);
}
media-breakpoint-up
來自於mixins/_breakpoints.scss
。
判斷條件:
@content:代表之後 generate-utility 生成的通用類別樣式。
@mixin media-breakpoint-up($name, $breakpoints: $grid-breakpoints) {
$min: breakpoint-min($name, $breakpoints);
@if $min {
@media (min-width: $min) {
@content;
}
} @else {
@content;
}
}
取得斷點的 point,回傳一個 point 加上
-
符號的字串(ex:-md),用於之後生成樣式時斷點字串。(ex:pd-md-1)
$infix: breakpoint-infix($breakpoint, $grid-breakpoints);
取得 _utilities.scss 設置的
$utilities: ()
map,並透過迴圈方式將其參數一一取出。
若還不暸解如何撰寫 utilities 通用類別參數,請參考官方 API 文件。
@each $key, $utility in $utilities {
}
若符合以下兩個條件,才會執行最後的
generate-utility
生成通用類別樣式。
$utility
資料是否為 map 資料型態generate-utility
在執行邏輯的部分能正常。$utility
資料中,是否有設置 responsive: true
@if type-of($utility) == "map" and (map-get($utility, responsive) or $infix == "") {
}
下一集將解析 generate-utility 是如何生成通用類別樣式。