css中的color-mix()函數

color-mix() 是 CSS 顏色模塊(CSS Color Module Level 5)中引入的一個強大的顏色混合函數,用于在指定的顏色空間中混合兩種或多種顏色,生成新的顏色值。它解決了傳統顏色混合(如通過透明度疊加)在視覺一致性上的不足,尤其在不同設備和顏色空間下能提供更可預測的結果。

基本語法

color-mix() 的核心語法如下:

color-mix(in <color-space>, <color-1> [<percentage>]?, <color-2> [<percentage>]?, ...)
  • in <color-space>:指定混合使用的顏色空間(必需)。常見值包括 srgbsrgb-linearoklaboklchlablch 等。
  • <color-1>, <color-2>, …:要混合的顏色(至少兩種,支持多種),可以是任何有效的 CSS 顏色(如 #fffrgb(255,0,0)、CSS 變量等)。
  • [<percentage>]?:可選參數,指定每種顏色在混合中的占比(默認按比例分配剩余份額)。

關鍵特性

  1. 基于顏色空間的混合
    傳統顏色混合(如 rgba() 疊加)本質是在默認顏色空間(通常是 srgb)中進行簡單的數值計算,可能導致視覺上的偏差(如混合紅色和綠色得到的棕色與預期不符)。
    color-mix() 允許指定更科學的顏色空間(如 oklab),該空間更符合人類視覺對顏色的感知,混合結果更自然。例如:

    /* 在 oklab 空間混合紅色和綠色,結果更接近人眼預期的棕色 */
    color: color-mix(in oklab, red 50%, lime 50%);
    
  2. 靈活的比例控制
    可以通過百分比精確控制每種顏色的占比,總占比超過 100% 時會自動按比例縮放。例如:

    • 混合 30% 紅色和 70% 藍色:
      color-mix(in srgb, red 30%, blue 70%)
    • 若省略百分比,默認平均分配(如兩種顏色各占 50%):
      color-mix(in srgb, red, blue)(等價于各 50%)
    • 多顏色混合時按比例分配:
      color-mix(in srgb, red 20%, green 30%, blue 50%)(總和 100%)
  3. 支持透明色(transparent
    與透明色混合時,會按比例降低原顏色的不透明度。例如:

    /* 50% 紅色 + 50% 透明 → 半透明紅色 */
    color: color-mix(in srgb, red 50%, transparent);
    

常用顏色空間及適用場景

不同顏色空間的混合效果差異較大,選擇合適的空間很重要:

顏色空間特點適用場景
srgb網頁默認顏色空間,基于非線性感知,混合結果可能偏暗兼容舊系統,簡單混合需求
srgb-linear線性版本的 srgb,混合時亮度更均勻需要精確亮度計算的場景
oklab現代均勻顏色空間,感知一致性強,混合后色調和亮度過渡自然追求自然視覺效果的設計
oklchoklab 的圓柱坐標形式,便于控制色相、飽和度和明度需要精確調整色相/飽和度時
lab, lch傳統均勻顏色空間,覆蓋范圍廣但計算復雜度高專業色彩工作流

與傳統混合方式的對比

  • rgba() 疊加:本質是顏色在視覺上的疊加,受背景色影響,且混合邏輯不直觀(如 rgba(255,0,0,0.5) 疊加 rgba(0,255,0,0.5) 會受背景色影響)。
  • color-mix():直接計算混合后的顏色值,不受背景影響,結果可預測,且支持多顏色、多空間混合。

瀏覽器兼容性

color-mix() 目前已被主流瀏覽器支持(Chrome 99+、Firefox 111+、Safari 15.4+),但舊瀏覽器(如 IE)不支持。實際使用時可通過工具(如 PostCSS)降級處理,或提供 fallback 顏色:

.my-element {/* 降級方案:使用半透明紅色 */color: rgba(255, 0, 0, 0.5);/* 現代瀏覽器使用 color-mix */color: color-mix(in oklab, red 50%, transparent);
}

總結

color-mix() 是 CSS 中處理顏色混合的現代方案,通過指定顏色空間和比例,能生成更符合視覺預期、可預測的顏色。它特別適合主題設計、動態顏色生成(如 hover 效果)、漸變色優化等場景,是前端開發者提升色彩控制能力的重要工具。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/95366.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/95366.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/95366.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Github desktop介紹(GitHub官方推出的一款圖形化桌面工具,旨在簡化Git和GitHub的使用流程)

文章目錄**1. 簡化 Git 操作****2. 代碼版本控制****3. 團隊協作****4. 代碼托管與共享****5. 集成與擴展****6. 跨平臺支持****7. 適合的使用場景****總結**GitHub Desktop 是 GitHub 官方推出的一款圖形化桌面工具&#xff0c;旨在簡化 Git 和 GitHub 的使用流程&#xff0c;…

整數規劃-分支定界

內容來自:b站數學建模老哥 如:3.4,先找小于3的,再找大于4的 逐個

JetPack系列教程(六):Paging——讓分頁加載不再“禿”然

前言 在Android開發的世界里&#xff0c;分頁加載就像是一場永無止境的馬拉松&#xff0c;每次滾動到底部&#xff0c;都仿佛在提醒你&#xff1a;“嘿&#xff0c;朋友&#xff0c;還有更多數據等著你呢&#xff01;”但別擔心&#xff0c;Google大佬們早就看透了我們的煩惱&a…

扎實基礎!深入理解Spring框架,解鎖Java開發新境界

大家好&#xff0c;今天想和大家聊聊Java開發路上繞不開的一個重要基石——Spring框架。很多朋友在接觸SpringBoot、SpringCloud這些現代化開發工具時&#xff0c;常常會感到吃力。究其原因&#xff0c;往往是對其底層的Spring核心機制理解不夠透徹。Spring是構建這些高效框架的…

Heterophily-aware Representation Learning on Heterogeneous Graphs

Heterophily-Aware Representation Learning on Heterogeneous Graphs (TPAMI 2025) 計算機科學 1區 I:18.6 top期刊 ?? 摘要 現實世界中的圖結構通常非常復雜,不僅具有全局結構上的異質性,還表現出局部鄰域內的強異質相似性(heterophily)。雖然越來越多的研究揭示了圖…

計算機視覺(7)-純視覺方案實現端到端軌跡規劃(思路梳理)

基于純視覺方案實現端到端軌跡規劃&#xff0c;需融合開源模型、自有數據及系統工程優化。以下提供一套從模型選型到部署落地的完整方案&#xff0c;結合前沿開源技術與工業實踐&#xff1a; 一、開源模型選型與組合策略 1. 感知-預測一體化模型 ViP3D&#xff08;清華&#…

Nginx 屏蔽服務器名稱與版本信息(源碼級修改)

Nginx 屏蔽服務器名稱與版本信息&#xff08;源碼級修改&#xff09; 一、背景與目的 在生產環境部署 Nginx 時&#xff0c;默認配置會在 Server 響應頭中暴露服務類型&#xff08;如 nginx&#xff09;和版本號&#xff08;如 nginx/1.25.4&#xff09;。這些信息可能被攻擊者…

從鋼板內部應力視角,重新認識護欄板矯平機

一、為什么鋼板會“自帶波浪”&#xff1f; 鋼卷在熱軋后冷卻、卷取、長途運輸、多次吊運時&#xff0c;不同部位受到的溫度、張力、碰撞并不一致&#xff0c;內部會產生不均勻的殘余應力。應力大的區域想“伸長”&#xff0c;應力小的區域想“縮短”&#xff0c;宏觀上就表現為…

C++中的`auto`與`std::any`:功能、區別與選擇建議

引言 在C編程中&#xff0c;auto和std::any是兩個功能強大但用途不同的工具。理解它們的區別和適用場景對于編寫高效、可維護的代碼至關重要。本文將詳細介紹auto和std::any的基本概念、使用方法、適用場景以及它們之間的區別&#xff0c;并提供選擇建議&#xff0c;幫助開發者…

【Linux】進程(Process)

一、什么是進程二、進程的創建三、進程的狀態四、僵尸進程五、孤兒進程六、進程的優先級 以及 并發/并行七、進程的切換一、什么是進程&#xff1f;什么是進程呢(一)?官方話來說&#xff1a;進程是一個執行實例、正在執行的程序、是系統資源分配的基本單位按課本官方話可能有一…

銷售管理系統哪個好?14款軟件深度對比

本文將深入對比14款銷售管理系統&#xff1a;1.紛享銷客&#xff1b; 2.Zoho CRM&#xff1b; 3.神州云動 CRM&#xff1b; 4.勵銷云 CRM&#xff1b; 5.Microsoft Dynamics?365 CRM&#xff1b; 6.悟空 CRM&#xff1b; 7.泛微 CRM&#xff1b; 8.HubSpot CRM&#xff1b; 9.…

如何從 0 到 1 開發企業級 AI 應用:步驟、框架與技巧

本文來自作者 莫爾索 的 企業級 AI 應用開發與最佳實踐指南&#xff0c; 歡迎閱讀原文。 大家好&#xff0c;我之前出版的《LangChain 編程&#xff1a;從入門到實踐》一書獲得了良好的市場反響和讀者認可。近期推出了第二版&#xff0c;我對內容進行了大幅更新&#xff1a;近 …

【LLM】Openai之gpt-oss模型和GPT5模型

note gpt-oss模型代理能力&#xff1a;使用模型的原生功能進行函數調用、網頁瀏覽&#xff08;https://github.com/openai/gpt-oss/tree/main?tabreadme-ov-file#browser&#xff09;、Python 代碼執行&#xff08;https://github.com/openai/gpt-oss/tree/main?tabreadme-o…

Ubuntu 20.04 虛擬機安裝完整教程:從 VMware 到 VMware Tools

目錄 一、VMware的安裝 1. 資源獲取 1. 網盤提取 2. VMware官網&#xff0c;選擇自己合適的版本&#xff0c;我下載的是16.2版本 2.安裝步驟 二、Ubuntu的安裝 1. Ubuntu 鏡像文件官網下載 2. Ubuntu的安裝步驟 第一步&#xff1a;打開剛剛安裝好的VMware16.2.0&#…

【DL】最優化理論和深度學習

最優化理論是計算機科學中一個重要的概念&#xff0c;它用于幫助我們找到最優解&#xff08;即最小或最大值&#xff09;的算法。在深度學習中&#xff0c;最優化理論用于幫助深度學習模型找到最優解。訓練誤差&#xff08;Training Error&#xff09;&#xff1a;指模型在訓練…

商品分類拖拽排序設計

商品分類、菜單項以及其他需要排序的元素常常會用到拖拽排序功能。這個看似簡單的交互背后&#xff0c;其實涉及到一系列復雜的后端邏輯處理&#xff0c;尤其是在如何高效地更新數據庫記錄方面。本文將探討兩種常見的實現方案&#xff0c;并分析各自的優缺點&#xff0c;幫助你…

ROS機器人云實踐設計申報書-草稿

ROS機器人云實踐作品申報書 ROS機器人云實踐設計一、項目基本信息 項目名稱&#xff1a;基于ROS的移動機器人云實踐平臺設計與應用 申報單位&#xff1a;[具體單位名稱] 項目負責人&#xff1a;[具體參與人員] 申報日期&#xff1a;[填寫日期] 二、項目背景與目標 項目背景&…

Jira 根據問題類型 為 描述 字段添加默認值

背景: jira 8.16 想要為問題類型為 需求 的問題默認增加描述字段默認值 想都沒想直接根據之前添加缺陷類型時描述默認值的方式去添加(系統字段--描述--上下文和默認值--添加上下文), 結果不隨我愿, 系統默認的這個功能不能根據問題類型切換而切換不同的默認值, 只能設置 1 個…

深度學習(5):激活函數

ss激活函數的作用是在隱藏層引入非線性&#xff0c;使得神經網絡能夠學習和表示復雜的函數關系&#xff0c;使網絡具備非線性能力&#xff0c;增強其表達能力。一、常見激活函數1、sigmoid激活函數的作用是在隱藏層引入非線性&#xff0c;使得神經網絡能夠學習和表示復雜的函數…

洛谷 小 Y 拼木棒 貪心

題目背景上道題中&#xff0c;小 Y 斬了一地的木棒&#xff0c;現在她想要將木棒拼起來。題目描述有 n 根木棒&#xff0c;現在從中選 4 根&#xff0c;想要組成一個正三角形&#xff0c;問有幾種選法&#xff1f;答案對 1097 取模。輸入格式第一行一個整數 n。第二行往下 n 行…