当前位置: 首页 > Web前端 > CSS

CSSfilter在生成不规则边框之前做了很多特殊布局

时间:2023-03-30 18:22:17 CSS

比如这两篇文章,CSS实现优惠券,CSS实现tooltips,支持渐变,如下,但是一直有个痛点:不能给这些图形加边框,今天带来一个小技巧:使用drop-shadow来搞定一行代码实现所有不规则边框1.投影这里需要用到阴影投影。不太了解的可以参考这篇文章:被低估的CSS滤镜镜像:drop-shadow,这里简单介绍一下语法其实很简单的filter:drop-shadow(offset-xoffset-yblur-radiuscolor)不是一个单独的属性,而是filter滤镜下的一个方法,这里offset-x,offset-y是偏移量,blur-radius是模糊半径,color是投影颜色。实际效果是可以模拟真实世界的投影(透明部分不会投影),区别如下遗憾的是,虽然和box-shadow类似,但是缺少扩展半径。试想一下,如果支持扩展半径,是不是很容易做出不规则的边框(应该不支持,因为现实世界的投影是没有扩展半径的)?那么,阴影是如何产生边框的呢?2.多重投影box-shadow可以轻松实现多重投影box-shadow:003px#333,1px1px5px#666,...可以无限叠加。但是drop-shadow是不行的,比如filter:drop-shadow(003px#333,1px1px5px#666,...),可以看到浏览器直接认为不合法,但是可以改一下思路,虽然drop-shadow不支持,但是filter支持多个滤镜,所以filter可以这样实现:drop-shadow(003px#333)drop-shadow(003px#333)drop-shadow(003px#333)...这样就生效了,是不是有点像边框?如果只设置0.5px的模糊,多叠加几次,模糊的部分会变得更清晰。这有点像柔和的笔触。多划几下,就会变得更清晰,这样就可以得到这样的效果,而且会更接近,实际中可能需要微调,完美解决(重点来了~).wrap{filter:阴影(0px0px0.5px#333)阴影(0px0px0px#333)阴影(0px0px0px#333)阴影(0px0px0px#333)阴影(0px0px0px#333)}这样实现的边框足够清晰,基本可以日常使用。这段代码有很多颜色。可以优化,投影颜色默认跟随当前文字颜色,所以可以简化为.wrap{filter:drop-shadow(000.5px)drop-shadow(000)drop-shadow(000)drop-shadow(000)drop-shadow(000);color:#333;}网上的例子可以访问coupon-border,和thistooltips-border3.使用和限制使用方法很简单,在容器的最外层添加这行CSS即可。比如之前的优惠券例子,得到的边框效果还不错,几乎没有投影。不过这里要注意,mask裁剪出来的图形需要在外层嵌套一层parent,否则投影会直接被mask裁掉

另外,这种方案适合比较小的边框。边框越大可能会更平滑,需要叠加更多的滤镜来提升效果也不是很好,需要选择下面的(一般不会有太粗的边框)4.总结和解释这个文章介绍了一种实现不规则边框的通用方案,成本很低,效果也很好。这里总结一下:drop-shadow只会对不透明的部分产生投影,符合真实的物理世界。drop-shadow不支持多投影,filter支持多滤镜,可以间接实现多投影。对生成的图形进行裁剪,需要在外面包裹一层容器,然后生成适合比较小的frame的frame,过大的frame并不理想。filter其实是一个比较耗性能的属性,并不适合大范围的使用。大多数学生可能最终会得到它。我仍然会选择“cutimage.png”,但这也是一种解决方案。多一种解决方案总是对的。最后,如果您觉得还不错,对您有帮助,请点赞、收藏、转发???