You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用CSS函数将白色背景上的rgba/hsla转为不透明rgb/hsl?

用CSS函数将白色背景上的半透明rgba/hsla转换为不透明rgb/hsl

没问题,color-mix() 就是专门解决这类需求的CSS函数。半透明颜色在白色背景上呈现的视觉效果,本质是该颜色与白色按透明度比例混合后的结果,我们可以直接用color-mix()模拟这个叠加过程,得到对应的不透明等效色。

实现代码

直接修改你的CSS中.solid类的背景属性即可:

body {
  background: repeating-linear-gradient(
    45deg,
    lightgray 0px 2px,
    white 2px 12px
  );
  --background-primary: rgba(31, 198, 149, 0.5);
}

.box {
  width: 200px;
  height: 50px;
  margin-top: 10px;
}

.transparent {
  background: var(--background-primary);
}

.solid {
  /* 用color-mix混合半透明色与白色,自动生成不透明等效色 */
  background: color-mix(in srgb, var(--background-primary), white);
}

对应的HTML部分保持不变:

<body>
  <div class="box transparent">
    rgba(31, 198, 149, 0.5)
  </div>
  <div class="box solid">
    rgb(143, 227, 202)
  </div>
</body>

原理说明

color-mix(in srgb, 颜色A, 颜色B)会按照颜色的透明度比例自动计算混合后的结果:

  • 对于你给出的示例rgba(31, 198, 149, 0.5),它表示50%的原颜色 + 50%的白色背景
  • 每个颜色通道的计算方式为:原通道值 * alpha + 255 * (1 - alpha),比如红色通道:31*0.5 + 255*0.5 = 143,和你给出的目标rgb值完全匹配

如果你的背景色不是纯白,只需要把color-mix()里的white替换成对应的背景色即可,这个函数在现代浏览器中都能正常使用。

内容的提问来源于stack exchange,提问作者Anton Fil

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.17 06:44:56