2014-08-29 139 views
12

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

我需要实现这样的事情 -


enter image description here

我一直在寻找了很多,但一直没能弄明白。 我找到的最有帮助的资源是http://blogs.adobe.com/webplatform/2012/07/17/new-blending-features-in-css/,它显示了如何使用Canvas进行操作。 使用CSS可以做同样的事情吗?

编辑


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

+0

我发现[这个问题](http://stackoverflow.com/questions/23986063/using-css-blend-mode-on-dom-element-above-the-element-with-the-background-image)这可能有帮助。 – 2014-08-29 10:56:05

+1

你尝试在同一个元素上使用多个背景吗?像这样:第一个背景是左边的红色圆圈,第二个背景是右边的绿色圆圈。我认为你可以用纯CSS来绘制它,也许可以用一些渐变或类似的东西。你也可以尝试使用CSS伪元素(':after'和':before') – pomeh 2014-08-29 10:56:07

+0

基本上......不。混合模式尚未在CSS中提供,并且没有CSS替代方案。尽管你可能**能够在JS中做些事情。 – 2014-08-29 11:26:04

回答

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/

这是我开始使用火狐31的结果:

circles

即使浏览器支持似乎“正确”(见这里http://caniuse.com/#feat=css-backgroundblendmode),请请注意0​​属性现在具有候选推荐状态,所以在使用它时要小心(感谢@Paulie_D指出了这一点)。

+0

正如我所提到的,我需要合并“2个元素”的背景颜色圈子只是一个例子,我的形状有点复杂,需要使用不同的HTML元素创建(例如,考虑2个重叠的菱形形状) 。有没有可能用CSS做到这一点? – 2014-09-01 09:56:53

+0

@KshitizShankar我不知道这是可能的,'背景混合模式'只适用于一个元素。请更新你的问题,并在你需要的**完全**上添加细节**:我的答案似乎与你的问题一致,但你的问题并不符合你真正需要的东西,所以你永远不会找到有用的答案。 – pomeh 2014-09-01 10:29:21

+0

我编辑了这个问题,并附上了我需要混合的实际形状的小提琴。我不确定我是否可以使用CSS来实现它.. – 2014-09-01 11:00:54

1

试试这个纯粹的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

+0

我正在寻找一个答案,用CSS来做。我已经知道我可以使用JS和Canvas来实现它 – 2014-08-29 12:08:42

+1

DyspraxicDesigner你的编辑对你的响应是一个太激进的改变,它完全改变了你的响应内容(从JavaScript解决方案到CSS的一个)。将来请注意,因为@KshitizShankar现在必须重新考虑你的回应。如果您真的想做出如此彻底的改变,请发布一个新答案,然后删除第一个答案。谢谢。 – pomeh 2014-08-30 09:41:00