SCSS
可程式化階層式開發
CSS
安裝編譯套件
VSCode
> 延伸套件
> Live Sass Complier
建議專案結構
flowchart LR A[fa:fa-folder project root] A-->dist[fa:fa-folder dist] dist-->css[fa:fa-folder css] dist-->js[fa:fa-folder js] dist-->images[fa:fa-folder images] dist-->index[fa:fa-file index.html] css-->|fa:fa-ban 禁止異動| cssfile[fa:fa-file some.css] A-->src[fa:fa-folder src] src-->scss[fa:fa-folder scss] scss-->scssfile[fa:fa-file some.scss] scssfile-->|fa:fa-bolt 編譯產生| cssfile
編譯設定
Windows: Ctrl
+ Shift
+ P
Mac: Command
+ Shift
+ P
> Open Workspace Settings (JSON)
{
"liveSassCompile.settings.formats": [
{
"format": "expanded",
"extensionName": ".css",
"savePath": "/dist/css"
}
],
"liveServer.settings.root": "/dist",
"liveServer.settings.CustomBrowser": "chrome"
}
format
編譯格式
compressed
最小化 (Production)expanded
展開 (Development)
extensionName
編譯後副檔名
savePath
編譯後檔案放置路徑
啟動 watch
VSCode
右下角 Watch my Sass
變數
scss
$main-color: red;
.container {
color: $main-color;
}
css
.container {
color: red;
}
$
大部分語言都是變數的意思
運算
scss
$header-height: 70px;
#header {
height: $header-height;
}
#wrap {
padding-top: $header-height + 70;
}
css
#header {
height: 70px;
}
#wrap {
padding-top: 140px;
}
巢狀 (Nesting)
scss
#header {
background: yellow;
&:hover {
background: blue;
}
.title {
color: red;
}
}
css
#header {
background: yellow;
}
#header:hover {
background: blue;
}
#header .title {
color: red;
}
預設為『後代』選擇器,
&
代表自己
匯入 @import
將檔案內容複製進來
_reset.scss
*,
*::after,
*::before {
margin: 0;
padding: 0;
box-sizing: border-box;
}
scss
@import 'reset';
#header {
background: yellow;
}
css
*,
*::after,
*::before {
margin: 0;
padding: 0;
box-sizing: border-box;
}
#header {
background: yellow;
}
- 使用
@import
匯入檔案 - 匯入檔案名稱不需要加
_
與副檔名.scss
- 被匯入檔案,檔案名稱最前面為
_
可避免被編譯器編譯 - 被匯入檔案,通常為共用屬性,不會單獨使用
混合 @mixin
scss
@mixin container {
width: 1140px;
margin: 10px auto;
}
#header {
color: red;
@include container;
}
css
#header {
color: red;
width: 1140px;
margin: 10px auto;
}
@mixin
宣告
@include
使用
擴展 @extend
scss
#header {
color: red;
height: 300px;
}
#header2 {
@extend #header;
background: yellow;
color: blue;
}
css
#header, #header2 {
color: red;
height: 300px;
}
#header2 {
background: yellow;
color: blue;
}
附加選擇器到
@extend
目的位置
函數 @function
scss
@function add-margin($value, $type: px) {
@return $value + 30 + $type;
}
#header {
background: red;
margin: add-margin(20);
}
#wrap {
margin: add-margin(10, em);
}
css
#header {
background: red;
margin: 50px;
}
#wrap {
margin: 40em;
}