HTML5之SVG 2D入门8—文档结构及相关元素总结
建站知识 2021-07-02 23:00www.168986.cn长沙网站建设
前面介绍了很多的基本元素,包括结构相关的组合和重用元素,这里先对SVG的文档结构中剩下的相关元素简单一下,然后继续向前领略SVG的其他特性。
SVG文档的元素基本可以分为以下几类
•动画元素animate,animateColor,animateMotion,animateTransform,set;
•解释元素desc,metadata,title;
•图形元素circle,ellipse,line,path,polygon,polyline,rect;
•结构元素defs,g,svg,symbol,use;
•渐变元素linearGradient,radialGradient;
•其他元素a,altGlyphDef,clipPath,color-profile,cursor,filter,font,font-face,foreignObject,image,marker,mask,pattern,script,style,switch,text,view等。
其中图形元素,渐变元素,文本,图像元素和组合等都介绍过了,狼蚁网站SEO优化介绍几个与结构相关的元素。
视窗-svg元素
可以在svg元素中以任何顺序放置任何的其他元素,包括嵌套svg元素。
svg元素支持的属性常用的也就是id,class,x,y,width,height,viewBox,preserveAspectRatio,以及fill和stroke的相关属性。
svg元素支持的事件也是常用的onload,onmouseover,onmousemove,onmousedown,onmouseup,onclick,onfocusin,onfocusout,onresize,onscroll,onunload等。svg元素就不多说了,完整的属性和事件列表参看后面的官方文档。
解释性元素-desc元素与title元素
每个容器元素(可以包含其他容器元素或者图形元素的元素,例如a,defs,glyph,g,marker,mask,missing-glyph,pattern,svg,switch和symbol)和图形元素都可以包含desc和title元素,这两个元素都是辅助性的元素,用于解释相关情境;它们的内容都是文本。当SVG文档被渲染的时候,这2个元素不会被渲染到图形中。这个2个元素之间差别不是太大,title在有些实现中是作为提示信息出现的,所以通常title是放到父元素的第一个位置上。
典型的用法如下
<svgxmlns="http://.w3./2000/svg" version="1.1"width="4in"height="3in">
<g>
<title>Companysalesbyregion</title>
<desc>
Thisisabarchartwhichshows
panysalesbyregion.
</desc>
<!--Barchartdefinedasvectordata-->
</g>
</svg>
通常,最外层的svg元素要配以title说明,这样程序可读性更好。
标记-marker元素
标记定义了附加到一个或者多个顶点(path,line,polyline或者polygon的顶点)上的图形元素(箭头和多点标记)。箭头可以通过把一个标记附加到path,line或者polyline的起点或者终点上。多点标记可以把一个标记附加到path,line,polyline或者polygon的所有顶点上。
标记是由marker元素定义的,然后在path,line,polyline或者polygon中设置相关的属性(marker,marker-start,marker-mid,和marker-end)就可以了。看个例子
<svgwidth="4in"height="2in"
viewBox="0040002000"version="1.1"
xmlns="http://.w3./2000/svg">
<defs>
<markerid="Triangle"
viewBox="001010"refX="0"refY="5"
markerUnits="strokeWidth"
markerWidth="4"markerHeight="3"
orient="auto">
<pathd="M00L105L010z"/>
</marker>
</defs>
<desc>Placinganarrowheadattheendofapath.
</desc>
<pathd="M1000750L2000750L25001250"
fill="none"stroke="black"stroke-width="100"
marker-end="url(#Triangle)"/>
</svg>
狼蚁网站SEO优化详细看看marker的相关知识
1.marker是容器元素,可以存放任意顺序的图形元素,容器元素,动画,渐变元素等。
2.marker元素可以创建新的视窗设置viewBox的值。
3.marker比较重要的属性
markerUnits="strokeWidth|userSpaceOnUse"
这个属性定义了属性markerWidth,markerHeight和marker的内容使用的坐标系统。这个属性有2个值可选,第一个值strokeWidth是默认值,代表属性markerWidth,markerHeight和marker的内容使用的坐标系统的单位等于引用该marker的图形元素的stroke-width设置的值。
例如上面的例子中,marker元素的width是400,height是300,不过千万不要混淆了,mark元素中的path使用的坐标是viewBox设置的新的用户坐标系。
该属性一个取值userSpaceOnUse,代表属性markerWidth,markerHeight和marker的内容使用引用该marker的图形元素的坐标系统。
refX,refY定义了引用的点与marker对齐的位置坐标。例如上面的例子中,引用的点是终点,要把它对齐到marker的(0,5)位置。注意refX,refY使用的是经过viewBox变换过的最终用户坐标系。
markerWidth,markerHeightmarker视窗的宽和高,这个很好理解。
orient定义了marker旋转的角度。可以指定一个角度或者直接赋值auto。
auto代表x轴正方向按照下列规则旋转
a.如果marker所在的点只属于一个path,则marker的x轴正向与path走向相同。参看上面例子。
b.如果marker所在的点属于两个不同的path,则marker的x轴正向与两个path的夹角的角等分线走向一致。
4.图形元素的marker属性
图形元素要引用一个marker则需要使用相关的属性,主要是这3个marker-start(把引用的marker放到起点),marker-mid(把引用的marker放到除起点和终点外的所有点),marker-end(把引用的marker放到终点)。这3个属性的取值可能是none(代表不引用marker),marker的引用(引用某marker),inherit(这个不用多说了)。
从上面的例子中也可以看到marker的用法。
脚本与样式-script元素与style元素
实际上,基本上所有的属性(对于所有元素,不仅是文本)都可以用CSS与一个元素关联,并且所有CSS属性都在SVG图像中可用。可以直接用样式属性设计元素的样式,或者引用样式表设计元素的样式。对XML文件来说不应该解析样式表(因为它们偶尔包含会引起问题的字符),需要将它们置于XMLCDATA节。脚本也是同样的道理,需要放到XMLCDATA节中。看狼蚁网站SEO优化的CSS例子
<svgwidth="400"height="200"xmlns="http://.w3./2000/svg">
<desc>Text</desc><defs>
<styletype="text/css">
<![CDATA[
.abbreviation{text-decoration:underline;}
]]>
</style>
</defs>
<g>
<textx="20"y="50"font-size="30">Colorscanbespecified</text>
<textx="20"y="100"font-size="30">bytheir
<tspanfill="rgb(255,0,0)"class="abbreviation">R</tspan>
<tspanfill="rgb(0,255,0)"class="abbreviation">G</tspan>
<tspanfill="rgb(0,0,255)"class="abbreviation">B</tspan>values</text>
<textx="20"y="150"font-size="30">orbykeywordssuchas</text>
<textx="20"y="200">
<tspanstyle="fill:lightsteelblue;font-size:30">lightsteelblue</tspan>,
</text>
</g>
</svg>
再看脚本的例子
<svgwidth="500"height="300"xmlns="http://.w3./2000/svg">
<desc>Scriptingtheonclickevent</desc>
<defs>
<scripttype="text/ecmascript">
<![CDATA[
functionhideReveal(evt){
varimageTarget=evt.target;
vartheFill=imageTarget.getAttribute("fill");
if(theFill=='white')
imageTarget.setAttribute("fill","url(#notes)");
else
imageTarget.setAttribute("fill","white");
}
]]>
</script>
<patternid="notes"x="0"y="0"width="50"height="75"
patternTransform="rotate(15)"
patternUnits="userSpaceOnUse">
<ellipsecx="10"cy="30"rx="10"ry="5"/>
<linex1="20"y1="30"x2="20"y2="0"
stroke-width="3"stroke="black"/>
<linex1="20"y1="0"x2="30"y2="5"
stroke-width="3"stroke="black"/>
</pattern>
</defs>
<ellipseonclick="hideReveal(evt)"cx="175"cy="100"rx="125"ry="60"
fill="url(#notes)"stroke="black"stroke-width="5"/>
</svg>
条件处理-switch元素
条件处理属性是能控制所在元素渲染与否的属性。基本上大多数的元素(特别是图形元素)都可以指定条件处理属性。条件处理属性有3个requiredFeatures,requiredExtensions和systemLanguage。这些属性就是一组测试,都允许指定一个值列表(前面两个属性是空格隔开的,语言这个属性是使用逗号隔开的),默认值都为true。
SVG的switch元素提供了按指定条件渲染的能力。switch元素是一个容器元素,可以包含图形元素,解释性元素,动画元素,a,foreignObject,g,image,svg,switch,text,use等元素。switch元素会按顺序检查直接子元素的条件处理属性,然后渲染满足自身条件的的第一个子元素,其他的子元素都会被忽略。这些属性与display属性一样,只会影响直接使用这些属性的元素的渲染,不会影响引用的元素(比如use引用的元素)。简单的说,这3个属性会影响a,altGlyph,foreignObject,textPath,tref,tspan,animate,animateColor,animateMotion,animateTransform,set等元素,不会影响defs,cursor,mask,clipPath,pattern等元素(这些元素那么不是可渲染的,要么就是引用别的元素)。
注意子元素的display和visibility属性值并不影响switch元素条件判断的结果。
条件处理属性的取值列表参看官方文档,这里就看一个小例子
<switch>
<rectrequiredFeatures="http://.w3./TR/SVG11/feature#Filter"
x="10"y="10"width="322"height="502"opacity="0.6"
fill="black"stroke="none"filter="url(#gblurshadow)"/>
<rectx="10"y="10"width="322"height="502"opacity="0.6"
fill="black"stroke="none"/>
</switch>
这个例子的意思简单的说就是使用的浏览器支持filter特性,那么就绘制上面的矩形(带filter属性),如果不支持filter特性,就绘制狼蚁网站SEO优化的矩形。
其实更多的时候,用的比较多的属性是systemLanguage,就是文本的多语言处理能力。例如
<svgxmlns="http://.w3./2000/svg" version="1.1"width="5cm"height="5cm">
<switch>
<textx='10'y='20'systemLanguage="de">de-HAHA</text>
<textx='10'y='20'systemLanguage="en">en-haha</text>
</switch>
</svg>
实用参考
脚本索引
开发中心
热门参考
官方文档
SVG文档的元素基本可以分为以下几类
•动画元素animate,animateColor,animateMotion,animateTransform,set;
•解释元素desc,metadata,title;
•图形元素circle,ellipse,line,path,polygon,polyline,rect;
•结构元素defs,g,svg,symbol,use;
•渐变元素linearGradient,radialGradient;
•其他元素a,altGlyphDef,clipPath,color-profile,cursor,filter,font,font-face,foreignObject,image,marker,mask,pattern,script,style,switch,text,view等。
其中图形元素,渐变元素,文本,图像元素和组合等都介绍过了,狼蚁网站SEO优化介绍几个与结构相关的元素。
视窗-svg元素
可以在svg元素中以任何顺序放置任何的其他元素,包括嵌套svg元素。
svg元素支持的属性常用的也就是id,class,x,y,width,height,viewBox,preserveAspectRatio,以及fill和stroke的相关属性。
svg元素支持的事件也是常用的onload,onmouseover,onmousemove,onmousedown,onmouseup,onclick,onfocusin,onfocusout,onresize,onscroll,onunload等。svg元素就不多说了,完整的属性和事件列表参看后面的官方文档。
解释性元素-desc元素与title元素
每个容器元素(可以包含其他容器元素或者图形元素的元素,例如a,defs,glyph,g,marker,mask,missing-glyph,pattern,svg,switch和symbol)和图形元素都可以包含desc和title元素,这两个元素都是辅助性的元素,用于解释相关情境;它们的内容都是文本。当SVG文档被渲染的时候,这2个元素不会被渲染到图形中。这个2个元素之间差别不是太大,title在有些实现中是作为提示信息出现的,所以通常title是放到父元素的第一个位置上。
典型的用法如下
复制代码
代码如下:<svgxmlns="http://.w3./2000/svg" version="1.1"width="4in"height="3in">
<g>
<title>Companysalesbyregion</title>
<desc>
Thisisabarchartwhichshows
panysalesbyregion.
</desc>
<!--Barchartdefinedasvectordata-->
</g>
</svg>
通常,最外层的svg元素要配以title说明,这样程序可读性更好。
标记-marker元素
标记定义了附加到一个或者多个顶点(path,line,polyline或者polygon的顶点)上的图形元素(箭头和多点标记)。箭头可以通过把一个标记附加到path,line或者polyline的起点或者终点上。多点标记可以把一个标记附加到path,line,polyline或者polygon的所有顶点上。
标记是由marker元素定义的,然后在path,line,polyline或者polygon中设置相关的属性(marker,marker-start,marker-mid,和marker-end)就可以了。看个例子
复制代码
代码如下:<svgwidth="4in"height="2in"
viewBox="0040002000"version="1.1"
xmlns="http://.w3./2000/svg">
<defs>
<markerid="Triangle"
viewBox="001010"refX="0"refY="5"
markerUnits="strokeWidth"
markerWidth="4"markerHeight="3"
orient="auto">
<pathd="M00L105L010z"/>
</marker>
</defs>
<desc>Placinganarrowheadattheendofapath.
</desc>
<pathd="M1000750L2000750L25001250"
fill="none"stroke="black"stroke-width="100"
marker-end="url(#Triangle)"/>
</svg>
狼蚁网站SEO优化详细看看marker的相关知识
1.marker是容器元素,可以存放任意顺序的图形元素,容器元素,动画,渐变元素等。
2.marker元素可以创建新的视窗设置viewBox的值。
3.marker比较重要的属性
markerUnits="strokeWidth|userSpaceOnUse"
这个属性定义了属性markerWidth,markerHeight和marker的内容使用的坐标系统。这个属性有2个值可选,第一个值strokeWidth是默认值,代表属性markerWidth,markerHeight和marker的内容使用的坐标系统的单位等于引用该marker的图形元素的stroke-width设置的值。
例如上面的例子中,marker元素的width是400,height是300,不过千万不要混淆了,mark元素中的path使用的坐标是viewBox设置的新的用户坐标系。
该属性一个取值userSpaceOnUse,代表属性markerWidth,markerHeight和marker的内容使用引用该marker的图形元素的坐标系统。
refX,refY定义了引用的点与marker对齐的位置坐标。例如上面的例子中,引用的点是终点,要把它对齐到marker的(0,5)位置。注意refX,refY使用的是经过viewBox变换过的最终用户坐标系。
markerWidth,markerHeightmarker视窗的宽和高,这个很好理解。
orient定义了marker旋转的角度。可以指定一个角度或者直接赋值auto。
auto代表x轴正方向按照下列规则旋转
a.如果marker所在的点只属于一个path,则marker的x轴正向与path走向相同。参看上面例子。
b.如果marker所在的点属于两个不同的path,则marker的x轴正向与两个path的夹角的角等分线走向一致。
4.图形元素的marker属性
图形元素要引用一个marker则需要使用相关的属性,主要是这3个marker-start(把引用的marker放到起点),marker-mid(把引用的marker放到除起点和终点外的所有点),marker-end(把引用的marker放到终点)。这3个属性的取值可能是none(代表不引用marker),marker的引用(引用某marker),inherit(这个不用多说了)。
从上面的例子中也可以看到marker的用法。
脚本与样式-script元素与style元素
实际上,基本上所有的属性(对于所有元素,不仅是文本)都可以用CSS与一个元素关联,并且所有CSS属性都在SVG图像中可用。可以直接用样式属性设计元素的样式,或者引用样式表设计元素的样式。对XML文件来说不应该解析样式表(因为它们偶尔包含会引起问题的字符),需要将它们置于XMLCDATA节。脚本也是同样的道理,需要放到XMLCDATA节中。看狼蚁网站SEO优化的CSS例子
复制代码
代码如下:<svgwidth="400"height="200"xmlns="http://.w3./2000/svg">
<desc>Text</desc><defs>
<styletype="text/css">
<![CDATA[
.abbreviation{text-decoration:underline;}
]]>
</style>
</defs>
<g>
<textx="20"y="50"font-size="30">Colorscanbespecified</text>
<textx="20"y="100"font-size="30">bytheir
<tspanfill="rgb(255,0,0)"class="abbreviation">R</tspan>
<tspanfill="rgb(0,255,0)"class="abbreviation">G</tspan>
<tspanfill="rgb(0,0,255)"class="abbreviation">B</tspan>values</text>
<textx="20"y="150"font-size="30">orbykeywordssuchas</text>
<textx="20"y="200">
<tspanstyle="fill:lightsteelblue;font-size:30">lightsteelblue</tspan>,
</text>
</g>
</svg>
再看脚本的例子
复制代码
代码如下:<svgwidth="500"height="300"xmlns="http://.w3./2000/svg">
<desc>Scriptingtheonclickevent</desc>
<defs>
<scripttype="text/ecmascript">
<![CDATA[
functionhideReveal(evt){
varimageTarget=evt.target;
vartheFill=imageTarget.getAttribute("fill");
if(theFill=='white')
imageTarget.setAttribute("fill","url(#notes)");
else
imageTarget.setAttribute("fill","white");
}
]]>
</script>
<patternid="notes"x="0"y="0"width="50"height="75"
patternTransform="rotate(15)"
patternUnits="userSpaceOnUse">
<ellipsecx="10"cy="30"rx="10"ry="5"/>
<linex1="20"y1="30"x2="20"y2="0"
stroke-width="3"stroke="black"/>
<linex1="20"y1="0"x2="30"y2="5"
stroke-width="3"stroke="black"/>
</pattern>
</defs>
<ellipseonclick="hideReveal(evt)"cx="175"cy="100"rx="125"ry="60"
fill="url(#notes)"stroke="black"stroke-width="5"/>
</svg>
条件处理-switch元素
条件处理属性是能控制所在元素渲染与否的属性。基本上大多数的元素(特别是图形元素)都可以指定条件处理属性。条件处理属性有3个requiredFeatures,requiredExtensions和systemLanguage。这些属性就是一组测试,都允许指定一个值列表(前面两个属性是空格隔开的,语言这个属性是使用逗号隔开的),默认值都为true。
SVG的switch元素提供了按指定条件渲染的能力。switch元素是一个容器元素,可以包含图形元素,解释性元素,动画元素,a,foreignObject,g,image,svg,switch,text,use等元素。switch元素会按顺序检查直接子元素的条件处理属性,然后渲染满足自身条件的的第一个子元素,其他的子元素都会被忽略。这些属性与display属性一样,只会影响直接使用这些属性的元素的渲染,不会影响引用的元素(比如use引用的元素)。简单的说,这3个属性会影响a,altGlyph,foreignObject,textPath,tref,tspan,animate,animateColor,animateMotion,animateTransform,set等元素,不会影响defs,cursor,mask,clipPath,pattern等元素(这些元素那么不是可渲染的,要么就是引用别的元素)。
注意子元素的display和visibility属性值并不影响switch元素条件判断的结果。
条件处理属性的取值列表参看官方文档,这里就看一个小例子
复制代码
代码如下:<switch>
<rectrequiredFeatures="http://.w3./TR/SVG11/feature#Filter"
x="10"y="10"width="322"height="502"opacity="0.6"
fill="black"stroke="none"filter="url(#gblurshadow)"/>
<rectx="10"y="10"width="322"height="502"opacity="0.6"
fill="black"stroke="none"/>
</switch>
这个例子的意思简单的说就是使用的浏览器支持filter特性,那么就绘制上面的矩形(带filter属性),如果不支持filter特性,就绘制狼蚁网站SEO优化的矩形。
其实更多的时候,用的比较多的属性是systemLanguage,就是文本的多语言处理能力。例如
复制代码
代码如下:<svgxmlns="http://.w3./2000/svg" version="1.1"width="5cm"height="5cm">
<switch>
<textx='10'y='20'systemLanguage="de">de-HAHA</text>
<textx='10'y='20'systemLanguage="en">en-haha</text>
</switch>
</svg>
实用参考
脚本索引
开发中心
热门参考
官方文档
长沙网站设计
- 如何自己建一个网站 自己想建个网站,怎么建
- 如何制作网站免费建站 创建网站免费注册
- html简单网页代码 html简单网页代码超链接
- dreamweaver网页制作 dreamweaver网页制作模板
- 上海网站建设 上海网站建设制作微信
- 如何制作网站和网页 如何制作一个网页
- html网页制作代码大全 端午节html网页制作代码大
- app开发公司 app开发公司前十名
- html网页制作 html网页制作文字居中
- app制作一个需要多少钱 请人制作一个app多少钱
- 成都网站制作 成都网站制作维护
- 百度建一个网站多少钱 百度做个公司网站要多少
- html+css网页制作成品 web网页制作成品css+javascrip
- html网页制作案例 html网页设计案例
- html+css网页制作成品 web网页制作成品css+javascrip
- 个人网站模板 个人网站模板HTML