SVG 是一种基于 XML 的开放矢量图形格式,它的主要优点是没有损失地进行缩放、可以编辑文字、体积小并且高效以及有原生的交互支持。它是用代码来表示图形结构的,所以不管放大到 4K 屏幕还是打印出 A0 广告,线条都依然锋利清晰;文件大小一般只有同等级别的 PNG 文件的一半到十分之一左右,特别适用于网页图标、响应式的用户界面以及动态的数据可视化;而且它还自带 CSS 样式控制、JavaScript 事件绑定以及 SMIL 或者 CSS 动画等功能,在前端开发中被用来做图标系统、地图图层或者可访问图形的时候是最合适的选择;由于 SVG 是一个开放的标准,所以在 Chrome、Firefox、Safari 和各种主流移动浏览器里都能很好地显示出来。

1. 无损缩放的基本原理和具体的操作步骤
SVG用数学公式来描述图形边界,并不是用像素点阵来表示的。因此,在放大倍率很大的情况下,浏览器只需要重新计算出各个坐标的大小和线条粗细的比例就可以了,并不需要进行插值或者采样的操作。实验表明,把一个24x24像素的SVG图象放大到2000%,它的边框依然没有锯齿也没有失真;但是同样的大小的PNG图片放大到300%之后就会出现明显的像素块。开发人员可以使用浏览器开发者工具直接改变SVG元素的宽度、高度属性或者是CSS中的transform:scale()属性来查看渲染效果不会发生变化——这在光栅图像上是做不到的。
二、轻量化和高效的体现以及压缩的方法
简单的图标的SVG文件大小一般为0.5KB~3KB左右,比如一个带有阴影的五角星图标只有1.2KB,但是同样的视觉效果的PNG格式需要8~12KB的空间。它之所以比较小的原因有三个:一是它是纯文本结构,不需要进行二进制封装所造成的开销;二是它可以被Gzip压缩,在网页传输的时候可以减小到原来的四分之一甚至更低;三是可以直接嵌入到HTML里边去,不用发起新的HTTP请求来下载。在优化的时候最好去掉编辑器默认添加的一些无用的信息、标题标签以及没有用到的命名空间,并使用SVGO这样的工具自动地把多余的代码给删掉,这样可以再节省下百分之三十到六十的空间。
第三部分 交互和动态能力落地的方法
SVG可以进行DOM操作,并且可以对任何东西进行操作 第四部分 适用范围及避坑攻略 SVG不是万能的:不能准确地表现出照片级别的渐变过渡和噪点细节,复杂的光影场景最好还是使用WebP/PNG格式;如果一个SVG文件包含了超过五千条路径,则老版的Safari可能会出现卡顿的情况,在这种情况下可以将其分割为多个单独的SVG文件或者转而使用Canvas来绘制;IE11及其之前的版本只对一部分进行支持,如果需要兼容的话就需要提供PNG的后备方案;从安全性角度考虑要禁止外部脚本的加载,在上传SVG之前要对onload、onclick等事件属性进行过滤以避免XSS攻击的发生。 因此SVG成为目前数字图形工程领域里既保证了精度又具有良好的性能和可扩展性的主要格式,在正确使用它的特点之后可以大大提高产品的视觉一致性和前端运行效率。






评论区 (0)
暂无评论,快来抢沙发吧!
发表评论