功能觀察:內容引數和顏色函式
Natalie Weizenbaum 於 2018 年 11 月 14 日發佈
Dart Sass 1.15 今日發佈,可透過 npm 和 所有其他發佈管道 取得。此版本帶來許多備受期待的 Sass 新功能。這也是 Dart Sass 第一個發佈的版本,其中包含主要的新語言功能,而這些功能*不僅僅*是為了與 CSS 相容。這是一項重大成就,我們打算繼續朝這個方向發展!
@content 引數`@content` 引數的永久連結
接受 @content 區塊 的 Mixin 現在可以將引數傳遞給這些區塊。寫法為 @content(<arguments...>)。如果 Mixin 將引數傳遞給其內容區塊,則該 Mixin 的使用者必須透過 @include <name> using (<arguments...>) 接受這些引數。內容區塊的引數列表就像 Mixin 的引數列表一樣,而 @content 傳遞給它的引數也就像傳遞引數給 Mixin 一樣。
// style.scss
@mixin media($types...) {
@each $type in $types {
@media #{$type} {
@content($type);
}
}
}
@include media(screen, print) using ($type) {
h1 {
font-size: 40px;
@if $type == print {
font-family: Calluna;
}
}
}
/* style.css */
@media screen {
h1 {
font-size: 40px;
}
}
@media print {
h1 {
font-size: 40px;
font-family: Calluna;
}
}
更多詳細資訊,請參閱功能提案。此功能已在 LibSass 中實作,並將於 3.6.0 版中發佈。由於 Ruby Sass 已被棄用,而且這不是 CSS 相容性功能,因此它不會在 Ruby Sass 中實作。
rgb() 和 hsl() 的色彩等級 4 語法rgb() 和 hsl() 色彩等級 4 語法的永久連結
CSS 色彩模組等級 4 引入了 rgb() 和 hsl() 函式的新語法,瀏覽器已開始支援此語法。此語法使這些函式更簡潔,允許指定 alpha 值而無需額外的 rgba() 和 hsla() 函式,看起來像 rgb(0 255 0 / 0.5) 和 hsla(0 100% 50%)。
為了支援此函式,Sass 的 rgb() 和 hsl() 函式現在接受以空格分隔的組件列表作為單一引數。如果最後一個引數是以斜線分隔的兩個數字,則第一個數字將被視為藍色通道或亮度(分別),第二個數字將被視為 alpha 通道。
但請注意,區分除法和 / 作為分隔符號的正常規則 仍然適用!因此,如果您想將變數傳遞給 alpha 值,則需要使用舊的 rgba() 語法。由於 / 在 CSS 中更常被用作分隔符號,我們正在 考慮此問題的可能的長期解決方案。
此外,新的色彩規範將 rgba() 和 hsla() 函式定義為 rgb() 和 hsl() 的純別名,並將對四個引數的 rgba() 和 hsla() 語法的支援新增到 rgb() 和 hsl()。為了符合此行為,Sass 也將 rgba() 和 hsla() 定義為別名,並將其所有定義的支援新增到 rgb() 和 hsl()。
總而言之,這表示 Sass 現在支援以下所有函式呼叫:
rgb(0 255 0)、rgb(0% 100% 0%)、rgb(0 255 0 / 0.5)和rgb(0, 255, 0, 0.5);hsl(0 100% 50%)、hsl(0 100% 50% / 0.5)和hsl(0, 100%, 50%, 0.5);rgba(0, 255, 0)和hsla(0, 100%, 50%);- 以及
rgb($color, 0.5)。
這個變更完全向下相容,因此先前所有適用於 rgb()、hsl()、rgba() 和 hsla() 的參數將繼續有效。
更多詳細資訊,請參閱功能提案。此功能尚未在 LibSass 或 Ruby Sass 中實作。
插入 At-Rule 名稱插入 At-Rule 名稱永久連結
這個功能比前兩個小一點,但它在待辦事項清單上的時間更長:在 at-rule 的名稱中新增插值支援!它的運作方式與您預期的一樣
@mixin viewport($prefixes) {
@each $prefix in $prefixes {
@-#{$prefix}-viewport {
@content;
}
}
@viewport {
@content;
}
}
更多詳細資訊,請參閱功能提案。此功能尚未在 LibSass 中實作。由於 Ruby Sass 已棄用,且這不是 CSS 相容性功能,因此它不會在 Ruby Sass 中實作。