首页 > 其他分享 >CSS 如何实现羽化效果

CSS 如何实现羽化效果

时间:2024-04-01 16:12:11浏览次数:30  
标签:box 遮罩 羽化 效果 SVG black shadow CSS

羽化是photoshop术语,羽化原理是令选区内外衔接部分虚化,起到渐变的作用从而达到自然衔接的效果,是ps及其其它版本中的处理图片的重要工具。

一、羽化的原理

羽化其实就是将边缘变得模糊,在 CSS 中其实就是创建一个边缘模糊的遮罩(mask),也就是需要一种半透明的渐变。

关于遮罩,这里简单介绍一下,基本语法很简单,和background的语法基本一致

.content{
  -webkit-mask: '遮罩图片' ;
}
/*完整语法*/
.content{
  -webkit-mask: '遮罩图片' [position] / [size] ;
}

这里的遮罩图片和背景的使用方式基本一致,可以是PNG图片SVG图片、也可以是渐变绘制的图片,同时也支持多图片叠加

遮罩的原理很简单,最终效果只显示不透明的部分,透明部分将不可见,半透明类推

先举个圆形的例子,这个比较简单,因为可以直接通过径向渐变创建

比如,下面有一个头像,现在直接放在背景上非常突兀

我们可以将这个头像通过径向渐变绘制出了一个从不透明到透明的遮罩,达到和背景融合的效果

.head{ -webkit-mask: radial-gradient(closest-side circle,#000 60%, transparent 100%); }

原理是这样的

最后效果如下

 

二、矩形的羽化原理

根据上面的分析,如果希望羽化矩形边缘,需要创建这一个遮罩

那么问题来了,如何创建这一个边缘模糊的矩形呢?貌似没办法直接通过渐变来实现,而且还需要是尺寸自适应的(自动跟随容器尺寸)

如果单纯看这样一个矩形,还是很容易实现的,通过box-shadow即可实现

.shadow{ width: 200px; height: 200px; background:black; border-radius:10px; box-shadow:0 0 5px black, 0 0 10px black, 0 0 15px black }

根据需求,可以多叠加几层box-shadow,这里叠加了3层,效果如下

三、通过 SVG foreignObject 转换成图片

上面提到,通过 CSS 阴影可以很轻松的实现我们说需要的效果,但可惜现在还是 dom 阶段,所以需要将这个 dom 转换成图像。

在这里,需要借助 SVG 中的foreignObject元素,通过这个元素,可以将 HTML嵌入到SVG中,轻松实现 dom 转图片的效果

有兴趣的可以参考之前这几篇文章

原理如下

回到这里,我们仅需要将上面的结果放到foreignObject元素中,由于需要自适应尺寸,这里的body宽高都是100%,如下

<svg xmlns="http://www.w3.org/2000/svg"> <foreignObject width="100%" height="100%"> <body class="wrap" xmlns="http://www.w3.org/1999/xhtml"> <style> .wrap{ box-sizing: border-box; margin: 0; height: 100%; padding: 10px; } .shadow{ height: 100%; background:black; border-radius:10px; box-shadow:0 0 5px black, 0 0 10px black, 0 0 15px black } </style> <div class="shadow"></div> </body> </foreignObject> </svg>

这样就得到了一个宽高自适应的SVG图像,无论宽高怎么变化,都是撑满的

别看这么多标签,这其实已经是一张图片,可以直接使用,接下来看看如何运用

四、矩形的羽化

其实上面得到的 SVG可以直接当成一个图片资源,正常使用了,就像这样

.name{ -webkit-mask: url('./fearher.svg') }

不过,也可以将这个SVG图片转换成内联形式,减少资源依赖,转换后仍然保持自适应特性

这里推荐张鑫旭老师的SVG在线压缩合并工具

转换后就是这个样子

.name{ -webkit-mask: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg'%3E%3CforeignObject width='100%25' height='100%25'%3E%3Cbody class='wrap' xmlns='http://www.w3.org/1999/xhtml'%3E%3Cstyle%3E.wrap%7Bbox-sizing:border-box;margin:0;height:100%25;padding:10px%7D.shadow%7Bheight:100%25;background:%23000;border-radius:10px;box-shadow:0 0 5px %23000,0 0 10px %23000,0 0 15px %23000%7D%3C/style%3E%3Cdiv class='shadow'/%3E%3C/body%3E%3C/foreignObject%3E%3C/svg%3E") }

效果如下

而且由于尺寸是动态的,换个书名也能完美适应

最后再来对比一下,下面哪个一眼看上去效果最好

五、总结一下

以上就是本文全部内容了,一个还不错的绘制小技巧,最后来回顾一下一些实现要点

  1. 羽化其实就是将边缘变得模糊,在 CSS 中其实就是创建一个边缘模糊的遮罩,也就是需要一种半透明的渐变。
  2. 圆形的边缘很好羽化,因为径向渐变可以直接绘制
  3. 矩形的边缘就稍微复杂点,因为不能直接通过渐变绘制
  4. 边缘模糊在 CSS 中很好实现,用 box-shadow 就行了
  5. 可以通过 SVG foreignObject 将 dom 转换成图片
  6. SVG 转换成内联形式,好处是减少资源依赖,转换后仍然保持自适应特性

标签:box,遮罩,羽化,效果,SVG,black,shadow,CSS
From: https://www.cnblogs.com/moranjl/p/18094077

相关文章

  • css样式重置
    @charset"utf-8";html{background-color:#fff;color:#000;font-size:12px}body,ul,ol,dl,dd,h1,h2,h3,h4,h5,h6,figure,form,fieldset,legend,input,textarea,button,p,blockquote,th,td,pre,xmp{margin:0;padding:0}body,input,textarea,button,select,pre,xmp,......
  • 清明节开展趣味主题h5互动玩法的效果是什么
    清明节是一个较为重要的节日,祭祀、踏青春游、吃青团等,对企业商家来说可以借势清明节开展多种不同形式的玩法,其中h5小游戏由于其线上互动效果及页面展示信息,可以有效实现品牌传播、渠道引流涨粉、用户促活等效果。而商家如何开展品牌主题营销,关键还是要看营销工具如何选择,除了......
  • 前端学习<二>CSS基础——15-Sass入门
    Sass简介大家都知道,js中可以自定义变量,css仅仅是一个标记语言,不是编程语言,因此不可以自定义变量、不可以引用等等。面对这些问题,我们现在来引入Sass,简单的说,他是css的升级版,可以自定义变量,可以有if语句,还可以嵌套等等,很神奇吧!那下面我们就来介绍返个神奇的Sass。Sas......
  • 前端学习<二>CSS基础——14-CSS3属性详解:Web字体
    前言开发人员可以为自已的网页指定特殊的字体(将指定字体提前下载到站点中),无需考虑用户电脑上是否安装了此特殊字体。从此,把特殊字体处理成图片的方式便成为了过去。支持程度比较好,甚至IE低版本的浏览器也能支持。字体的常见格式不同浏览器所支持的字体格式是不一样的,我......
  • 【Canvas与艺术】模拟八一电影制片厂电影片头效果
    【缘起】八一厂每部电影前都有其专有开头,如:https://www.ixigua.com/6799821997258834440?logTag=2eacce76401e13f9efe7,让人印象深刻。这个片头可以用canvas模拟一部分。【关键点】线型放射状粒子系统的运作。立体感五角星的绘制。【图例】【代码】<!DOCTYPEhtml><ht......
  • CSS继承性-行高的继承性
    CSS中行高的继承性是CSS继承特性中的一个具体表现。简单来说,如果一个元素(父元素)设置了行高(line-height),那么它的子元素会继承这个行高值,除非子元素本身也设置了行高。行高的继承性有助于保持文本在父子元素之间的一致性和可读性。例如,如果父元素的行高设置为1.5(这通常是相对于......
  • Cursor:你的前端“超能力”助手,一句话搞定HTML、CSS、JS!
    一、简介Cursor,不仅仅是一个开发工具,更是你前端路上的“超级英雄”!它融合了GPT-4的AI智慧,能听懂你的“心声”,一键将你的创意转化为神奇的HTML、CSS和JavaScript代码。告别繁琐的编码工作,让Cursor成为你创意的翅膀,带你飞翔在前端的世界!链接:Cursor官网二、功能亮点1、一......
  • 一些超级好用的CSS 属性
    1、fit-content盒子大小自适应内容案例:比如有时候我们需要根据给定的文本来调整盒子的宽度,这时候使用固定的宽度就很难调整,CSS提供的width:fit-content;2、透明色透明色的RGB值是(0,0,0,0),其中第四个参数表示透明度,取值范围是0到1。透明度为0表示完全透明,透明度为1表......
  • 18day-19day-2.2.CSS实战与提高
    2.2.CSS实战与提高练习11:制作开心餐厅页面CSS/*层次选择器*/p{font-size:14px;}/*body后代h2字体16px*/bodyh2{font-size:16px;}/*第一个h2颜色变为红色*/.firstH2{color:red;}/*第一个h2后面的通用兄弟元素h2变为蓝色*/.firstH2~h2{......
  • 20day-HTML&CSS-1~24
    1,HTML定义是什么?HTML(超文本标记语言,HyperTextMarkupLanguage)定义是一种用于创建和设计网页的标准标记语言。它允许使用一系列预定义的标签(比如:段落、列表、表格等)来组织文本、图片、视频等多媒体内容,并用于描述网页的结构和呈现样式。浏览器会根据HTML代码来解析和渲......