美文网首页
图标转化svg

图标转化svg

作者: 白羊座的泰迪 | 来源:发表于2020-03-23 13:40 被阅读0次

svg简介

svg就是一个小型的被分解的canvas,它可以画线段、圆形、椭圆、方形、图片等等,还有制作动画,每个功能被单独以标签形式应用在模板上。

标签结构

 <svg>
    需要展示的原素标签:线段、图形、图片......
 </svg>

图片转化工具

因为我们本次主要介绍图片的转化,所以其他元素的svg制作方式暂时不做介绍,大家有兴趣可以去查相关文档。
有很多转化工具可以直接进行图片转化格式,下边推荐一个线上转化地址:
http://www.bejson.com/convert/image_to_svg/

图片转化的后的格式如下:

<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" width="82px" height="34px" viewBox="0 0 82 34" enable-background="new 0 0 82 34" xml:space="preserve"> 
    <image width="82" height="34" x="0" y="0" href="xxx" />
</svg>

因为展示的是图片,所以在svg标签里边是image标签,当然这个image标签也是svg里的专属标签。下边是它的属性介绍:

x="图像的左上角的x轴坐标"
y="图像的左上角的y轴坐标"
width="图像的宽度". 必须.
height="图像的高度". 必须.
xlink:href="图像的路径". 必须.

注:
1.在上边推荐的在线转化工具转化后的image标签的href地址,是把图片转成base64格式的。如果嫌他长的话,可以引用你线上图片的地址。
2.也可以有设计同事帮你转一个svg格式的图片,你直接拿过来使用。

展示相关的两个重要属性:viewport和viewbox

如果svg内没有转化工具自动生成的属性,如viewBox,那么它的样式会乱掉,图片也无法正常显示,这是什么原因呐,来了解下这些属性的作用。
先来了解这两个名词:viewport、viewbox

参考链接:

  1. https://www.zhangxinxu.com/wordpress/2014/08/svg-viewport-viewbox-preserveaspectratio/
  2. https://www.w3cplus.com/html5/svg-coordinate-systems.html
  • viewport
    viewport是指svg的可见区域大小,如果把svg理解成一个画布或一个屏幕,viewport即画布的大小或一个屏幕可视区域的大小。它就是svg标签设置的width和height,可以写在标签内部,也可以通过css去控制。css文件内的svg样式优先级大于标签内部的宽高属性。
标签内部写法
<svg version="1.1"  width="82px" height="34px" > 
</svg>

css写法
svg{
    height: .34rem;
    width: .82rem;
}

这里插一个注释:
svg的css单位默认是px,同时适用常见的所有单位,除了我们常用的rem外,还有下边这些单位:


svg支持的css单位
  • viewbox
    viewbox顾名思义,视图框。它是svg展示的一个重点。
    viewbox是svg标签的属性,它的值包括:x,y,width,height。前边两个值是坐标,后边是宽高。
<svg  x="0px" y="0px" width="82px" height="34px" viewBox="0 0 82 34" >
    <image width="82" height="34" x="0" y="0" href="xxx" />
</svg>

首先,前边我们说到svg设置的width/height(viewport),只是可视区域大小,和svg实际大小无关。svg的实际大小是内容区域占据的空间。那么svg的内容在可视区域怎样展示,就是由viewbox这四个值来决定的。

x、y是开始展示区域的起始坐标,width、height是展示区域的宽高。
简单理解,就是在起始坐标(x/y)位置开始截图,截取指定宽高(width/height)的区域在视图框(viewport)全屏展示。

所以,viewbox决定了svg的画布展示的内容,截什么,就展示什么。

最后总结
经过研究发现,svg图片不能根据内部字体数量变化自动调整宽度。但是svg图片在缩放时,结构可以保持稳定不变,这个特性可以解决不同机型图导致标样式结构不稳定的问题。

如果有icon图标需要根据字体数量进行宽度自适应的需求,推荐以下解决方案:
1,通过和UI同学沟通,根据icon内文字数量不同,选出n个字数范围,每个范围对应一个固定宽度的图标
2,将这n个范围对应的图标转化成svg图片;
3,根据icon内部文字数量,通过js判断展示该范围对应的svg图片。

以上方案可以实现以下两个需求:
1,icon图标在不同机型展示,结构可以保持稳定不变;
2,icon图标内文字的数量在一定范围内变动时,图标的宽度也能跟着改变。

相关文章

网友评论

      本文标题:图标转化svg

      本文链接:https://www.haomeiwen.com/subject/sjcqjhtx.html