Sass
是 CSS
預處理器(CSS Preprocessor)
的一種預處理器是讓開發者撰寫一些類似
CSS
語法的指令,再轉為瀏覽器能懂的CSS
SASS / SCSS
檔案需編譯為 CSS
檔Sass
支持所有現代瀏覽器,並且與 CSS3
兼容。CSS
的重複Sass
和 SCSS
是兩種不同的 Sass
語法格式
使用.scss
文件擴展名稱,使用常規的 CSS
語法和大括號來結構化代碼,需加上 {}
;
。
使用.sass
文件擴展名稱,使用縮排而不是括號,取消{}
;
,它不完全符合 CSS
語法,但編寫起來更快。
此寫法請注意縮排
以上兩種寫法皆輸出
Variables
Sass
允許使用者宣告變數並賦值,這些變數可以在樣式表中重複使用,方便開發者管理和維護樣式。
Sass
Css
Nesting Styles
Sass
支持將樣式規則嵌套,這使得開發者可以更加清晰地了解樣式規則的關係,同時也能減少重複代碼的量。
Sass
Css
Sass
提供了 Mixin
的功能,這可以讓開發者定義可重複使用的樣式片段,以減少代碼的重複性。
@mixin
定義@include
使用@content
是 Sass
中的一個關鍵字,用於在 @mixin
或 @function
規則中引入外部內容。具體來說,@content
可以在 @mixin
或 @function
中的某個位置插入外部代碼塊,以生成動態的 CSS
。
在這個例子中,我們定義了一個@mixin media()
,它根據輸入的裝置類型,定義對應的 CSS
裝置查詢。然後在每個 @media
區塊中,使用 @content
區塊引入 @mixin
被調用時的內容。
在編譯後的 CSS
中,可以看到 Sass
的 @content
區塊被嵌入到對應的 @media
區塊中,並且在不同的裝置查詢下,.element
元素的寬度被設定為不同的值。
Import File
導入其他Sass
檔案
/scss/variables.scss
/scss/style.scss
與 @import
指令相比,@use
指令更加優秀,因為它可以避免代碼重複和命名衝突。
以這種方式加載的任何樣式都將在編譯的CSS輸出中只包含一次,無論這些樣式被加載了多少次
默認情況下,模塊的命名空間就是你導入的檔案名稱,沒有文件擴展名稱。
Sass
css
你可能想要選擇一個不同的命名空間,可能原先名稱太長,想要使用一個較短的名稱
Sass
css
甚至可以加載沒有命名空間的模塊 @use "<url>" as *
。不過,我們建議您只對您編寫的樣式表執行此操作,否則,導入的新成員可能會與原先樣式名稱相同,導致衝突。
Sass
css
你可能不希望你定義的所有變數都可以在 scss
之外使用,只要在變數的前面加上 -
或 _
前綴,來讓它們變成私有成員。
以下範例會報錯
當必須在多個 scss
中重複使用一組樣式表時,我們可以將所有樣式表合併到一個入口點,使用 @forward
並在其他 scss
中 @use
在使用。
以下是一個使用 @forward
的 Sass
範例:
css
Sass
允許使用者在樣式表中進行算數運算、邏輯運算和字串操作等運算。
在下面範例中,我們使用了算術運算符號 /
來計算 $margin
的值,這個值將用於設定 .element
元素的 margin-left
屬性。
Sass
css
在下面範例中,我們使用了比較運算符號 ==
來比較 $primary-color
和 $secondary-color
的值是否相等。如果相等,就設定文字顏色為紅色,否則設定為藍色。
Sass
css
在下面範例中,我們使用了字符串運算符號 +
來結合多個字符串,同時也使用了 unquote()
函數將引號添加到字串周圍,以保持 CSS
規則的正確性
Sass
css
Sass
允許使用者定義和調用函數,這可以簡化樣式表的編寫,使其更加靈活和易於維護。
使用@function
定義函數並使用@return
回傳
在這個例子中,我們使用了 Sass
的 @function
規則定義一個函數 calculate-rem()
,該函數將像素值轉換為 rem
單位。然後我們使用這個函數將 .element
元素的 font-size
屬性設定為 1.5rem
。
Sass
css
在這個例子中,我們使用了 Sass
內置的 darken()
函數,將 $primary-color
變暗 20%,並將結果應用到 .element
元素的 color
屬性中。
Sass
css
在這個例子中,我們使用了 Sass
內置的 lighten()
函數,將 $secondary-color
變亮 15%
,並將結果應用到 .element
元素的 background-color
屬性中。
css
在這個例子中,我們使用了 Sass
內置的 if()
函數,根據 $screen-size
的值,將 .element
元素的 width
屬性設定為 100%
或 50%
。
Sass
css
Sass
允許使用者通過 @extend
指令實現樣式規則的繼承,這可以讓代碼更加簡潔和易於維護。
以下為 Sass
中使用繼承的範例:
在這個範例中,我們定義了一個 %button
的 placeholder
選擇器,用於保存一些通用的按鈕樣式。然後在 .button-primary
和 .button-danger
類別中,使用 @extend
關鍵字繼承 %button
選擇器的樣式,並且覆蓋 background-color
屬性,以實現不同類型的按鈕樣式。
編譯後的 CSS
代碼如下:
可以看到,編譯後的 CSS
中,.button-primary
和 .button-danger
類別都繼承了 %button
選擇器的樣式,同時根據自己的需要修改了 background-color
屬性的值,實現了不同類型的按鈕樣式。這樣,我們就可以通過 Sass
的繼承機制,實現代碼的重用和簡化。
在 Sass
中,@debug
是一個用於輸出調試信息的指令。它可以將一些調試信息輸出到控制台,方便開發人員進行調試和錯誤排查。
查看以下範例,當編譯 Sass
代碼時,這三個調試信息將被輸出到控制台。
使用 @debug
時需要注意,只有在開發過程中才應該使用它,不應該在生產環境中使用。因為它會將調試信息輸出到控制台,影響代碼的執行效率。
在 Sass
中,@error
是一個用於輸出錯誤信息的指令。當 Sass
遇到某些錯誤時,可以使用 @error
指令輸出錯誤信息,一旦錯誤被打印出來,Sass
就停止編譯樣式表並告訴任何正在運行它的系統發生了錯誤。
在這個範例中,當 Sass
編譯這個代碼時,如果 $font-size
的值小於 12px
,就會觸發 @error
,輸出一條錯誤信息到控制台,並且終止 Sass
編譯。這可以幫助開發人員快速發現代碼中的錯誤。
在實際開發中,建議在 @if
或 @each
等指令中使用 @error
,以及在代碼庫或模塊中定義一些較為嚴格的規則,以提高代碼的可讀性和可維護性。