SVG 包含以下基本形状元素:
在数学上,这些形状元素等同于一个 ‘path’ 元素,该元素 将构造相同的形状。基本形状可以被描边、填充,并用作裁剪路径。所有适用于 ‘path’ 元素的属性也适用于基本形状。
每个形状的 等效路径 和计算描边的算法 在下面的形状部分中定义。
‘rect’ 元素定义了一个与当前 用户坐标系统 对齐的矩形。通过设置非零值的 rx 和 ry 几何属性,可以实现圆角矩形。
属性 x 和 y 坐标分别表示矩形的左边和上边,在当前用户坐标系统中。
属性 width 和 height 定义矩形的整体宽度和高度。对于任一属性的负值都是不合法的,必须被视为解析错误。如果任一维度的计算值为零,则禁用该元素的渲染。
对于圆角矩形,属性 rx 和 ry 的计算值定义了用于圆化矩形角落的椭圆弧的 x 轴和 y 轴半径。弧始终在水平和垂直轴上对称;要创建一个具有不均匀圆角的矩形,请使用 ‘path’ 显式定义形状。对于任一属性的负值都是不合法的,必须被视为解析错误。如果任一维度的计算值为零,或两者的计算值为
auto
,则结果是没有圆角的矩形。
x 轴和 y 轴圆角半径的使用值可能会通过其他维度隐式确定(使用 auto
值),并且也受到限制,以确保矩形的直线段长度永远不会为负。rx 和 ry
的使用值根据计算值通过以下步骤确定:
auto
(由于 auto
是这两个属性的初始值,因此如果作者未指定它们或所有作者提供的值均无效,这种情况也会发生),
则 rx 和 ry 的使用值为 0。(这将导致矩形角落为直角。)在数学上,‘rect’ 元素被映射到等效的 ‘path’ 元素,如下所示, 在为用户坐标系统生成绝对使用值 x、y、width、height、 rx 和 ry 之后,针对每个等效的几何属性, 遵循上述规则和 单位 中的规则:
路径分解在 2013年6月3日 的电话会议中解决。
示例 rect01 显示了一个具有锐角的矩形。‘rect’ 元素填充为黄色并以海军蓝描边。
<?xml version="1.0" standalone="no"?> <svg width="12cm" height="4cm" viewBox="0 0 1200 400" xmlns="http://www.w3.org/2000/svg" version="1.1"> <desc>示例 rect01 - 具有锐角的矩形</desc> <!-- 使用 'rect' 元素显示视口轮廓 --> <rect x="1" y="1" width="1198" height="398" fill="none" stroke="blue" stroke-width="2"> <rect x="400" y="100" width="400" height="200" fill="yellow" stroke="navy" stroke-width="10" /> </svg>
示例 rect01
示例 rect02 显示了两个圆角矩形。rx 指定如何圆化 矩形的角。请注意,由于未为 ry 属性指定值,使用的值将源自 rx 属性。
<?xml version="1.0" standalone="no"?> <svg width="12cm" height="4cm" viewBox="0 0 1200 400" xmlns="http://www.w3.org/2000/svg" version="1.1"> <desc>示例 rect02 - 圆角矩形</desc> <!-- 使用 'rect' 元素显示视口轮廓 --> <rect x="1" y="1" width="1198" height="398" fill="none" stroke="blue" stroke-width="2"> <rect x="100" y="100" width="400" height="200" rx="50" fill="green" /> <g transform="translate(700 210) rotate(-30)"> <rect x="0" y="0" width="400" height="200" rx="50" fill="none" stroke="purple" stroke-width="30" /> </g> </svg>
示例 rect02
‘circle’ 元素定义了 一个基于中心点和半径的圆。
r 属性定义了圆的半径。 任何属性的负值都是非法的,并且 必须被视为解析错误。
在数学上,‘circle’ 元素映射到一个等效的 ‘path’ 元素,该元素 由四个 椭圆弧段组成,每段覆盖圆的四分之一。路径 从半径的“3点钟”位置开始,并以顺时针方向进行(在任何变换之前)。 弧命令的 rx 和 ry 参数 都等于 r 属性的使用值,在转换为本地用户单位后, 而 x-axis-rotation、 large-arc-flag、 和 sweep-flag 都设置为零。 坐标计算如下, 其中 cx、cy 和 r 是等效属性的使用值,转换为 用户单位:
路径分解在 2013年6月3日的电话会议上得到解决。
示例 circle01 包含一个 ‘circle’ 元素,该元素填充为红色并用蓝色描边。
<?xml version="1.0" standalone="no"?> <svg width="12cm" height="4cm" viewBox="0 0 1200 400" xmlns="http://www.w3.org/2000/svg" version="1.1"> <desc>示例 circle01 - 圆形填充红色并描边蓝色</desc> <!-- 使用 'rect' 元素显示视口轮廓 --> <rect x="1" y="1" width="1198" height="398" fill="none" stroke="blue" stroke-width="2"> <circle cx="600" cy="200" r="100" fill="red" stroke="blue" stroke-width="10" /> </svg>
示例 circle01
‘ellipse’ 元素 定义了一个与当前 用户坐标系统 对齐的椭圆,基于一个中心点和两个半径。
rx 和 ry 属性定义了椭圆的 x 轴和 y 轴半径。
这两个属性的负值是非法的,必须作为解析错误被忽略。
任一维度的计算值为零或两个维度的计算值为 auto
,
会禁用该元素的渲染。
任一 rx 或 ry 的 auto
值
会被转换为使用值,遵循上述矩形的规则
(但不基于 宽度 或 高度 进行任何夹紧)。
实际上,auto
值创建了一个圆形,
其半径由仅在一个维度中表达的值定义;
这允许创建一个半径在以下方面定义的圆:
新增于 SVG 2。
auto
值用于 rx 和 ry 是为了允许对这两个属性进行一致的解析,
适用于椭圆和矩形。
之前,如果未指定 rx 或 ry,椭圆将不会渲染。
从数学上讲,‘ellipse’ 元素被映射到一个 等效的 ‘path’ 元素, 由四个 椭圆弧 段组成,每个覆盖椭圆的四分之一。 路径从半径的 "3 点钟" 位置开始,顺时针方向进行(在任何变换之前)。 弧命令的 rx 和 ry 参数 是转换为局部用户单位后的等效属性的使用值, 而 x-axis-rotation、large-arc-flag 和 sweep-flag 都设置为零。 坐标的计算如下, 其中 cx、cy、rx 和 ry 是转换为用户单位的等效属性的使用值:
路径分解在 2013年6月3日的电话会议中解决。
示例 ellipse01 下面指定了 在由 ‘viewBox’ 属性和 transform 属性 在 ‘svg’ 元素上的用户坐标系统中两个椭圆的坐标。 两个椭圆都使用零的默认值 作为 cx 和 cy 属性(椭圆的中心)。 第二个椭圆被旋转。
<?xml version="1.0" standalone="no"?> <svg width="12cm" height="4cm" viewBox="0 0 1200 400" xmlns="http://www.w3.org/2000/svg" version="1.1"> <desc>示例 ellipse01 - 椭圆示例</desc> <!-- 使用 'rect' 元素显示视口轮廓 --> <rect x="1" y="1" width="1198" height="398" fill="none" stroke="blue" stroke-width="2" /> <g transform="translate(300 200)"> <ellipse rx="250" ry="100" fill="red" /> </g> <ellipse transform="translate(900 200) rotate(-30)" rx="250" ry="100" fill="none" stroke="blue" stroke-width="20" /> </svg>
示例 ellipse01
The ‘line’ element defines a line segment that starts at one point and ends at another.
属性定义:
名称 | 值 | 初始值 | 可动画 |
---|---|---|---|
x1, y1 | <length-percentage> | <number> | 0 | 是 |
名称 | 值 | 初始值 | 可动画 |
---|---|---|---|
x2, y2 | <length-percentage> | <number> | 0 | 是 |
未来的规范可能会将‘x1’、‘y1’、‘x2’和‘y2’属性转换为几何属性。 目前,它们只能通过元素属性指定,而不能使用 CSS。
从数学上讲,‘line’ 元素可以映射到等效的‘path’ 元素,具体如下: 在根据单位转换坐标到用户坐标系统用户单位后 生成值x1、y1、x2和y2:
由于‘line’元素是 单一线条,因此在几何上是一维的,它们没有内部;因此,‘line’元素从不被填充(参见填充属性)。
示例 line01 下面指定了五条线在由‘viewBox’ 属性在‘svg’元素上建立的用户坐标系统中的坐标。 这些线有不同的粗细。
<?xml version="1.0" standalone="no"?> <svg width="12cm" height="4cm" viewBox="0 0 1200 400" xmlns="http://www.w3.org/2000/svg" version="1.1"> <desc>示例 line01 - 在用户坐标中表示的线</desc> <!-- 使用 'rect' 元素显示视口轮廓 --> <rect x="1" y="1" width="1198" height="398" fill="none" stroke="blue" stroke-width="2" /> <g stroke="green" > <line x1="100" y1="300" x2="300" y2="100" stroke-width="5" /> <line x1="300" y1="300" x2="500" y2="100" stroke-width="10" /> <line x1="500" y1="300" x2="700" y2="100" stroke-width="15" /> <line x1="700" y1="300" x2="900" y2="100" stroke-width="20" /> <line x1="900" y1="300" x2="1100" y2="100" stroke-width="25" /> </g> </svg>
示例 line01
‘‘polyline’ 元素 定义了一组连接的直线段。通常,‘‘polyline’ 元素定义开放形状。
属性定义:
名称 | 值 | 初始值 | 可动画 |
---|---|---|---|
points | <points> | (none) | 是 |
其中:
组成polyline的点。所有坐标值均使用用户坐标系统。
如果提供的坐标数为奇数,则元素会出错,用户代理的行为与错误指定的 ‘path’ 元素相同。在这种错误情况下,用户代理将丢弃最后一个奇数坐标,并其他渲染形状。
初始值(none)表示polyline元素有效但不渲染。
未来的规范可能将 ‘points’ 属性转换为几何属性。 目前只能通过元素属性指定,而不能通过 CSS 指定。
从数学上讲,‘polyline’ 元素可以映射到等效的 ‘path’ 元素,如下所示:
示例 polyline01 下指定了用户坐标系统中由 ‘viewBox’ 属性在 ‘svg’ 元素上建立的polyline。
<?xml version="1.0" standalone="no"?> <svg width="12cm" height="4cm" viewBox="0 0 1200 400" xmlns="http://www.w3.org/2000/svg" version="1.1"> <desc>示例 polyline01 - 日益增大的条形</desc> <!-- 使用 'rect' 元素显示视口轮廓 --> <rect x="1" y="1" width="1198" height="398" fill="none" stroke="blue" stroke-width="2" /> <polyline fill="none" stroke="blue" stroke-width="10" points="50,375 150,375 150,325 250,325 250,375 350,375 350,250 450,250 450,375 550,375 550,175 650,175 650,375 750,375 750,100 850,100 850,375 950,375 950,25 1050,25 1050,375 1150,375" /> </svg>
示例 polyline01
‘polygon’ 元素定义了一个封闭的形状,由一组连接的直线段组成。
属性定义:
名称 | 值 | 初始值 | 可动画 |
---|---|---|---|
points | <points> | (无) | 是 |
构成多边形的点。所有坐标值都在用户坐标系统中。
如果提供的坐标数为奇数,则元素出错,行为与不正确指定的 ‘path’ 元素相同。
初始值 (无) 表示多边形元素有效,但不渲染。
未来的规范可能将 ‘points’ 属性转换为几何属性。 目前只能通过元素属性指定,而不能通过 CSS。
从数学上讲,‘polygon’ 元素可以映射到等效的 ‘path’ 元素,如下所示:
示例 polygon01 下方指定了两个多边形(一个星形和一个六边形)在由 ‘viewBox’ 属性设定的用户坐标系统中 ,该属性位于 ‘svg’ 元素上。
<?xml version="1.0" standalone="no"?> <svg width="12cm" height="4cm" viewBox="0 0 1200 400" xmlns="http://www.w3.org/2000/svg" version="1.1"> <desc>示例 polygon01 - 星形和六边形</desc> <!-- 使用 'rect' 元素显示视口轮廓 --> <rect x="1" y="1" width="1198" height="398" fill="none" stroke="blue" stroke-width="2" /> <polygon fill="red" stroke="blue" stroke-width="10" points="350,75 379,161 469,161 397,215 423,301 350,250 277,301 303,215 231,161 321,161" /> <polygon fill="lime" stroke="blue" stroke-width="10" points="850,75 958,137.5 958,262.5 850,325 742,262.6 742,137.5" /> </svg>
示例 polygon01
一个 SVGRectElement 对象表示 DOM 中的 ‘rect’ 元素。
[Exposed=Window] interface SVGRectElement : SVGGeometryElement { [SameObject] readonly attribute SVGAnimatedLength x; [SameObject] readonly attribute SVGAnimatedLength y; [SameObject] readonly attribute SVGAnimatedLength width; [SameObject] readonly attribute SVGAnimatedLength height; [SameObject] readonly attribute SVGAnimatedLength rx; [SameObject] readonly attribute SVGAnimatedLength ry; };
这些 IDL 属性 x, y, width, height, rx 和 ry 反映了 x, y, width, height, rx 和 ry 属性及其对应的呈现属性。
一个 SVGCircleElement 对象表示 DOM 中的 ‘circle’ 元素。
[Exposed=Window] interface SVGCircleElement : SVGGeometryElement { [SameObject] readonly attribute SVGAnimatedLength cx; [SameObject] readonly attribute SVGAnimatedLength cy; [SameObject] readonly attribute SVGAnimatedLength r; };
这些 IDL 属性 cx, cy 和 r 反映了 cx, cy 和 y 属性及其对应的呈现属性。
一个 SVGEllipseElement 对象表示 DOM 中的 ‘ellipse’ 元素。
[Exposed=Window] interface SVGEllipseElement : SVGGeometryElement { [SameObject] readonly attribute SVGAnimatedLength cx; [SameObject] readonly attribute SVGAnimatedLength cy; [SameObject] readonly attribute SVGAnimatedLength rx; [SameObject] readonly attribute SVGAnimatedLength ry; };
这些 IDL 属性 cx, cy, rx 和 ry 反映了 cx, cy, rx 和 ry 属性及其对应的呈现属性。
SVGLineElement 接口对应于 ‘line’ 元素。
[Exposed=Window] interface SVGLineElement : SVGGeometryElement { [SameObject] readonly attribute SVGAnimatedLength x1; [SameObject] readonly attribute SVGAnimatedLength y1; [SameObject] readonly attribute SVGAnimatedLength x2; [SameObject] readonly attribute SVGAnimatedLength y2; };
这些 x1、y1、x2 和 y2 IDL 属性 反映 了 ‘x1’、‘y1’、‘x2’ 和 ‘y2’ 内容属性,分别。
SVGAnimatedPoints 接口用于 反映 ‘points’ 属性在 ‘polygon’ 或 ‘polyline’ 元素上。它混入到 SVGPolygonElement 和 SVGPolylineElement 接口中。
注意:在 SVG 1.1 SE 中,animatedPoints 属性表示当前动画值。在这个版本的 SVG 中,它只是 points 的别名。
interface mixin SVGAnimatedPoints { [SameObject] readonly attribute SVGPointList points; [SameObject] readonly attribute SVGPointList animatedPoints; };
这些 points 和 animatedPoints IDL 属性表示反映属性的当前非动画值。当获取 points 或 animatedPoints 时,返回一个 SVGPointList 对象,该对象反映反映属性的基本值。
SVGPointList 接口是一个列表接口,其元素是DOMPoint 对象。 一个SVGPointList 对象表示一个点的列表。
[Exposed=Window] interface SVGPointList { readonly attribute unsigned long length; readonly attribute unsigned long numberOfItems; void clear(); DOMPoint initialize(DOMPoint newItem); getter DOMPoint getItem(unsigned long index); DOMPoint insertItemBefore(DOMPoint newItem, unsigned long index); DOMPoint replaceItem(DOMPoint newItem, unsigned long index); DOMPoint removeItem(unsigned long index); DOMPoint appendItem(DOMPoint newItem); setter void (unsigned long index, DOMPoint newItem); };
所有SVGPointList 接口成员的行为在列表接口中定义。
该规范对DOMPoint 对象的行为施加了额外要求,这些要求超出了几何接口 规范中描述的内容,以便它们可以用于反映‘points’属性。
每个DOMPoint 对象在三种模式中操作。 它可以:
一个DOMPoint对象可以与特定元素关联。关联元素用于确定如果对象反映一个属性,哪个元素的内容属性需要更新。除非另有描述,DOMPoint对象不会与任何元素关联。
一个DOMPoint 对象可以被指定为只读,这意味着尝试修改对象将导致抛出异常。当分配给只读DOMPoint的x, y, w或 z IDL 属性时,必须抛出NoModificationAllowedError,而不是更新内部坐标值。
注意,这仅适用于可读写的DOMPoint 接口;DOMPointReadOnly 接口在不用于反映 ‘points’ 属性时,若尝试修改则会自动抛出异常。
在给可写的DOMPoint的 x, y, w 或 z IDL 属性分配时,在更新内部坐标值后,执行以下步骤:
SVGPolylineElement 对象 表示 DOM 中的一个‘多线段’ 元素。
[Exposed=Window] interface SVGPolylineElement : SVGGeometryElement { }; SVGPolylineElement 包含 SVGAnimatedPoints;
SVGPolygonElement 对象表示 DOM 中的一个‘多边形’元素。
[Exposed=Window] interface SVGPolygonElement : SVGGeometryElement { }; SVGPolygonElement 包含 SVGAnimatedPoints;