CSS 終迎 if() 函數(shù),內聯(lián)條件邏輯大爆發(fā)
CSS引入if()函數(shù),實現(xiàn)行內條件邏輯,提升樣式靈活性。它基于條件查詢,Chrome和Edge已支持,Safari和Firefox正在跟進,帶來新的架構可能。
譯自:CSS Finally Gets Inline Conditional Logic With New if() Function[1]
作者:Joab Jackson
CSS即將迎來行內條件處理。
那些曾因網(wǎng)頁通用樣式表的聲明性質而感到束縛的人,即將享受到更多的自由,來混合使用樣式。
多年來,開發(fā)者和設計師們在Stack Overflow[2]以及其他地方詢問[3]CSS是否有任何條件邏輯,但只找到了變通方法[4]。現(xiàn)在,樣式標準背后的技術委員會已經(jīng)批準了一項針對樣式表的新函數(shù),即 if(),這為設計師們開啟了一個全新的選擇世界。
富達投資公司(Fidelity Investments)的首席用戶體驗設計師 Mark Adkins 本周早些時候在北卡羅來納州羅利舉行的 AllThingsOpen 2025[5] 大會上,在談及 CSS[6] 的最新發(fā)展時表示:“據(jù)我所知,這是您第一次能夠在線執(zhí)行這種邏輯,而無需在文件底部設置專用代碼塊。”
由萬維網(wǎng)聯(lián)盟[7](W3C)管理的CSS是指定網(wǎng)頁呈現(xiàn)、樣式和布局的標準化方式,它與用于頁面布局的HTML[8]以及用于其邏輯的JavaScript[9]協(xié)同工作。
CSS是一項成熟的技術,因此它不像以前那樣頻繁更新。W3C每年發(fā)布一個快照,匯總規(guī)范不同部分的所有最新發(fā)展(2025年版已于上個月發(fā)布[10])。然后由瀏覽器制造商負責實現(xiàn)這些規(guī)范,其進展情況由Can I use[11]網(wǎng)站忠實地跟蹤。
什么是CSS的 if() 函數(shù)?
這項新函數(shù)將隨2025年快照一同發(fā)布,對CSS來說是前所未有的。
Adkins向聽眾承認:“這個功能確實讓我措手不及。”
雖然大多數(shù)CSS都與陰影、顏色以及演示文稿的其他各種細節(jié)有關,但規(guī)范在邏輯處理方面并未提供太多內容。
Adkins表示,if() 函數(shù)是在先前的基礎上開發(fā)的,允許開發(fā)者指定變量,即“自定義屬性[12]”這些屬性在瀏覽器的文檔對象模型(DOM[13])中定義,然后可以通過JavaScript進行更改。
新功能將邏輯屬性擴展到行內代碼本身。
在編程世界中,if() 函數(shù)本身并不新鮮——大多數(shù)命令式語言都有該函數(shù)的一個版本。if() 函數(shù)基于JavaScript的if … else[14]函數(shù),它為程序員提供了一種根據(jù)條件測試結果設置屬性不同值的方法。如果為a則為x,如果為b則為y,依此類推。
如果所有條件都不滿足,您還可以提供一個 else 語句。
在CSS中,測試可以基于[15]樣式查詢[16]、媒體查詢[17]或功能查詢[18]。
if()函數(shù)在CSS中如何工作
根據(jù)規(guī)范[19],該語句由一個有序的、以分號分隔的語句列表組成,每個語句指定一個條件和一個值,兩者之間用冒號分隔。
該函數(shù)的語法,摘自Mozilla開發(fā)網(wǎng)絡文檔[20],如下所示:
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.Learn more about bidirectional Unicode characters[21]
<if-condition>
An <if-test> or the else keyword.
<if-test>
A style query, media query, or feature query.
else
A keyword representing an <if-condition> that always evaluates to true.
<value>
A property value.
Return valueMDN還提供了一個關于如何使用 if() 的示例:在下方您可以看到,根據(jù)所選主題(“ice”或“fire”),網(wǎng)頁上可以部署兩種背景圖片中的一種:
div {
background-image: if(
style(--scheme: ice): linear-gradient(#caf0f8, white, #caf0f8);
style(--scheme: fire): linear-gradient(#ffc971, white, #ffc971);
else: none;
);
}Adkins表示,該函數(shù)可以內置到類的任何屬性中,或者作為選擇器的一部分。
當前瀏覽器采用和支持情況
目前,if() 函數(shù)在各瀏覽器中僅得到部分支持。
test results[22]
CSS if()函數(shù)在瀏覽器中的支持情況,截至2025年10月。來源:Can I use[23]。
Chrome和Edge支持該功能,而Safari和Firefox仍處于落后。移動端開發(fā)更是滯后,只有Android版Chrome和Android瀏覽器能識別該語句。
Test results[24]
CSS if()函數(shù)在移動瀏覽器中的支持情況,截至2025年10月。來源:Can I use[25]。
CSS條件語句帶來的新可能性
Google Web UI DevRel負責人 Una Kravets 在一篇博文[26]中描述了新條件語句的多種用法,她寫道:“if() 的加入為CSS開發(fā)者提供了新的架構機會。”
Kravets 建議,該函數(shù)可用于創(chuàng)建行內媒體查詢。例如,網(wǎng)站可以根據(jù)用戶對淺色或深色模式的偏好來更改設計。它還可以用于執(zhí)行行內支持查詢,檢查硬件是否支持該設計,如果不支持則切換到替代設計。這也可以是一個方便的方式來可視化正在運行的進程狀態(tài),用不同的圖像指示任務是否完成。
引用鏈接
[1] CSS Finally Gets Inline Conditional Logic With New if() Function:https://thenewstack.io/css-finally-gets-inline-conditional-logic-with-new-if-function/
[2]Stack Overflow:https://thenewstack.io/stack-overflow-on-snowflake-cortex-answers-without-attitude/
[3]詢問:https://stackoverflow.com/questions/2446812/css-equivalent-of-the-if-statement
[4]只找到了變通方法:https://stackoverflow.com/questions/1129699/can-you-use-if-else-conditions-in-css/
[5]AllThingsOpen 2025:https://2025.allthingsopen.org/schedule
[6]CSS:https://www.w3.org/Style/CSS/Overview.en.html
[7]萬維網(wǎng)聯(lián)盟:https://www.w3.org/about/
[8]布局的HTML:https://thenewstack.io/html-css-and-the-path-to-accessible-web-design/
[9]邏輯的JavaScript:https://thenewstack.io/javascript-standards-update-whats-new-in-ecmascript-2025/
[10]已于上個月發(fā)布:https://www.w3.org/TR/css-2025/
[11]Can I use:https://caniuse.com/
[13]DOM:https://thenewstack.io/pivoting-from-react-to-native-dom-apis-a-real-world-example/
[14]*if … else*:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/if...else
[15]可以基于:https://caniuse.com/css-if
[16]樣式查詢:https://developer.mozilla.org/en-US/docs/Web/CSS/CSS_media_queries/Using_media_queries
[17]媒體查詢:https://developer.mozilla.org/en-US/docs/Web/CSS/CSS_media_queries/Using_media_queries
[18]功能查詢:https://developer.mozilla.org/en-US/docs/Web/CSS/CSS_conditional_rules/Using_feature_queries
[19]規(guī)范:https://drafts.csswg.org/css-values-5/#if-notation
[20]文檔:https://drafts.csswg.org/css-values-5/#if-notation
[21]Learn more about bidirectional Unicode characters:https://github.co/hiddenchars
[22]:https://cdn.thenewstack.io/media/2025/10/deea1f01-css-if-support-browers.jpg[23]Can I use:https://caniuse.com/
[24]:https://cdn.thenewstack.io/media/2025/10/56b6c7c0-css-if-support-mobile-browers.jpg
[25]Can I use:https://caniuse.com/

























