Sass, SCSS 基礎筆記
tag css
, scss
, basic
Usage
變數定義
雖然 CSS 新的功能已可使用變數機制,但各瀏覽器實作的狀況不同,開發上還是稍微不穩定
且 scss 不只可使用單值變數,更可以定義 array, map 並使用
nth($list, $index), index($list, val), length($list)
map-get($map, $key), map-keys($map), map-values($map)
append($list, $val), merge($object, $object) 來添加或覆蓋值
* {
--my-color: red;
}
.box {
color: var(--my-color);
}
$my-color: red;
$sizes: 50px, 100px, 150px;
$fonts: ('sm': 13px, 'md': 15px, 'lg': 17px);
// reassign value with append's or merge's return
$sizes: append($sizes, 200px);
$fonts: map-merge($fonts, ('lg': 21px, 'xl': 27px));
.box {
color: $my-color;
width: nth($sizes, 1); // 50px
font-size: map-get($fonts, 'sm'); // 13px
}
簡化父層選取
可以簡化傳統 CSS 父層重複出現的繁瑣
#demo .box {
/* ... */
}
#demo .box .title {
/* ... */
}
#demo {
.box {
/* ... */
.title {
/* ... */
}
}
}
值計算(加減乘除)
.box {
font-size: calc(10px * 3);
}
.box {
font-size: 10px * 3;
}
注意,剪法計算方式必須兩邊單位相同,不同時仍需使用 calc
.title {
font-size: calc(30px - 20px);
}
.title {
width: 30px - 20px;
}
@function
函數概念,通常用來返回一個經過計算或處理後的單值,接受傳入參數。
// px 轉 rem
@function pxToRem($px) {
$num: $px / 16px;
@return #{$num}rem;
}
@mixin
類似函數,通常用來獲得一系列 CSS 設定,接受傳入參數。
(相同設定複製一份,表面上會增加 code 量,但經實測,@mixin 較 @extend 具有更好的性能)
(且當使用 @extend 時,需注意 placeholder 的位置是否會覆蓋到目標)
@mixin block_reset {
margin: 0;
padding: 0;
}
@mixin RWD($width) {
@media (max-width: $width) {
@content
}
}
@extend
擴展集合,將具有相同設定的目標寫在一起,一次設定,不接受傳入參數。
通常搭配 placeholder 一起使用,將所有目標具有的相同設定綁定到 placeholder 處設定。
%col {
position: relative;
width: 100%;
}
.box-1 {
@extend %col;
color: red;
}
.box-2 {
@extend %col;
color: blue;
}
To
.box-1, .box-2 {
position: relative;
width: 100%;
}
.box-1 {
color: red;
}
.box-2 {
color: blue;
}
if / else 條件判斷
CSS 中沒有條件判斷的功能
@mixin ta($side) {
@if $side == l {
text-align: left;
}
@else if $side == r {
text-align: right;
}
@else if $side == j {
text-align: justify;
}
@else {
text-align: center;
}
}
for / each 迴圈
CSS 中沒有迴圈的概念,迴圈在構建 framework 時非常好用
// @for loop(to 不包含,through 包含)
@for $i from 1 through 11 {
.offset-#{$i}
margin-left: 100%/12*$i
}
// @each loop - array
$sizes: 40px, 50px, 80px;
@each $size in $sizes {
.icon-#{$size} {
font-size: $size;
height: $size;
width: $size;
}
}
// @each loop - object
$sizes: ('sm': 40px, 'md': 50px, 'lg': 80px);
@each $key, $value in $sizes {
.icon-#{$key} {
font-size: $value;
height: $value;
width: $value;
}
}
@import 引入模組
@import 是讓 Sass 模組化開發最重要的功能之一,在文件開頭引入所需的 variables, mixin 快速進行開發
@import "./base/Base-variable";
@import "./base/Base-mixin";
@at-root 從最上層開始
#app {
p {
@at-root .bold & {
color: red;
}
}
}
編譯結果如下
.bold #app p {
color: red;
}