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 行…