CSS 中的 11 個新特性和功能
9 月 13 日,CSS 工作組發(fā)布了 CSS 值和單位模塊第 5 級的第一個公共工作草案。它描述了 CSS 屬性接受的通用值和單位以及它們使用的語法,并附帶了一些有趣的新功能。
注意:由于它是最近才發(fā)布的,并且目前處于工作草案狀態(tài),本文中描述的許多功能將發(fā)生變化,并且它們不是在所有瀏覽器中可用(有些瀏覽器可用?。?。
不久前還無法想象的事情正在進入規(guī)范:隨機值、使用屬性作為任何屬性的值、能夠在計算中使用順序……看起來很有希望。
這些功能中的許多都有一個共同點:它們簡化了 CSS 代碼。以前需要多條規(guī)則或黑客解決方案的事情將只需一兩行 CSS 即可實現(xiàn)。正如我所說,它看起來很有希望。
這是新更改的列表(更多詳細信息如下):
- 對 attr() 函數(shù)的更改:因此它可以與任何屬性和任何 CSS 屬性一起使用(不僅僅是在內容上)。
- calc-size() 函數(shù):在計算中使用 auto 或 min-content 等固有值。
- 新的 first-valid() 函數(shù)可避免自定義屬性值無效的問題。
- 新的 *-mix() 函數(shù)系列,帶有新的比率符號。
- 新的 *-progress() 函數(shù)系列,用于計算范圍之間或媒體或容器內的進度比率。
- 使用新的 random() 和 random-item() 函數(shù)進行隨機化,從范圍或列表中返回隨機值(終于?。?/span>
- 新的 brothers-count() 和 brothers-index() 函數(shù)提供整數(shù)值,可根據(jù)順序和大小進行操作。
- 新的 toggle() 函數(shù),用于設置嵌套元素的樣式,輕松循環(huán)遍歷值列表。
- 帶有逗號分隔值列表的參數(shù)的新函數(shù)符號,可避免逗號分隔參數(shù)的歧義。
- 新的 URL 修飾符,可更好地控制 url() 請求。
- 擴展位置類型以允許流相關值。
1、對 attr() 函數(shù)的更改
讀取屬性并在 CSS 中使用它并不是什么新鮮事。使用 attr() 已經(jīng)可以做到這一點,但一個常見的抱怨是功能有限,只能處理字符串和內容。
attr() 函數(shù)將進行一些更新,因此任何獨立于其數(shù)據(jù)類型的數(shù)據(jù)屬性都可以在任何屬性中使用。
它將像指定類型一樣簡單,如果我們愿意,還可以指定一個后備值,以防萬一出現(xiàn)意外情況。
這是一個期待已久的更新,將讓很多開發(fā)人員感到高興。
2、使用 calc-size() 操作內在值
此模塊還引入了一個新功能,可以安全地操作內在值(auto、max-content、fit-content 等)。此功能在過渡和動畫中特別有用。
它還添加了新關鍵字(size),為計算提供更多靈活性,使處理尺寸更加容易。
既然已經(jīng)存在 calc(),為什么還要創(chuàng)建一個全新的函數(shù)?正如文檔所解釋的那樣,這樣做有向后兼容性和實際原因(例如,在所有情況下都可以平滑插值,尤其是在以百分比操作時)。
3、新的 first-valid() 函數(shù)
引入了一種新方法:first-valid()。其思想是將一個值列表傳遞給該函數(shù);這些值將被解析,并且將使用第一個有效的值。這在處理 CSS 自定義屬性(又稱 CSS 變量)時特別有用。
使用 CSS 變量時的一個問題是,在聲明中,它們被視為有效值,即使實際包含的值無效。設置后備值也無濟于事,后備聲明也將被忽略。
使用這種方法,我們可以通過使用 first-valid() 將所有后備聲明合并為一個聲明來簡化代碼。
4、新的 *-mix() 函數(shù)系列
它還引入了一個新函數(shù) mix(),可用于簡化不同的 *-mix 函數(shù)。您想混合顏色嗎?您可以執(zhí)行類似 color-mix(red 60%, blue) 的操作,或者更簡單的 mix(60%, red, blue) 也可以。正如我們所說的顏色,我們還可以混合長度、變換函數(shù)等。
該符號也擴展到其他 *-mix 函數(shù)系列:
- calc-mix()
- color-mix()
- cross-fade()
- palette-mix()
如果在進度參數(shù)(第一個)中未指定緩動函數(shù),則默認應用線性。
5、新的 *-progress() 函數(shù)系列
它們表示給定值從一個起始值到另一個終止值的比例進展。結果是一個介于 0 和 1 之間的數(shù)字,可用于運算,但與前面描述的 *-mix 函數(shù)系列結合使用時會特別方便。
此系列中有三個函數(shù):
- progress():通用,適用于任何數(shù)學函數(shù)。
- media-progress():適用于媒體功能。
- content-progress():適用于容器查詢。
6、CSS 中的隨機化函數(shù)
趣味設計具有一定程度的隨機化,而 CSS 中卻沒有這種功能。但此模塊引入了兩個新函數(shù),它們可從列表 (random-item()) 或范圍 (random()) 中返回隨機值。
無需再使用黑客技巧或依賴其他語言來實現(xiàn)此目的。語法也簡單而強大,可以通過選擇器或元素計算隨機數(shù)。
7、新sibling函數(shù)
有時您可能希望根據(jù)容器內元素的順序提供不同的樣式。不幸的是,計數(shù)器不能在 CSS 中這樣使用。
隨著兩個返回數(shù)字的新函數(shù)的引入,可以使用它們進行操作,這個障礙被消除了:
- sibling-count():返回兄弟的數(shù)量。
- sibling-index():返回元素在兄弟列表中的位置/順序。
不再需要在每個元素上設置自定義屬性或使用 nth-child 編寫單獨的選擇器。
8、新的 toggle() 函數(shù)
引入了一種在嵌套元素中定義值的便捷新方法。toggle() 函數(shù)設置元素及其后代將循環(huán)使用的值,從而大大簡化了代碼。忘記復雜的規(guī)則或重新定義 - 一切都將在一行代碼中完成。
例如,假設我們有一個包含四個嵌套級別的列表。我們希望奇數(shù)級別有圓盤,偶數(shù)級別有正方形。
我們可以在不同級別執(zhí)行 ul > li ul > li ul > li ul { … },或者我們可以執(zhí)行類似 ul { list-style-type: disc, square; } 的操作。砰!完成了!
關于這個函數(shù)唯一有點令人擔憂的是它的名字。也許只有我一個人覺得,“toggle”這個詞有“二元性”的含義:開/關、是/否 - 兩個值可以相互切換。 toggle() 函數(shù)可以有任意多個參數(shù),因此將其命名為“toggle”感覺很奇怪。
9、參數(shù)的新函數(shù)符號
您可能已經(jīng)注意到,一些新函數(shù)(例如 random() 或 toggle())可以接受以逗號分隔的值列表的參數(shù)。
在這些情況下,我們如何區(qū)分一個參數(shù)和下一個參數(shù)?這就是為什么有人提議對函數(shù)符號進行“逗號升級”。這意味著我們可以使用分號 (;) 而不是逗號 (,) 來明確分隔參數(shù)。
例如,假設您想在頁面上使用隨機字體系列并指定不同的選項:
- Times,serif
- Arial,sans-serif
- Roboto,sans-serif
所有這些參數(shù)都是以逗號分隔的值列表。如果我們使用逗號分隔參數(shù),那將是一團糟。但使用新符號,很容易識別一個參數(shù)的結束位置和下一個參數(shù)的開始位置:
.random-font {
font-family: random-item(Times, serif; Arial, sans-serif; Roboto, sans-serif);
}
10、位置類型的擴展
CSS 已經(jīng)具有邊距、填充和邊框的邏輯屬性 - 這些值與文本書寫方向有關,并且可能因語言而異。
現(xiàn)在為位置類型引入了此功能(不要與位置屬性混淆)。指示位置的屬性(例如 background-position、object-position 等)可以指定與文本流和方向相關的值。
可以使用的新值為:
- x-start
- x-end
- y-start
- y-end
- block-start
- block-end
- inline-start
- inline-end
結論
它仍處于早期階段,情況會發(fā)生變化,但 CSS 值和單位模塊級別 5 中包含的一些新特性和功能看起來非常有前景。
有些也是期待已久的!尤其是將任何屬性與任何屬性一起使用的可能性。我記得很久以前在規(guī)范中看到過這個選項。希望這是實現(xiàn)它所需要的推動力。
不要忘記查看 CSS 值和單位模塊級別 5 工作草案以獲取更多詳細信息。如果您有任何問題或意見,請在他們的 GitHub 存儲庫中記錄工單。