SVG 初看跟 HTML 标签很像,所以学习起来比较容易。
我推荐的教程是 MDN 的《SVG 教程》,但是有耐心全部读完的人较少,这里就给出一个速览。
所有 SVG 中的标签都应该以 svg 为根标签,svg 标签里面还可以有 svg 标签
svg 标签有 width 和 height 属性,表示画布的绝对大小(以像素为单位)
svg 标签有 viewbox 属性,表示 svg 的视口范围,语法为 "minX minY width height" 或 "minX, minY, width, height"
一个推荐的 svg 标签写法为:
<svg width=100 height=100 viewBox="0 0 100 100"> </svg>
或
<svg width=100 height=100 viewBox="0 0 200 200"> </svg>
后者可以展示更多内容,但是所有东西都缩小为一半。应该尽量保证 svg 的宽高比与 viewBox 的宽高比相等。
svg 中的默认坐标轴是这样的:
可以通过修改 viewBox 的 minX 和 minY 来修改坐标轴原点的位置。
其他标签可以通过 x y 等属性在坐标轴中定位,每个标签的定位方法不尽相同。
推荐的学习方法是用作品来练习:
今天的文章只做第一步。
其中最难学的部分是路径的写法,需要沉下心来记住。
命令 | 语法 | 释义 |
---|---|---|
Move to | M 10 10(绝对位置) | |
m 10 10(相对位置) | 将笔刷移动某一点,什么都不画 | |
Line To | L 10 10 | |
l 10 10 | 从当前点向目标点画一条线 | |
Horizontal | H 10 | |
h 10 | 在 x 方向画一条水平线 | |
Vertical | V 10 | |
v 10 | 在 y 方向画一条垂直线 | |
Z (close) | Z = z | 闭合当前路径 |
C (两个控点的贝塞尔) | C x1 y1, x2 y2, x y | |
c ... | x1 y1 为控点 1,x2 y2 为控点 2,x y 为结束点 | |
S (是 C 的简写) | S x2 y2, x y | |
s ... | 控点 1 与之前的控点 2 对称 | |
所以不需要给出 x1 y1 | ||
Q (单控点贝塞尔) | Q x1 y1, x y | |
q ... | ||
T (是 Q 的缩写) | T x y | |
t ... | 控点与之前的控点对称 | |
Arc | A rx ry rotate large dir x y | |
a ... | large 表示是否走大圈 | |
dir 表示逆时针还是顺时针 |
svg 标签只有两个地方可以填色:fill 和 stroke。前者表示内部的颜色,后者表示边线的颜色。
相关的属性有(均可用 CSS 控制):
可以把 SVG 的 CSS 定义在 defs 标签的 style 标签里:
<svg width="200" height="200"> <defs> <style type="text/css"><![CDATA[ #MyRect:hover { stroke: black; fill: red; } ]]></style> </defs> <rect x="10" height="180" y="10" width="180" id="MyRect"/> </svg>
支持 2 种渐变
把定义放在 defs 标签里,然后使用 fill: url(#GradientId1) 来绑定样式。
可以把标签的组合作为背景色
<text x="10" y="10">Hello World!</text> <text> This is <tspan>span</tspan> </text>
text 支持的属性
tspan 支持的属性
g 标签可以容纳其他标签(包含 g 标签),用于统一设置属性
<svg width="30" height="10"> <g fill="red"> <rect x="0" y="0" width="10" height="10" /> <rect x="20" y="0" width="10" height="10" /> </g> </svg>
上面的 fill="red" 会被设置给 g 里面的所有 rect 标签。
<g transform="translate(30,40) rotate(45) skewX(?) skewY(?) scale(2) matrix(?)"> ... </g>
用于显示规定区域内的内容,不支持半透明、渐变。
用于显示规定区域内的内容,只能用灰阶表示是否显示、显示多少。
<svg width="200" height="200"> <image x="90" y="-65" width="128" height="146" transform="rotate(45)" xlink:href="https://developer.mozilla.org/static/img/favicon144.png"/> </svg>
xlink: 可以省略。
完。
饥人谷一直致力于培养有灵魂的编程者,打造专业有爱的国内前端技术圈子。如造梦师一般帮助近千名不甘寂寞的追梦人把编程梦变为现实,他们以饥人谷为起点,足迹遍布包括facebook、阿里巴巴、百度、网易、京东、今日头条、大众美团、饿了么、ofo在内的国内外大小企业。 了解培训课程:加微信 xiedaimala03,官网:https://jirengu.com