【问题标题】:Blending 2 elements background colors using CSS使用 CSS 混合 2 个元素的背景颜色
【发布时间】:2025-12-25 21:55:10
【问题描述】:

我需要使用 CSS 混合 2 个元素的背景颜色 我一直在摆弄background-blend-mode:multiply,但只有当我在同一个元素中有两种颜色时才有效。

我需要实现这样的目标 -


我已经搜索了很多,但无法弄清楚。 我找到的最有用的资源是New blending features in CSS,它展示了如何使用 Canvas 进行操作。 是否可以使用 CSS 做同样的事情?

编辑


上面的圆圈只是显示我需要的示例。正如我所提到的,我正在寻找两种不同元素的混合颜色。我为我需要混合的实际形状创建了一个小提琴。 http://jsfiddle.net/fmgfsr4o/2/

【问题讨论】:

  • 我发现 this question 可能会有所帮助。
  • 你试过在同一个元素上使用多个背景吗?像这样:第一个背景是左边的红色圆圈,第二个背景是右边的绿色圆圈。我认为你可以用纯 CSS 来绘制它,也许有一些渐变或类似的东西。您也可以尝试使用 CSS 伪元素(:after:before
  • 基本上...没有。混合模式在 CSS 中尚不可用,并且没有 CSS 替代方案。你也许可以在 JS 中做一些事情。
  • @Paulie_D CSS 混合模式似乎在最新的 Firefox、Chrome 和 Opera 中可用,甚至在 Android 版 Chrome 中也可用,请查看:caniuse.com/#feat=css-backgroundblendmode
  • 目前它是一个候选推荐,所以它还不是我们应该在生产中使用的东西。

标签: javascript html css photoshop


【解决方案1】:

您可以将 CSS 多重背景与径向渐变相结合来实现此效果:

CSS

div {
  /* adjust the width of the container to adjust circle's
     overlap size and shape */
  width: 80px;
  height: 50px;
  /* for debug purpose only */
  border: solid blue 1px;

  background:
    /* draw the red circle */
    radial-gradient(red 0%, red 70%, transparent 70%, transparent 100%) 0 0,
    /* draw the green circle */
    radial-gradient(green 0%, green 70%, transparent 70%, transparent 100%) 0 0;
    /* the red on the left, the green on the right */
  background-position: top left, top right;

  /* you can make then bigger or smaller */
  /* but you have to change width size above too */
  background-size: 50px 50px;
  /* You want both circles to appears once only */
  background-repeat: no-repeat;

  /* you can try with other values too */
  /* https://developer.mozilla.org/en-US/docs/Web/CSS/background-blend-mode */
  background-blend-mode: multiply;
}

HTML

<div></div>

我已经做了一个 JSFiddle 给你试试:http://jsfiddle.net/pomeh/07nLpwwj/

这是我使用 Firefox 31 得到的结果:

即使浏览器支持看起来“正确”(参见此处http://caniuse.com/#feat=css-backgroundblendmode),请注意background-blend-mode 属性目前处于候选推荐状态,因此在使用时要小心(感谢@Paulie_D 指出出)。

【讨论】:

  • 正如我提到的,我需要合并“2 个元素”圆圈的背景颜色只是一个例子,我的形状有点复杂,需要使用不同的 HTML 元素创建(例如,考虑2 个重叠的菱形)。用 CSS 可以做到这一点吗?
  • @KshitizShankar 我不确定这是否可能,background-blend-mode 仅适用于一个元素。请更新您的问题并添加有关确切的详细信息:我的回答似乎与您的问题相对应,但您的问题与您真正需要的不相符,因此您永远找不到有用的答案那样。
  • 我已经编辑了这个问题,并为我需要混合的实际形状附加了一个小提琴。我不确定是否可以使用 CSS 实现它..
  • 我也不确定:/ 你小提琴中的演示使用伪元素 :after:before 但这些被认为是不同的元素,你不能在它们之间使用混合模式.如果形状在图像中并且您使用background-image: url(firstShape), url(secondShape),也许它可以工作,但它需要使用外部图像,它可能不是您想要的:/
  • 是的,我想这对 CSS 来说是不行的。将来可能会!非常感谢所有的帮助。我将坚持使用图像,然后使用我认为的 CSS 混合它们..
【解决方案2】:

试试这个纯 CSS3,虽然你需要弄清楚如何定位圆圈。

html {
height: 100%;
background:
    repeating-radial-gradient(
        circle,
        transparent,
        transparent 3.5em,
        tomato 1em,
        tomato 4.5em
    ),
    repeating-radial-gradient(
        circle,
        transparent,
        transparent 3.5em,
        dodgerblue 3.5em,
        dodgerblue 4.5em
    );

background-blend-mode: multiply;
background-size: 10em 10em;
background-position:
    0 0,
    5em 5em,
    10em 5em;
}

JSFiddle

【讨论】:

  • 我正在寻找使用 CSS 的答案。我已经知道我可以使用 JS 和 Canvas 来实现它
  • DyspraxicDesigner 您的编辑对您的响应进行了过于激进的更改,它完全改变了您响应的内容(从 JavaScript 解决方案到 CSS 解决方案)。将来请注意这一点,因为现在@KshitizShankar 必须重新考虑您的回复。如果你真的想做出如此彻底的改变,请发布一个新的答案,然后删除第一个。谢谢。
最近更新 更多