有没有人知道用图像或CSS来复制Photoshop的乘法图层模式的好方法?
我正在开发一个项目,当你悬停在缩略图上时会出现颜色叠加,但设计师使用了一个设置为“乘法”的图层,我无法想出如何在网页上实现它。
我想到的最好的方法是使用rgba或透明png,但即使这样也看起来不正确。
现在有一些新的CSS属性被引入来完成这个操作,它们是blend-mode
和background-blend-mode
。
目前,你无法在任何生产环境中使用它们,因为它们非常新,并且目前仅由Chrome Canary (实验性浏览器) 和 Webkit Nightly 支持。
这些属性的设置与Photoshop的混合模式几乎完全相同,并允许将各种不同模式设置为这些属性的值,例如overlay
,screen
,lighten
,color-dodge
和当然还有multiply
等。
blend-mode
将允许图像(以及可能的内容?尽管我此时没有听到任何建议。)在彼此上面分层时应用这种混合效果。
background-blend-mode
会相当类似,但是更适用于背景图像(使用background
或background-image
设置)而不是实际的图像元素。
编辑: 随着浏览器支持的增加,下一部分正在变得有点不相关了... 请查看此图表以了解哪些浏览器支持此功能:http://caniuse.com/#feat=css-backgroundblendmode
如果你在计算机上安装了最新版本的Chrome浏览器,你实际上可以通过在浏览器中启用一些标志来查看这些样式的使用(只需将这些内容放入地址栏即可:)
chrome://flags/#enable-experimental-web-platform-features
chrome://flags/#enable-css-shaders
* note that the flags required for this might change at any time
启用这些样式后,查看此代码片段: http://jsfiddle.net/cqzJ5/ (如果您的浏览器已正确启用样式,则两个图像应混合在一起,使场景看起来像是在水下)
尽管目前对此功能的支持几乎不存在,这可能不是最合法的答案,但我们可以希望现代浏览器将在不久的将来采用这些属性,为我们提供一个非常好的且简单的解决方案。
关于混合模式和CSS属性的更多阅读资源:
简单而带有一点SVG:
<svg width="200" height="200" viewBox="10 10 280 280">
<filter id="multiply">
<feBlend mode="multiply"/>
</filter>
<image id="kitten" x="0" y="0" width="300" height="300" xlink:href="http://placekitten.com/300" />
</svg>
还有一些 CSS:
#kitten:hover {
filter:url(#multiply);
}
仅供参考,这位开发者正在开发一个库来实现这一点。我在研究过程中了解到了这个库,但尚未尝试过。
如果你掌握诀窍,就可以用24.png实现这个功能。
在Illustrator中,您可以将图形导出为24.png,但似乎从未像multiply一样起作用。
我找到了一个方法。
当z-index(ed)位于图片顶部时,它的效果就像multiply一样。
没有这样的能力可用。你能获得的仅仅是:
在 HTML5 <canvas>
上使用 lighter
合成模式(它是 a+b,而不是 a*b,且与“相乘”相反)
IE 中的 min
或 subtract
Compositor
滤镜。
两者都不是实际可行的。
通常情况下,你不应尝试将 Photoshop comps 导出为层,而是将它们渲染为单个不透明图像。对于滚动鼠标,你可以制作两张图片(一张用于正常状态,一张用于悬停状态),并使用 CSS 的 :hover 样式来选择不同的背景图片,或者更好的方法是——将两张图片合并为一张,并使用 background-image
/background-position
来在每个状态下显示正确的图像部分作为背景图像(“CSS sprites”)。
Alt/Option + 单击
。
5. 现在将你的乘法图层复制并粘贴到蒙版中。
6. Cmd/Ctrl + i
反转刚刚粘贴的图层。
7. 在这个图层下面创建一个新图层,并将图片添加到乘法叠加层后面。
8. 一切应该看起来与你想要的结果非常接近。如果需要,可以调整我们创建的蒙版图层的opacity
。
9. 当它看起来不错时,只需切换底层的可见性并将蒙版图层保存为PNG即可!不确定你是否会有什么好运气。据我所知,即使你尝试使用一些高级的JavaScript进行集成,也不可能实现。
z-index
吗?这里有一个使用z-index
进行图层排序的示例:http://jsfiddle.net/ZDroid/VWMMu/ - user1261322