---
# System prepended metadata

title: J_SASS筆記
tags: [CSS, 各種知識]

---

# SASS筆記
這個方法Chris不推薦，請參閱npm裝法
~~# 安裝sass環境
安裝延伸模組：Live Sass Compiler
![image](https://hackmd.io/_uploads/S1pvZcCCa.png)

安裝完就可以在專案中建立`.sass/.scss`，他就會額外編出一支`.css`，若在.`sass/.scss`開頭加上底線 _ 則不會建立`.css`~~

---

~~建立檔案的格式、位置、副檔名等可以到setting.json去設定~~
```json=
"liveSassCompile.settings.formats": [
    {
        "format": "expanded",
        "extensionName": ".css",
        "savePath": "~/../css/"
    }
],
```
~~* format
`expanded`:不壓縮，較易閱讀
`compressed`:去除所有空格及縮排，體積小，較適合專案上線~~

~~* extensionName
通常用`.css`或是`.min.css`~~

~~* savePath
`null`:與.sass/.scss相同路徑
`/`：絕對路徑，從根目錄開始
`~`：相對於.sass/.scss本身，也就是從自己本身的目錄開始~~~~

---
~~建立sass/scss檔案後，點擊vscode下方的Watch Sass後存擋就會自動編譯~~
![image](https://hackmd.io/_uploads/Bk2Ib90Ap.png)


# Sass寫法
# @Mixin
先mixin有重複性的定義，再將定義include進去
![image](https://hackmd.io/_uploads/Hk1IW9AAT.png)



---
也可以用參數定義
![image](https://hackmd.io/_uploads/ByXNZ9AAT.png)



---
# @Extend
先定義共用的style，再將它extend，編譯結果會將他們extend的style組成group
![image](https://hackmd.io/_uploads/S1gS-9AAa.png)




---

# 運算符
(+)、(-)、(*)、(/)
數字可以做一些運算，運算子兩邊要空格以避免有些狀況系統無法識別符號

![image](https://hackmd.io/_uploads/rkKeZqR0p.png)



---
單位之間運算要注意：
* 絕對單位與相對單位無法運算
* 相對單位之間無法運算
* 絕對單位除了(*)以外都可以運算（應該吧？），試想"兩個人乘上三個人"是什麼意思，有意義嗎？
![image](https://hackmd.io/_uploads/ByFkWcRCp.png)



---

# @Import
將`<url>`內容載入到檔案中，這是原生css就有的語法
例如將所有scss當整合成一支檔案，例如all.scss
![image](https://hackmd.io/_uploads/Bkxj0eq0CT.png)

這個用法編譯後會有重寫的問題，可能同一個class會寫超過兩次，造成css會有過多不必要的code，浪費空間影響效率，現在@use可以取代之，也解決重寫問題

---


# @use
用法跟@import類似，但這個機制還沒有很了解，目前只知道要引用其他檔案的變數最後面要加上`as *`
舉例來說，我寫了一個color.scss並在裡面放了會用到的顏色變數
![image](https://hackmd.io/_uploads/ry2alqACp.png)

在media_icon.scss要使用這些變數
在最前面寫：
`@use "../uitilties/color" as *;`
就可以在下方使用變數了{color: $dark; color: $green;}
（中間mixin可以先忽略）
![image](https://hackmd.io/_uploads/H19jgqCRa.png)

# 關於分檔
[季芳都看這個](https://sass-guidelin.es/#the-7-1-pattern)

# Chris的書
我直接截圖有關Sass的內容了
![image](https://hackmd.io/_uploads/rkUq-TkkA.png)
![image](https://hackmd.io/_uploads/B1Vobay10.png)

大致的重點就是：
* 語法要會用，觀察編譯前後，推理運作原理
* 預處理器（前置處理器）是做什麼的
* 程式語言盡量交給後面的javascript，Sass就做css的事就好