这块的技术点还是比较分散的,我尽量综合的不遗漏的全部谈及,并且让初学者能够明白理解谈及的内容。
一、首先,对 SVG 进行一个整体的了解。
HTML 中的 <svg> 标记用于嵌入 SVG(Scalable Vector Graphics,可缩放矢量图形)内容。SVG 是一种基于 XML 的矢量图形格式,适合在网页中显示图标、图表、动画等图形内容。以下是 <svg> 标记的详细介绍和用法。
1. <svg> 标记的基本结构
<svg width="宽度" height="高度" xmlns="http://www.w3.org/2000/svg">
<!-- SVG 图形内容 -->
</svg>
width 和 height:定义 SVG 画布的宽度和高度。xmlns:定义命名空间,固定为 http://www.w3.org/2000/svg。
2. 常用属性
width 和 height:设置 SVG 画布的大小。viewBox:定义 SVG 的坐标系和缩放行为。格式为 min-x min-y width height。
示例:viewBox="0 0 100 100" 表示坐标系从 (0,0) 开始,宽度和高度为 100。
preserveAspectRatio:控制 SVG 的缩放比例和对齐方式。
示例:preserveAspectRatio="xMidYMid meet" 表示居中缩放。
fill:设置填充颜色。stroke:设置描边颜色。stroke-width:设置描边宽度。
3. SVG 常用图形元素
SVG 支持多种图形元素,以下是一些常用的元素:
(1)<circle>:绘制圆形。
<circle cx="50" cy="50" r="40" fill="red" />
cx 和 cy:圆心的坐标。r:半径。
(2)<rect>:绘制矩形
<rect x="10" y="10" width="80" height="60" fill="blue" />
x 和 y:矩形左上角的坐标。width 和 height:矩形的宽度和高度。
(3)<line>:绘制直线
<line x1="10" y1="10" x2="90" y2="90" stroke="black" />
x1 和 y1:起点的坐标。x2 和 y2:终点的坐标。
(4)<path>:绘制复杂路径
<path d="M 10 10 L 90 10 L 50 90 Z" fill="green" />
d:定义路径的命令和坐标。
(5)<text>:添加文本
<text x="10" y="20" font-size="16" fill="black">Hello SVG!</text>
x 和 y:文本的起始坐标。
(6)<polygon>:绘制多边形
<polygon points="50,10 90,90 10,90" fill="purple" />
points:定义多边形的顶点坐标。
(7)<ellipse>:绘制椭圆
<ellipse cx="50" cy="50" rx="40" ry="20" fill="orange" />
cx 和 cy:椭圆中心的坐标。rx 和 ry:椭圆的水平和垂直半径。
4. SVG 示例
以下是一个完整的 SVG 示例,包含多种图形元素:
<svg width="200" height="200" xmlns="http://www.w3.org/2000/svg">
<!-- 矩形 -->
<rect x="10" y="10" width="80" height="60" fill="blue" />
<!-- 圆形 -->
<circle cx="150" cy="50" r="40" fill="red" />
<!-- 直线 -->
<line x1="10" y1="150" x2="190" y2="150" stroke="black" stroke-width="2" />
<!-- 文本 -->
<text x="20" y="180" font-size="16" fill="black">Hello SVG!</text>
<!-- 路径 -->
<path d="M 100 100 L 150 150 L 50 150 Z" fill="green" />
</svg>
5. SVG 的优势
矢量图形:无限缩放不失真。轻量高效:文件体积小,适合网络传输。支持交互和动画:可以通过 CSS 和 JavaScript 实现动态效果。可访问性:支持文本描述和 ARIA 属性。
可编辑性:可以用文本编辑器或图形工具(如 Adobe Illustrator、Inkscape)编辑。SEO 友好:文本内容可以被搜索引擎索引。
6. SVG 的应用场景
图标和徽标:适合需要缩放的图标。数据可视化:用于创建图表、图形和地图。动画和交互:用于网页动画和交互式图形。响应式设计:适合不同屏幕尺寸的设备。
二、接下来,我们对前面谈及的 SVG 中的 <path> 元素进行逐渐深入的认识理解。
SVG 中的 <path> 元素用于绘制复杂的路径,它是 SVG 中最强大且灵活的元素之一。通过 <path>,可以绘制直线、曲线、弧形等各种形状。理解 <path> 的关键在于掌握它的 d 属性,该属性定义了一系列的路径命令。
1. <path> 的基本结构
<path d="路径命令" fill="颜色" stroke="边框颜色" stroke-width="边框宽度" />
d 属性:定义路径的命令和坐标。fill:填充颜色。stroke:路径边框颜色。stroke-width:路径边框宽度
2. 路径命令
路径命令由字母和坐标组成,字母表示命令类型,坐标表示位置。命令分为绝对坐标(大写字母)和相对坐标(小写字母)。
常用命令:
(1)M (moveto):移动到某个点(起点)。
示例:M 10 10 表示移动到坐标 (10, 10)。
(2)L (lineto):画一条直线到某个点。
示例:L 90 90 表示从当前点画一条直线到 (90, 90)。
(3) H (horizontal lineto):水平画一条线。
示例:H 50 表示从当前点水平画一条线到 x=50 的位置。
(4)V (vertical lineto):垂直画一条线。
示例:V 50 表示从当前点垂直画一条线到 y=50 的位置。
(5)C (curveto):命令用于绘制三次贝塞尔曲线。贝塞尔曲线是一种通过控制点定义的平滑曲线,广泛用于图形设计和计算机图形学中。C 命令通过指定两个控制点和一个终点来定义曲线的形状。
C 命令的基本语法
C x1 y1, x2 y2, x y
x1 y1:第一个控制点的坐标。x2 y2:第二个控制点的坐标。x y:曲线终点的坐标。
C 命令的工作原理
三次贝塞尔曲线由起点、两个控制点和终点定义。起点是当前路径的最后一个点(由 M 或其他命令定义)。曲线从起点开始,向第一个控制点弯曲,然后向第二个控制点弯曲,最终到达终点。
贝塞尔曲线的特点
控制点:控制点决定了曲线的形状和弯曲程度。平滑性:贝塞尔曲线是平滑的,适合绘制复杂的曲线。灵活性:通过调整控制点的位置,可以创建各种形状的曲线。
C 命令的使用场景
绘制复杂的平滑曲线,如波浪线、弧形、装饰性图形等。与 S(smooth curveto)命令结合使用,绘制连续的平滑曲线。
示例
使用 C 命令的示例,绘制一条三次贝塞尔曲线:
<svg width="200" height="200" xmlns="http://www.w3.org/2000/svg">
<path d="M 10 80 C 40 10, 65 10, 95 80" fill="none" stroke="black" />
</svg>
M 10 80:移动到起点 (10, 80)。C 40 10, 65 10, 95 80:绘制一条三次贝塞尔曲线,控制点为 (40,10) 和 (65,10),终点为 (95,80)。
C 命令的注意事项
控制点的位置决定了曲线的形状,需要根据需求调整。如果希望曲线更加平滑,可以使用 S 命令自动计算控制点。
(6)S(smooth curveto) :用于绘制平滑的三次贝塞尔曲线。它是 C(curveto)命令的简化版本,用于在连续绘制曲线时自动计算控制点,从而使曲线连接更加平滑。
S 命令的基本语法
S x2 y2, x y
x2 y2:第二个控制点的坐标。x y:曲线终点的坐标。
S 命令的工作原理
S 命令会自动计算第一个控制点,使其与上一个曲线的第二个控制点对称。如果 S 命令前面没有 C 或 S 命令,则第一个控制点会被视为与当前点重合。
S 命令的使用场景
当需要绘制连续的平滑曲线时,S 命令可以简化路径定义。它通常与 C 命令结合使用,用于绘制复杂的平滑路径。
示例
使用 S 命令的示例,绘制一条平滑的曲线:
<svg width="200" height="200" xmlns="http://www.w3.org/2000/svg">
<path d="M 10 80 C 40 10, 65 10, 95 80 S 150 150, 180 80" fill="none" stroke="black" />
</svg>
M 10 80:移动到起点 (10, 80)。C 40 10, 65 10, 95 80:绘制一条三次贝塞尔曲线,控制点为 (40,10) 和 (65,10),终点为 (95,80)。S 150 150, 180 80:绘制一条平滑的三次贝塞尔曲线,自动计算第一个控制点(与上一个曲线的第二个控制点对称),终点为 (180,80)。
S 命令的注意事项
如果 S 命令前面没有 C 或 S 命令,则第一个控制点会被视为与当前点重合。S 命令只能用于绘制三次贝塞尔曲线,不能用于二次贝塞尔曲线(使用 T 命令)。
(7)T(smooth quadratic Bézier curveto):用于绘制连续平滑二次贝塞尔曲线的命令,对应的命令是 T。它是 Q(quadratic Bézier curveto)命令的简化版本,用于在绘制连续曲线时自动计算控制点,从而使曲线连接更加平滑。
T 命令的基本语法
T x y
x y:曲线终点的坐标。
T 命令的工作原理
T 命令会自动计算控制点,使其与上一个曲线的控制点对称。如果 T 命令前面没有 Q 或 T 命令,则控制点会被视为与当前点重合。
T 命令的使用场景
当需要绘制连续的平滑二次贝塞尔曲线时,T 命令可以简化路径定义。它通常与 Q 命令结合使用,用于绘制复杂的平滑路径。
示例
使用 T 命令的示例,绘制一条平滑的二次贝塞尔曲线:
<svg width="200" height="200" xmlns="http://www.w3.org/2000/svg">
<path d="M 10 80 Q 50 10, 90 80 T 170 80" fill="none" stroke="black" />
</svg>
M 10 80:移动到起点 (10, 80)。Q 50 10, 90 80:绘制一条二次贝塞尔曲线,控制点为 (50,10),终点为 (90,80)。T 170 80:绘制一条平滑的二次贝塞尔曲线,自动计算控制点(与上一个曲线的控制点对称),终点为 (170,80)。
T 命令的注意事项
如果 T 命令前面没有 Q 或 T 命令,则控制点会被视为与当前点重合。T 命令只能用于绘制二次贝塞尔曲线,不能用于三次贝塞尔曲线(使用 S 命令)。
(8)Q (quadratic Bézier curveto):绘制二次贝塞尔曲线。它是一种通过一个控制点和一个终点定义的平滑曲线。它是贝塞尔曲线的一种简化形式,比三次贝塞尔曲线少一个控制点,因此更容易理解和计算。
二次贝塞尔曲线的定义
二次贝塞尔曲线由以下三个点定义:
起点(P0):曲线的起始点。控制点(P1):决定曲线的形状和弯曲方向。终点(P2):曲线的结束点。
曲线的形状是从起点开始,向控制点弯曲,然后到达终点。
Q 命令的基本语法
Q x1 y1, x y
x1 y1:控制点的坐标。x y:终点的坐标。
二次贝塞尔曲线的特点
简单性:只有一个控制点,比三次贝塞尔曲线更容易计算。平滑性:曲线是平滑的,适合绘制简单的弧形或弯曲形状。灵活性:通过调整控制点的位置,可以创建不同的曲线形状。
二次贝塞尔曲线的应用场景
绘制简单的弧形或弯曲形状。创建平滑的过渡效果,如按钮的边框、图标的轮廓等。与 T(smooth quadratic curveto)命令结合使用,绘制连续的平滑曲线。
示例
使用 Q 命令绘制二次贝塞尔曲线的示例:
<svg width="200" height="200" xmlns="http://www.w3.org/2000/svg">
<path d="M 10 80 Q 50 10, 90 80" fill="none" stroke="black" />
</svg>
M 10 80:移动到起点 (10, 80)。Q 50 10, 90 80:绘制一条二次贝塞尔曲线,控制点为 (50,10),终点为 (90,80)。
(9)A (elliptical arc):绘制椭圆弧。
示例:A 30 50, 0, 0, 1, 100 100 表示绘制一个椭圆弧,半径为 (30,50),终点为 (100,100)。
(10)Z (closepath):闭合路径,从当前点画一条直线回到起点。
示例:Z 表示闭合路径。
3. 绘制复杂路径的步骤
(1)确定起点
使用 M 命令确定路径的起点。
M 10 10
(2)绘制直线或曲线
使用 L、C、Q 等命令绘制直线或曲线。
L 90 10
C 10 10, 50 50, 90 10
(3)闭合路径(可选)
使用 Z 命令闭合路径。
Z
4. 复杂路径示例
示例 1:绘制一个简单的三角形
<path d="M 10 10 L 90 10 L 50 90 Z" fill="blue" />
M 10 10:移动到起点 (10, 10)。L 90 10:画一条直线到 (90, 10)。L 50 90:画一条直线到 (50, 90)。Z:闭合路径,回到起点。
示例 2:绘制一个带有曲线的形状
<path d="M 10 80 C 40 10, 65 10, 95 80 S 150 150, 180 80" fill="none" stroke="black" />
M 10 80:移动到起点 (10, 80)。C 40 10, 65 10, 95 80:绘制一条三次贝塞尔曲线,控制点为 (40,10) 和 (65,10),终点为 (95,80)。S 150 150, 180 80:继续绘制一条三次贝塞尔曲线,省略第一个控制点(自动对称),终点为 (180,80)。
示例 3:绘制一个复杂的形状
M 10 80:移动到起点 (10, 80)。Q 50 10, 90 80:绘制一条二次贝塞尔曲线,控制点为 (50,10),终点为 (90,80)。T 170 80:继续绘制一条二次贝塞尔曲线,省略控制点(自动对称),终点为 (170,80)。
5. 工具辅助绘制
手动编写复杂路径可能比较困难,因此可以借助工具生成路径:
Adobe Illustrator:导出 SVG 时会自动生成路径。Inkscape:开源的矢量图形工具,支持导出 SVG。在线工具:如 SVG Path Editor,可以可视化编辑路径。
三、最后
至此,与HTML SVG Tag 及其重要的 SVG Path 元素相关的技术就基本介绍完了。大家可以通过相关的示例加深认识和理解。希望路过的朋友有帮助。
