重大變更:嚴格的函式 單位

各種內建函式將會對其允許的單位更加嚴格,並將更一致地處理這些單位。這使得 Sass 更相容於 CSS 規範,並有助於更快地發現錯誤。

色相色相永久連結

相容性
Dart Sass
自 1.32.0 版起
LibSass
Ruby Sass

在指定顏色的色相時,CSS 允許任何角度單位deggradradturn)。它也允許無單位的數字,這會被解釋為 deg。過去,Sass 允許*任何*單位,並將其解釋為 deg。這尤其容易造成問題,因為這表示 Sass 會允許有效的 CSS 表達式 hsl(0.5turn, 100%, 50%),但卻會完全錯誤地解釋它。

為了修復此問題並使 Sass 與 CSS 規範一致,我們將分多個階段進行變更

階段 1階段 1 永久連結

相容性
Dart Sass
自 1.32.0 版起
LibSass
Ruby Sass

首先,如果您將帶有 deg 以外單位的數字作為色相傳遞給任何函式,Sass 只會發出棄用警告。仍然允許傳遞無單位的數字。

階段 2階段 2 永久連結

相容性
Dart Sass
自 1.52.1 版起
LibSass
Ruby Sass

接下來,我們更改了色相參數的角度單位處理方式,以符合 CSS 規範。這表示帶有 gradradturn 單位的數字將會轉換為 deg0.5turn 將會轉換為 180deg100grad 將會轉換為 90deg,依此類推。

由於此變更對於維持 CSS 相容性是必要的,根據Dart Sass 相容性策略,此變更只會提升次要版本號。然而,它盡可能減少行為的改變,以確保 Sass 根據 CSS 規範來詮釋所有有效的 CSS。

階段 3階段 3 永久連結

相容性
Dart Sass
LibSass
Ruby Sass

最後,在 Dart Sass 2.0.0 中,如果顏色函式傳入的色相參數帶有非角度單位,則會拋出錯誤。不帶單位的色相仍然允許。

飽和度和亮度飽和度和亮度永久連結

在指定 HSL 顏色的飽和度和亮度時,CSS 只允許使用 % 單位。即使是不帶單位的數字也是不允許的(不像色相)。過去,Sass 允許使用*任何*單位,並將其解釋為 %。您甚至可以寫 hsl(0, 100px, 50s),Sass 也會返回顏色 red(紅色)。

為了修復此問題並使 Sass 與 CSS 規範一致,我們將分兩個階段進行變更

階段 1階段 1 永久連結

相容性
Dart Sass
自 1.32.0 版起
LibSass
Ruby Sass

目前,如果您將不帶單位或單位不是 % 的數字作為亮度或飽和度傳遞給任何函式,Sass 只會發出棄用警告。

階段 2階段 2 永久連結

相容性
Dart Sass
LibSass
Ruby Sass

在 Dart Sass 2.0.0 中,如果顏色函式傳入的飽和度或亮度參數不帶單位或使用非 % 單位,則會拋出錯誤。

Alpha 值Alpha 值永久連結

在指定顏色的 Alpha 值時,CSS(根據色彩等級 4)允許使用 0 到 1 之間的不帶單位的值或 0%100% 之間的 % 值。在大多數情況下,Sass 遵循此行為,但函式 color.adjust()color.change() 過去允許使用*任何*單位,並將其解釋為不帶單位的數字。您甚至可以寫 color.change(red, $alpha: 1%),Sass 也會返回不透明的顏色 red(紅色)。

為了修復此問題並使 Sass 與 CSS 規範一致,我們將分三個階段進行變更

階段 1階段 1 永久連結

相容性
Dart Sass
自 1.56.0 起
LibSass
Ruby Sass

目前,如果您將帶有任何單位(包括 %)的數字作為 Alpha 值傳遞給 color.change()color.adjust(),Sass 只會發出棄用警告。

階段 2階段 2 永久連結

相容性
Dart Sass
LibSass
Ruby Sass

接下來,我們將更改 color.change()color.adjust() 的 Alpha 參數處理 % 單位的方式。帶有 % 單位的 Alpha 值將除以 100%,將其轉換為 0 到 1 之間的不帶單位數字。

由於此變更是一個錯誤修復,可以提高與其他 Sass 函式的一致性,因此只會提升次要版本號。它將在階段 1 發布後至少三個月後更改,以便讓使用者有時間調整他們的程式碼並避免該錯誤。

階段 3階段 3 永久連結

相容性
Dart Sass
LibSass
Ruby Sass

最後,在 Dart Sass 2.0.0 中,如果 color.change()color.adjust() 傳入的 Alpha 參數帶有非 % 單位,則會拋出錯誤。不帶單位的 Alpha 值仍然允許。

math.random()math.random() 永久連結

math.random() 函數過去會忽略 $limit 中的單位,並返回無單位的數值。例如,math.random(100px) 會捨棄「px」並返回像 42 這樣的數值。

Sass 未來版本將不再忽略 $limit 參數的單位,並返回具有相同單位的隨機整數。

測試場

SCSS 語法

@use "sass:math";

// Future Sass, doesn't work yet!
@debug math.random(100px); // 42px
測試場

Sass 語法

@use "sass:math"

// Future Sass, doesn't work yet!
@debug math.random(100px)  // 42px

階段 1階段 1 永久連結

相容性
Dart Sass
自 1.54.5 版本起
LibSass
Ruby Sass

目前,如果您將帶有單位的 $limit 傳遞給 math.random(),Sass 會發出棄用警告。

階段 2階段 2 永久連結

相容性
Dart Sass
LibSass
Ruby Sass

在 Dart Sass 2.0.0 中,傳遞帶有單位的 $limit 數字將會導致錯誤。

階段 3階段 3 永久連結

相容性
Dart Sass
LibSass
Ruby Sass

在 Dart Sass 2.0.0 之後的次要版本中,將允許再次將帶有單位的 $limit 數字傳遞給 math.random() 函數。它將返回與 $limit 相同單位的隨機整數,而不是無單位的數字。

權重權重永久連結

color.mix() 函數color.invert() 函數 過去都會忽略其 $weight 參數中的單位,儘管該參數在概念上代表百分比。Sass 未來版本將需要 % 單位。

階段 1階段 1 永久連結

相容性
Dart Sass
自 1.56.0 起
LibSass
Ruby Sass

目前,如果您將沒有單位或單位不是 %$weight 傳遞給 color.mix()color.invert(),Sass 會發出棄用警告。

階段 2階段 2 永久連結

相容性
Dart Sass
LibSass
Ruby Sass

在 Dart Sass 2.0.0 中,如果傳遞給 color.mix()color.invert()$weight 沒有單位或單位不是 %,則會引發錯誤。

索引索引永久連結

list.nth() 函數list.set-nth() 函數 過去都會忽略其 $n 參數中的單位。Sass 未來版本將禁止任何單位。

階段 1階段 1 永久連結

相容性
Dart Sass
自 1.56.0 起
LibSass
Ruby Sass

目前,如果您將沒有單位或單位不是 %$weight 傳遞給 color.mix()color.invert(),Sass 會發出棄用警告。

階段 2階段 2 永久連結

相容性
Dart Sass
LibSass
Ruby Sass

在 Dart Sass 2.0.0 中,如果傳遞給 list.nth()list.set-nth() 的索引 $n 帶有單位,則會引發錯誤。

我可以隱藏警告嗎?我可以隱藏警告嗎?永久連結

Sass 提供了一套強大的選項,用於管理您看到的棄用警告以及何時看到它們。

簡潔模式和詳細模式簡潔模式和詳細模式永久連結

預設情況下,Sass 以簡潔模式運行,它只會列印每種類型的棄用警告五次,之後就會隱藏其他警告。這有助於確保使用者知道他們需要注意即將發生的重大變更,而不會產生大量的控制台訊息。

如果您以詳細模式運行 Sass,它將列印遇到的*每個*棄用警告。這對於追蹤修復棄用時剩餘的工作很有用。您可以使用命令列上的 --verbose 旗標 或 JavaScript API 中的 verbose 選項 來啟用詳細模式。

⚠️ 注意!

當您透過 JS API 執行 Sass 時,Sass 不會在編譯過程中共用任何資訊,因此預設情況下,它會針對*每個*編譯的樣式表印出五個警告。然而,您可以透過編寫(或請求您最愛框架的 Sass 外掛程式作者編寫)一個 自訂的 Logger 來解決此問題,該 Logger 每個棄用警告只會印出五次錯誤,並且可以在多個編譯之間共用。

在 dependencies 中抑制棄用警告在 dependencies 中抑制棄用警告的永久連結

有時,您的 dependencies 會有一些您無能為力的棄用警告。您可以使用命令列上的 --quiet-deps 旗標 或 JavaScript API 中的 quietDeps 選項 來抑制 dependencies 的棄用警告,同時仍為您的應用程式印出警告。

就這個旗標而言,「dependency」是指任何並非僅從入口點樣式表進行一系列相對載入的樣式表。這意味著任何來自載入路徑的內容,以及大多數透過自訂匯入器載入的樣式表。

抑制特定棄用警告抑制特定棄用警告的永久連結

如果您知道某個特定棄用警告對您來說不是問題,您可以使用命令列上的 --silence-deprecation 旗標 或 JavaScript API 中的 silenceDeprecations 選項 來抑制該特定棄用警告的警告。