看到封面这张图,是不是如同艺术品一般,第一次看到这张图时,是比较震惊的,迫不及待的研究其源码是如何实现的,最后更为惊奇的是只需要纯 CSS 即可实现,接下来就展开说明实现过程。
前置知识点
实现此效果需要了解 2 个前置的 CSS 知识点,滤镜
filter
属性中的
contrast
和
mix-blend-mode
属性。
filter: contrast
filter
属性相信都有所触过,比如常见的
blur()
函数用于高斯模糊图片。除此之外还有很多其他函数可用,如下表所示:
Filter | 描述 |
---|---|
blur(px) | 给图像设置高斯模糊 |
brightness(%) | 将线性乘法器应用于输入图像,使其看起来或多或少地变得明亮 |
contrast(%) | 调整图像的对比度 |
drop-shadow() | 给图像设置一个阴影效果 |
grayscale(%) | 将图像转换为灰度图像 |
hue-rotate(deg) | 给图像应用色相旋转 |
invert(%) | 反转输入图像 |
opacity(%) | 转化图像的透明程度 |
saturate(%) | 转换图像饱和度 |
sepia(%) | 将图像转换为深褐色 |
url() | 获取指向 SVG 滤镜的 URI,该 SVG filter 可以嵌入到外部 XML 文件中 |
今天主要用到的是
contrast
,用于调整图像的对比度。如下图所示,右侧图片是增加了
filter: contrast(50%)
的效果。
浏览器兼容情况如下所示:
mix-blend-mode
mix-blend-mode
该 CSS 属性作用是让元素内容和这个元素的背景以及下面的元素发生“混合”。设置不同
mix-blend-mode
值的效果如下所示:
具体含义解释如下:
-
混合后通常颜色会加深,多用在白色背景图片和其他元素的混合,以及彩色纹理的合并上。multiply
- screen 混合后颜色会减淡,非常适合实现霓虹灯光效果,适合黑色背景素材和其他元素混合,非常实用。
- overlay 在颜色值暗的时候,采用了类似“正片叠底”的算法,而颜色亮的时候,采用了类似“滤色”的算法。此混合模式比较适合实现文字水印效果。
-
表示哪个颜色暗使用哪个颜色,在 web 开发中,给图形或文字着色会很实用。darken
-
是哪个颜色浅就表现为哪个颜色,在 web 开发中,给图形或文字着色会很实用。lighten
-
颜色减淡混合模式可以用来保护底图的高光,适合处理高光下的人物照片。color-dodge
-
颜色加深混合模式可以用来保护底图的阴影,适合处理幽深秘境一类的照片,通过和特定的色彩进行混合,可以营造更加幽深的意境。color-burn
-
的效果是强光,最终的混合效果就好像耀眼的聚光灯照射过来,表现为图像亮的地方更亮,暗的地方更暗。多用在图像表现处理上。hard-light
-
的效果是柔光,最终的混合效果就好像发散的光源弥漫过来,表现效果和 hard-light 有类似之处,只是表现没有那么强烈。给图像着色的时候常用此混合模式。soft-light
-
是差值效果,可以实现颜色的反色效果。difference
-
的效果是排除,最终的混合效果和exclusion
模式是类似的,区别在于difference
的对比度要更低一些。exclusion
接下来要介绍的 4 种混合模式都属于颜色系混合模式,在 web 开发中不常用,还是传统的图像表现处理领域用的较多。
-
表示色调混合,最终的效果是混合后的颜色使用底层元素的亮度和饱和度,而使用上层元素的色调。hue
-
表示饱和度混合,混合后的颜色保留底图的亮度和色调,使用顶图的饱和度。saturation
-
表示颜色混合,混合后的颜色保留底图的亮度,使用顶图的色调和饱和度。color
-
表示亮度混合,混合后的颜色保留底图的色调和饱和度,使用顶图的亮度,和 color 模式正好是相反的。luminosity
浏览器兼容情况如下所示:
代码开发
今日主图的效果主要就是用到了滤镜
filter
属性中的
contrast
和
mix-blend-mode
属性中的
multiply
。
为了达到效果的同时也能阅读文字,所以设置图片的对比图
filter: contrast(60%)
。再将整个文本设置绝对定位置于图片上方,并设置
mix-blend-mode: multiply
即可达到图片所示的效果。核心代码如下所示:
<div>
<img src="https://xxx.jpeg">
<p>
***
文本内容
***
</p>
</div>
CSS 代码:
div {
position: relative;
overflow: hidden;
}
img {
width: 100%;
filter: contrast(60%);
}
p {
line-height: 1;
font-size: 1.76vw;
color: #fff;
background: #000;
mix-blend-mode: multiply;
position: absolute;
top: 0;
width: 100%;
height: 100%;
}
最后
参考
- mix-blend-mode
- filter
- CSS3 混合模式 mix-blend-mode 简介