theme: smartblue
本文正在参加「金石计划 . 瓜分6万现金大奖」
前言
马赛克效果相信大家都见过吧,但是如何实现马赛克效果大家知道吗?比较常见的方式有对背景模糊处理。除了这个方法,其实还有一个 CSS
属性可以实现这个效果 —— image-rendering: pixelated
。当然仅仅靠这个方法来实现马赛克效果就太单调啦,需要配合一些其他内容来丰富一下马赛克了。
进入主题
这个“不一样”的马赛克将全程纯 CSS
来实现,因此不用担心 JS
不会了。最终效果在文末可查看。
前期准备
我们实现的是一个可悬停的像素化马赛克,悬停知道,像素化马赛克也知道,将它俩结合到一起就是我们需要的 CSS
效果了。
我们需要准备两张图片,这两张图片有讲究,尽量选择正方形尺寸的图片,以及尺寸应为平方倍(就是如果一张图片尺寸为 900X900,那么另一张图片就应该为 30X30)。为啥要这么做呢?因为我这里的马赛克就是用 30X30 的图片来实现的,因此这样做就可以完美覆盖整张 900X900 的图,这样就达到了马赛克的效果。
我这里采用的是 900X900 以及 30X30 尺寸的图片,如下所示:
<body>
<div class="wrapper">
<div class="container">
<img src="./900x900.jpg" >
<img src="./30x30.jpg" >
</div>
</div>
</body>
以下就是我的文件结构了。
CSS 样式设计
完成准备工作后,开始进行 CSS
样式设计了。整体设计不难,对图片进行样式处理,规定好图片大小尺寸以及排版效果(这里就一张图片,排版效果就不用大费周章了👀)。相关代码如下:
.wrapper{
position: relative;
width: 900px;
display: flex;
align-items: center;
justify-content: space-between;
}
.wrapper .container{
position: relative;
width: 400px;
height: 400px;
}
经过上面一顿简单的操作,目前初步的效果如下所示:
然后进行这里整个流程的关键部分,需要请上我们的主力元素 image-rendering: pixelated
。简单点理解它就是用来做马赛克效果的。只需在图片里加入这个属性即可。相关代码如下:
.wrapper .container img{
position: absolute;
top: 0;
left: 0;
width: 100%;
height: 100%;
image-rendering: pixelated;
}
加入这个属性后,图片就会有如下马赛克的效果:
目前马赛克效果是静态的,但是我们需要的是一个可以悬停式效果的马赛克。这时候就需要 hover
来控制悬停来。并且在 hover
里加入一个过渡效果会更佳哟👀。过渡效果可以通过 transition
来实现。相关代码如下所示:
.wrapper .container img:last-child{
transition: 3s;
}
.wrapper .container:hover img:last-child{
transition: 3s;
opacity: 0;
}
最终效果可看效果展示 ⬇️。
效果展示
当鼠标移出图片,图片将出现一层马赛克;当鼠标重新移回到图片,马赛克就会消失。
总结
以上就是整个效果的实现方法流程了,其实是很简单的。除了学会了好玩的效果,并且还掌握了一个新属性 —— image-rendering: pixelated
。两全其美,岂不美哉?
虽然该效果没有用到 JS
,但是这是优化的空间,对 JS
感兴趣的同学可以加入 JS
部分来使其更加丰富完整。
总之,大家可以去试试这个效果。如果还有完善的空间,欢迎大家在评论区告诉我,让这个马赛克效果变得更丰富起来。
暂无评论内容