# Sass ###### #css #sass #scss #live sass Sass是個進階的css,可以算是一種css框架。 可以使用更多人性化的寫法,所以比css更好寫好懂。 也可使用變數、function、if等,使css能做更多操作。 要知道html是不能直接讀取sass的,必須藉由編譯器轉換成css。 Sass跟SCSS基本上是一樣的東西,只是寫法不同,Sass不用加{},而SCSS要。 所以習慣寫css的人可直接寫SCSS,比較相似於css。 --- ## 編譯Sass ### 1.安裝vs code插件"Live Sass Compiler" ### 2.調整設定 到設定搜尋live sass 點選第一個edit in setting.json ![](https://i.imgur.com/WNGNfs8.png) 加入以下code ``` //設定格式與路徑 "liveSassCompile.settings.formats": [ { "format": "compressed", "extensionName": ".css", "savePath": null } ], //不產生source map "liveSassCompile.settings.generateMap": false, ``` ![](https://i.imgur.com/bDPUW7D.png) 寫好sass或scss後,按下vs code下面的"Watch Sass" 他就會自動在sass當幫邊建立一個編譯好的css檔,並在修改sass時,自動編譯。 ![](https://i.imgur.com/qBuHWD6.png) --- ### 接下來介紹Sass的各種功能: ## 可使用縮排 在sass裡可用縮排來表示子物件 一般css: ``` .container{ ... } .container .card{ ... } .container .card h1{ ... } .container .card p{ ... } ``` Sass: ``` .container{ ... .card{ ... h1{ ... } p{ ... } } } ``` ### '&'的用法 '&'為父物件的簡寫 Css: ``` .container{ ... } .container:hover{ ... } .container.card{ ... } ``` Sass: ``` .container{ ... &:hover{ ... } &.card{ ... } } ``` ## 可分割Sass成多個檔案 在sass檔名前加一個下底線'_'可以不被編譯成新的css檔 例如: ``` _config.scss ``` 然後再在主要的sass裡加上 ``` @import 'sass檔名'; ``` ![](https://i.imgur.com/QHXSNXi.png) ![](https://i.imgur.com/t6ePWbg.png) --- ## 'Extend'的用法 Extend可以使sass中會重複用到的地方直接引用,有點現變數的概念,直接來看例子。 假設我們有很多按鈕,而基本的樣式是一樣的,但只有背景和字顏色要換,這時就可以用@extend來繼承一般按鈕該有的樣式,再自行加上要修改顏色。 ``` button{ display: inline-block; padding: 10px; margin: 5px; } .btn-primary{ @extend button; background: #fff; color: #111; } .btn-secondary{ @extend button; background: #fefefe; color: #333; } ``` --- ## 顏色調整功能 sass有多種function方便使用者直接修改顏色明暗度、飽和度等。 ### 1.Darken & Lighten 明亮度 ``` lighten($color, $amount) //Makes a color lighter. darken($color, $amount) //Makes a color darker. ``` 例如: 提高紅色10%亮度 ``` lighten(red, 10%) ``` ### 2.Saturate & Desaturate 飽和度 ``` saturate($color, $amount) //Makes a color more saturated. desaturate($color, $amount) //Makes a color less saturated. ``` 例如: 提高紅色10%飽和度 ``` saturate(red, 10%) ``` ### 3.Grayscale 灰階 將顏色調整為灰階,調整為灰階明度是不會改變的 ``` grayscale($color) //Converts a color to grayscale. ``` ### 4.Complement 互補色 轉成互補色 ``` complement($color) //Returns the complement of a color. ``` 更多詳細語法:https://wcc723.github.io/sass/2013/08/26/sass-hsl-funtion/ ### 用function讓文字依照背景量度調顏色 首先建立function: ``` @fuinction set-text-color($color){ //假設input顏色亮度大於70,回傳黑色,else回傳白色 @if(lightness($color) > 70){ @return #111; }@else{ @return #fff; } } ``` 使用function: ``` $gb-color: #111 .container{ backgroung: $gb-color; color: set-text-color($gb-color); } ``` --- ## 使用@mixin來簡化sass @mixin的用法跟@function很類似,差別只在於@mixin沒有回傳值,只會單純執行裡面的功能。 假設我們每次改背景顏色就要順便改文字顏色,這時就可用@mixin將這兩行合併起來。 建立mixin: ``` @mixin set-bg-text($color){ backgroung: $color; color: set-text-color($color); } ``` 使用mixin: ``` $gb-color: #111 .container{ @include set-bg-text($bg-color); } ``` --- ## 使用loop sass也有類似for迴圈的功能 假設我們有class: m1, m2, m3, m4, m5 每個class都有參數要微調 Sass: ``` $sapceamount: (1,2,3,4,5) @each $space in $spaceamount{ .m#{$space}{ margin: #{$space}rem; } } ``` Css: ``` .m1{ margin: 1rem; } .m2{ margin: 2rem; } .m3{ margin: 3rem; } .m4{ margin: 4rem; } .m5{ margin: 5rem; } ``` #{var}類似於js裡的${var},用於在字串中加入變數。 ---