最近遇到这样的问题。直接在封面上显示书名时,可能会出现标题不清晰的情况(容易被背景干扰)。为了解决这个问题,设计师提出了一个“终极”的解决方案,将书名后面的图片模糊化,这在CSS中很容易实现,只需要一个backdrop-filter.name{backdrop-filter:blur(10px);}当然,现在blur模糊了,但是边缘太“有缺陷”,导致书名和封面“格格不入”。效果如下。如果边缘可以羽化,边缘效果虚化,书名可以很好的融入背景。羽化是photoshop的术语,羽化的原理是模糊选中区域内外的连接,起到渐变的作用达到自然衔接的效果,是PS等版本处理图片的重要工具,这是设计最后的羽化效果,可以保证文字清晰可见,避免过于突兀,如下:设计人员实现这一点非常简单,只需用n橡皮擦,CSS呢?下面我们来探讨一下CSS是如何实现羽化效果的。1、羽化原理Feathering其实就是模糊边缘。在CSS中,它实际上是创建一个边缘模糊的蒙版,即需要半透明的渐变。关于面膜,这里简单介绍一下。基本语法很简单,和后台基本一致。也可以使用PNG图片、SVG图片、渐变绘制的图片,也支持多图叠加。遮蔽的原理很简单。最终效果只显示不透明部分,透明部分将不可见。让我们用半透明类比来举一个圆形的例子。这个比较简单,因为可以直接通过径向渐变来创建。比如下面有个头像,现在直接放在背景上很突兀。我们可以通过径向渐变绘制这个头像,绘制一个从不透明到透明的蒙版,达到与背景融合的效果。head{-webkit-mask:radial-gradient(closest-sidecircle,#00060%,transparent100%);}原理是这样的:最终效果如下:当然这是一个圆,万一是呢一个长方形?2.矩形的羽化原理根据上面的分析,如果要对矩形的边缘进行羽化,就需要创建这个mask。那么问题来了,如何创建这个边缘模糊的矩形呢?好像没办法直接通过gradients来实现,还需要size-adaptive(自动跟随容器大小)。如果单纯看这样一个矩形,还是很容易实现的。可以通过box-shadow.shadow{width:200px;来实现高度:200px;背景:黑色;边界半径:10px;box-shadow:005pxblack,0010pxblack,0015pxblack}根据需求,**可以加几层box-shadow**,这里是三层叠加,效果如下但是问题又来了,这样的dom是不能直接作为mask-image的,那么怎么处理呢?3.将SVGforeignObject转为图片上面说了CSS阴影可以很轻松的达到想要的效果,可惜现在还停留在dom阶段,所以需要将这个dom转为图片。在这里,您需要使用SVG中的foreignObject[1]元素。通过这个元素,可以将HTML嵌入SVG,轻松实现dom转图片的效果。原理如下:回到这里,我们只需要将上面的结果放入foreignObject元素即可。由于需要自适应大小,这里body的宽高都是100%,如下
