写点什么

CSS 基于文字的图片马赛克你见过吗

作者:南城FE
  • 2022 年 7 月 06 日
  • 本文字数:1635 字

    阅读完需:约 5 分钟

CSS 基于文字的图片马赛克你见过吗

看到封面这张图,是不是如同艺术品一般,第一次看到这张图时,是比较震惊的,迫不及待的研究其源码是如何实现的,最后更为惊奇的是只需要纯 CSS 即可实现,接下来就展开说明实现过程。

前置知识点

实现此效果需要了解 2 个前置的 CSS 知识点,滤镜filter属性中的contrastmix-blend-mode属性。

filter: contrast

filter属性相信都有所触过,比如常见的blur()函数用于高斯模糊图片。除此之外还有很多其他函数可用,如下表所示:



今天主要用到的是contrast,用于调整图像的对比度。如下图所示,右侧图片是增加了filter: contrast(50%)的效果。



浏览器兼容情况如下所示:


mix-blend-mode

mix-blend-mode该 CSS 属性作用是让元素内容和这个元素的背景以及下面的元素发生“混合”。设置不同 mix-blend-mode 值的效果如下所示:



具体含义解释如下:


  • multiply混合后通常颜色会加深,多用在白色背景图片和其他元素的混合,以及彩色纹理的合并上。

  • screen 混合后颜色会减淡,非常适合实现霓虹灯光效果,适合黑色背景素材和其他元素混合,非常实用。

  • overlay 在颜色值暗的时候,采用了类似“正片叠底”的算法,而颜色亮的时候,采用了类似“滤色”的算法。此混合模式比较适合实现文字水印效果。

  • darken表示哪个颜色暗使用哪个颜色,在 web 开发中,给图形或文字着色会很实用。

  • lighten是哪个颜色浅就表现为哪个颜色,在 web 开发中,给图形或文字着色会很实用。

  • color-dodge颜色减淡混合模式可以用来保护底图的高光,适合处理高光下的人物照片。

  • color-burn颜色加深混合模式可以用来保护底图的阴影,适合处理幽深秘境一类的照片,通过和特定的色彩进行混合,可以营造更加幽深的意境。

  • hard-light的效果是强光,最终的混合效果就好像耀眼的聚光灯照射过来,表现为图像亮的地方更亮,暗的地方更暗。多用在图像表现处理上。

  • soft-light的效果是柔光,最终的混合效果就好像发散的光源弥漫过来,表现效果和 hard-light 有类似之处,只是表现没有那么强烈。给图像着色的时候常用此混合模式。

  • difference是差值效果,可以实现颜色的反色效果。

  • exclusion的效果是排除,最终的混合效果和 difference 模式是类似的,区别在于 exclusion 的对比度要更低一些。


接下来要介绍的 4 种混合模式都属于颜色系混合模式,在 web 开发中不常用,还是传统的图像表现处理领域用的较多。


  • hue表示色调混合,最终的效果是混合后的颜色使用底层元素的亮度和饱和度,而使用上层元素的色调。

  • saturation表示饱和度混合,混合后的颜色保留底图的亮度和色调,使用顶图的饱和度。

  • color表示颜色混合,混合后的颜色保留底图的亮度,使用顶图的色调和饱和度。

  • luminosity表示亮度混合,混合后的颜色保留底图的色调和饱和度,使用顶图的亮度,和 color 模式正好是相反的。


浏览器兼容情况如下所示:


代码开发

今日主图的效果主要就是用到了滤镜filter属性中的contrastmix-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%;}
复制代码


经过处理后的下图你能不看源码猜到是哪位明星吗?


最后

今日只用到了 filtermix-blend-mode 的一个属性,还很很多的功能等着你去发现,有兴趣的同学可以尝试用起来吧,CSS 的世界等着你来发掘~ 看完如果觉得有用,记得点个赞再走,收藏起来说不定哪天就用上啦~


专注前端开发,分享前端相关技术干货,公众号:南城大前端(ID: nanchengfe)

参考

用户头像

南城FE

关注

还未添加个人签名 2019.02.12 加入

专注前端开发,分享前端知识

评论

发布
暂无评论
CSS 基于文字的图片马赛克你见过吗_CSS_南城FE_InfoQ写作社区