SVG是一种用XML定义的语言,用来描述二维矢量及矢量/栅格图形。SVG提供了3种类型的图形对象:矢量图形(vectorgraphicshape,例如:由直线和曲线组成的路径)、图像(image
)、文本(text)。图形对象还可进行分组、添加样式、变换、组合等操作,特征集包括嵌套变换(nestedtransformations
)、剪切路径(clippingpaths
)、alpha蒙板(alphamasks
)、滤镜效果(filtereffects
)、模板对象(templateobjects
)和其它扩展(extensibility
)。
浏览器会把SVG标记和样式转换成一个文档对象模型( document object model,DOM)。
DOM可以通过JavaScript进行操作。针对XML内容的DOM的所有核心方法同样适用,所以我们可以创建和重排元素,获取和设置属性的值,查询计算后的样式的值。
<svg xmlns="http://www.w3.org/2000/svg"></svg>
在众多xml语言中,标识它是哪一种标记语言?html、xhtml、svg等。
在另一个命名空间内重新定义默认命名空间。
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
SVG文件全局有效的规则是“后来居上”,越后面的元素越可见。
Content-Type: image/svg+xml Vary: Accept-Encoding(.svg) Content-Type: image/svg+xml Content-Encoding: gzip Vary: Accept-Encoding(.svgx)
SVG使用的坐标系统或者说网格系统,和Canvas用的差不多(所有计算机绘图都差不多)。
SVG 文件还可以转为 BASE64 编码,然后作为 Data URI 写入网页。
SVG 无单位坐标通常可以和 px 等价使用;
SVG支持的长度单位有:em,ex,px,pt,pc,cm,mm,in和百分比。
SVG可以使用CSS2的动态伪类(:hover,:active和:focus)和伪类(:first-child,:visited,:link和:lang)进行样式化.其余的CSS2伪类,包括那些与生成的内容有关的伪类(例如:: before和:: after),不属于SVG语言定义,因此对SVG的样式没有影响.
相关文档
常用形状的相关文档: https://www.runoob.com/svg/svg-tutorial.html https://blog.csdn.net/qq_27009517/article/details/116607537
注意
所有的开启标签必须有关闭标签!
用于在实际的svg上截取一小块,放大到整个svg显示,属性的值有四个数字,分别是左上角的横坐标和纵坐标、视口的宽度和高度。
如果不指定width属性和height属性,只指定viewBox属性,则相当于只给定 SVG 图像的长宽比。这时,SVG 图像的默认大小将等于所在的 HTML 元素的大小。
<svg width="300" height="300" style="border: 1px solid steelblue"
viewbox="105 55 60 60">
<rect x="10" y="10" width="200" height="100" fill="skyblue"></rect>
</svg>
<!-- 105 表示相对于svg左上角的横坐标,55 表示相对于svg左上角的纵坐标,60 表示截取的视区的宽度,60 表示截取的视区的高度。 -->
viewport
参考:https://zhuanlan.zhihu.com/p/422609203
width、height、x、y,图形大小和左上角位置;r、cy、cx,圆形的半径,圆心位置。
style中可以设置长宽、位置等属性,可以设置fill、stroke等相关属性;
stroke-linecap
stroke-linejoin
desc元素与title元素(此元素主要是做辅助,不会显示)
每个容器元素(可以包含其他容器元素或者图形元素的元素,例如:a,defs,glyph,g,marker,mask,missing-glyph,pattern,svg,switch和symbol)和图形元素都可以包含desc和title元素,这两个元素都是辅助性的元素,用于解释相关情境;它们的内容都是文本。当SVG文档被渲染的时候,这2个元素不会被渲染到图形中。这个2个元素之间差别不是太大,title在有些实现中是作为提示信息出现的,所以通常title是放到父元素的第一个位置上。
g元素是一种容器,它组合一组相关的图形元素成为一个整体;这样,我们就可以对这个整体进行操作。这个元素通常可以和desc和title元素配合使用,提供文档的结构信息。结构良好的文档通常可读性和渲染效率都不错。
g元素是可以嵌套的, 组合起来的图形元素就和单个的元素一样,可以给id值,这样,需要的时候(例如动画和重用一组元素)只用引用这个id值就可以了, 组合一组图形元素可以统一设置这组元素的相关属性(fill,stroke,transform等),这也是使用组合的一种场景。
d属性是path特有的属性,是一个 命令 + 参数 的序列
<path d="M 20 230 Q 40 205, 50 230 T 90230"/>
阿里巴巴图标库挂了,只好自己找找其他方案了。svg好用,但是没有font字体来的灵活;找到其他类似的几个图标库:
字节跳动图标库:https://icomoon.io/、据说挺有名:https://icomoon.io/
通常我么使用svg的过程如下:
┌────────┐ ┌────────────┐
│iconfont│──┐ │ Project │
└────────┘ │ ┌────────────┐ ┌────────┐ │ ┌────────┐ │
├─▶│created font│─▶│download│──▶│ │use font│ │
┌────────┐ │ └────────────┘ └────────┘ │ └────────┘ │
│icomoon │──┘ └────────────┘
└────────┘
转换到
┌────────────────────┐
│ Project │
│ │
┌────────┐ │ ┌───────────┐ │
│iconfont│──┐ │ │ svg │──┐ │
└────────┘ │ ┌────────────┐ │ └───────────┘ │ │
├─▶│download svg│──▶│ ┌───────────┐ │ │
┌────────┐ │ └────────────┘ │┌──│create font│◀─┘ │
│icomoon │──┘ ││ └───────────┘ │
└────────┘ ││ ┌───────────┐ │
│└─▶│ use font │ │
│ └───────────┘ │
└────────────────────┘
Github:https://github.com/jaywcjlove/svgtofont
搭配css3的动画,也可以使用svg专有的动画标签元素。