HTML5之SVG 2D入门7—SVG元素的重用与引用

2020-04-22 06:50:15易采站长站整理

下面这个修改过的代码显示了symbol的使用方式:


<svgxmlns=”http://www.w3.org/2000/svg”
xmlns:xlink=”http://www.w3.org/1999/xlink”
version=”1.1″width=”5cm”height=”5cm”>
<desc>Twogroups,eachoftworectangles</desc>
<symbolid=”group1″fill=”red”>
<rectx=”1cm”y=”1cm”width=”1cm”height=”1cm”/>
<rectx=”3cm”y=”1cm”width=”1cm”height=”1cm”/>
</symbol>
<gid=”group2″fill=”blue”>
<rectx=”1cm”y=”3cm”width=”1cm”height=”1cm”/>
<rectx=”3cm”y=”3cm”width=”1cm”height=”1cm”/>
</g>
<usexlink:href=”#group1″target=”_blank”rel=”nofollow”>
<!–Showoutlineofcanvasusing’rect’element–>
<rectx=”.02cm”y=”.02cm”width=”4.96cm”height=”4.96cm”
fill=”none”stroke=”blue”stroke-width=”.02cm”/>
</svg>

定义-defs元素
SVG允许定义一组对象,然后重用这组对象(注意,不仅仅是图形对象)。最常见的例子如定义渐变色,然后再其他的图形对象中赋给fill属性。渐变色定义的时候是不会渲染的,所以这类型的对象可以放到任何地方。重用对于图形对象中也是经常存在的,而且我们也不希望定义的时候直接渲染,而是想在引用的地方渲染,这个可以用defs元素实现。

通常情况下,推荐的做法是:只要有可能,就把被引用的对象放到defs元素中。这些对象通常是:altGlyphDef,clipPath,cursor,filter,marker,mask,pattern,linearGradient,radialGradient,symbol和图形对象等。把这些对象定义在defs元素中很容易理解,所以就提高了可访问性。

其实作为容器对象的g元素、symbol元素、defs元素都不同程度上提供了重用的作用,只不过每个元素的特性可能少许不同:比如g元素是直接渲染的,symbol和defs不会直接渲染,symbol含有viewBox属性,会创建新的视窗。

通常都会给在defs中定义的元素赋予id属性,并在用到的地方直接使用。根据元素的不同,这些定义可以用到不同地方,比如下面的渐进色作为属性来使用了:


<svgwidth=”8cm”height=”3cm”
xmlns=”http://www.w3.org/2000/svg”version=”1.1″>
<desc>LocalURIreferenceswithinancestor’s’defs’element.</desc>
<defs>
<linearGradientid=”Gradient01″>
<stopoffset=”20%”stop-color=”#39F”/>
<stopoffset=”90%”stop-color=”#F3F”/>