Can HTML and CSS only create an overlay which ignores transparent area on an image automatically?
例如,它有一个具有透明背景的图像:
我想在上面添加一个灰色覆盖(例如,一个DIV,或者画布…)。
但我希望覆盖会自动忽略图像上的透明区域:
纯HTML和CSS(例如,按DIV、Canvas…)可以这样做吗?
尝试覆盖混合模式。或者乘法!(不支持IE或EDGE,谢谢@stilltorik)
1 2 3 4 5 6 7 | .multiplied { background-color: blue; width:250px; height: 100px; margin-top: -100px; mix-blend-mode: overlay; } |
1 | <img src='https://i.stack.imgur.com/4yUEW.png'/> |
有点老土的方式:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | .alpha-mask { mask-image: url(https://i.stack.imgur.com/FwTzE.png); -webkit-mask-image: url(https://i.stack.imgur.com/FwTzE.png); mask-mode: alpha; -webkit-mask-mode: alpha; mask-repeat: no-repeat; -webkit-mask-repeat: no-repeat; } .overlay { background-color: #000; position: absolute; top: 120px; left: 0; width: 100%; height: 100%; opacity: 0.2; } |
1 2 3 4 | <img class="alpha-target" src="https://i.stack.imgur.com/FwTzE.png" /> </article> |
看它工作。
在不了解这个问题的完整用例的情况下,我会说答案是"是的,但是跨浏览器兼容性将是一个麻烦"。
这里发布的另外两个答案显示了如果兼容性不是一个问题的话,它可能是如何实现的,但是我认为这是一个可以做得更简单的事情,通过一些创造性的photoshop,然后分层的元素。
我会怎么做:
PS图象处理软件:把你的基础图像(我假设它是PNG,因为它有一个alpha通道)加载到photoshop中。选择要屏蔽的区域。编辑>复制合并。创建新层,然后编辑>粘贴。将新图层的颜色更改为您希望遮罩覆盖的颜色,并添加阿尔法通道效果。确保关闭默认背景,然后将新层保存为PNG。
HTML:
1 |
CSS:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | .container { height: 300px; width: 300px; position: relative; } .original-image { height: 300px; width: 300px; background : url(../images/myimage.png) no-repeat top center; } .mask { height: 300px; width: 300px; position: absolute; left: 0; top: 0; z-index: 1; //or more depending on what else is going on in the layout background : url(../images/mask.png) no-repeat top center; } |
在本例中,容器的尺寸必须与图像和遮罩的尺寸相同,以便绝对定位将遮罩正确对齐到图像上。将图像制作成背景可以让你用类似于内容的类型来填充分区。这样做的主要优势,而不是这里其他地方建议的CSS,是这应该适用于几乎所有的浏览器。