html显示svg,html中svg定义的图形是什么格式

  html显示svg,html中svg定义的图形是什么格式

  它与SVG canvas中的一样,使用标准的HTML/CSS颜色表示方法。这些颜色可用于填充和描边属性。基本有下面这些定义颜色的方式:

  1.颜色名称:直接使用红色、蓝色、黑色的颜色名称。

  2.rgba/rgb值:这个也很好理解,比如#ff0000,rgba(255,100,100,0.5)。

  3.十六进制值:以十六进制定义的颜色,例如#ffffff。

  4.渐变值:这个和canvas一样,支持两种渐变:线性渐变和圆形渐变。如下图所示:

  5.图案填充:使用自定义图案作为填充颜色。

  前面的都很简单。让我们集中在后面两个填充颜色。

  线性渐变linear gradient可以用线性渐变元素定义,每个渐变分量用stop元素定义。看下面这个例子:复制代码代码如下:

  svg宽度=120 高度=240

  面数

  线性梯度id=梯度1

  stop class=stop1 offset=0%/

  stop class=stop2 offset=50%/

  stop class= stop 3 offset= 100% /

  /线性梯度

  linear gradient id= gradient 2 x1= 0 x2= 0 y1= 0 y2= 1

  停止偏移=0% 停止-颜色=红色/

  光圈偏移量=50% 光圈颜色=黑色光圈不透明度=0/

  停止偏移=100% 停止-颜色=蓝色/

  /线性梯度

  style type=text/css ![CDATA[

  # rect 1 { fill:URL(# gradient 1);}

  . stop1 { stop-color:红色;}

  . stop2 { stop-color:黑色;停止-不透明度:0;}

  . stop3 { stop-color:蓝色;}

  ]]

  /风格

  /defs

  rect id= rect 1 x= 10 y= 10 rx= 15 ry= 15 width= 100 height= 100 /

  rect x= 10 y= 120 rx= 15 ry= 15 width= 100 height= 100 fill= URL(# gradient 2)/

  /svg在这个例子中,我们需要注意:

  1.渐变元素必须放在defs元素中;

  2.需要为渐变元素设置id值,否则其他元素无法使用这个渐变。

  3.渐变的成员由stop定义,其属性也可以由CSS定义;它支持标准HTML所支持的属性,如class和id。其它常用属性如下:offset属性:这个定义了这个成员颜色的范围,这个属性的取值范围是0%到100%(或者0到1);通常情况下,第一种颜色设置为0%,最后一种颜色设置为100%。stop-color属性:这个非常简单,定义了这个成员颜色的颜色。stop-opacity属性:定义成员颜色的透明度。x1,y1,x2,y2属性:这两点定义了渐变的方向。如果默认不写,就是水平渐变。在上面的例子中,还创建了一个垂直渐变。

  4.渐变的使用,如示例所示,可以直接以url(#id)的形式分配给填充或描边。

  5.渐变成员的重用:也可以使用xlink:href来引用已定义的渐变成员,所以上面的例子也可以改写如下:复制代码code如下:

  线性梯度id=梯度1

  stop class=stop1 offset=0%/

  stop class=stop2 offset=50%/

  stop class= stop 3 offset= 100% /

  /线性梯度

  linear gradient ID= gradient 2 x1= 0 x2= 0 y1= 0 y2= 1 xlink:href= # gradient 1 /环形渐变使用radialGradient元素定义圆形渐变,或使用stop定义成员颜色。请看示例:复制如下代码:

  svg宽度=120 高度=240

  面数

  径向梯度id=梯度3

  停止偏移=0% 停止-颜色=红色/

  停止偏移=100% 停止-颜色=蓝色/

  /radialGradient

  径向梯度id=梯度4 cx=0.25 cy=0.25 r=0.25

  停止偏移=0% 停止-颜色=红色/

  停止偏移=100% 停止-颜色=蓝色/

  /radialGradient

  /defs

  rect x= 10 y= 10 rx= 15 ry= 15 width= 100 height= 100 fill= URL(# gradient 3)/

  rect x= 10 y= 120 rx= 15 ry= 15 width= 100 height= 100 fill= URL(# gradient 4)/

  /svg

  从上面的例子我们可以看到,除了元素名和一些特殊的成员,其他的都和线性渐变一样,包括stop的定义,必须放入defs,必须给它一个id,用url(#id)赋值等等。这些特殊成员如下:offset属性:这个和线性渐变的值一样,但是意义不同。在圆形渐变中,0%代表圆心,很好理解。cx,cy,r属性:其实也很好理解。当然,圆形梯度必须定义环的中心和半径。你可以通过体验上面例子中圆圈的大小和位置来理解。fx,fy属性:定义颜色中心(焦点)的位置,即最粗渐变的坐标。在上面的例子中,最红的红色是圆心,这是默认效果;如果你想改变它,你可以设置FX和FY坐标值。

  但是,你需要注意上面的CX,CY,R,FX,FY的值。你会发现都是小数,那么单位是什么呢?

  这就需要先知道另一个相关的属性:gradientUnits,它定义了用来定义渐变的坐标单位。该属性有两个可用值:userSpaceOnUse和objectBoundingBox。

  objectBoundingBox是默认值,它使用的坐标都是相对于对象包围盒(方形包围盒,如果不是方形包围盒,就比较复杂,可以跳过),取值范围是0到1。例如,上面示例中CX和Cy的坐标值(0.25,0.25)。这意味着圆心在边界框的左上四分之一处,半径为0.25意味着半径长度为对象正方形边界框的1/4,如图所示。userSpaceOnUse表示使用绝对坐标。使用此设置时,必须确保渐变和填充对象保持在一个位置。

  查看以下示例,注意gradientUnits属性的默认值是objectBoundingBox:复制代码如下:

  svg宽度=120 高度=120

  面数

  径向梯度id=梯度5

  CX= 0.5 cy= 0.5 r= 0.5 FX= 0.25 fy= 0.25

  停止偏移=0% 停止-颜色=红色/

  停止偏移=100% 停止-颜色=蓝色/

  /radialGradient

  /defs

  rect x= 10 y= 10 rx= 15 ry= 15 width= 100 height= 100

  fill= URL(# gradient 5) stroke= black stroke-width= 2 /

  circle CX= 60 cy= 60 r= 50 fill=透明 stroke=白色 stroke-width=2/

  圆圈cx=35 cy=35 r=2 填充=白色笔划=白色/

  圆圈cx=60 cy=60 r=2 填充=白色笔划=白色/

  text x= 38 y= 40 fill= white font-family= sans-serif font-size= 10pt (FX,fy)/text

  text x= 63 y= 63 fill= white font-family= sans-serif font-size=" 10pt "(CX,cy)/text

  /svg

  看效果图看‘聚焦’的意思。

  另外还有渐变元素和一些变换属性,比如gradientTransform。这不是这里的重点,后面会总结转化。

  另一个可以使用的属性是spreadMethod属性,它定义了当渐变到达其终点时应该采取的行为。该属性有三个可选值:填充(默认值)、反射、重复。pad就不用说了,自然过渡。渐变结束后,使用最后一个成员颜色直接渲染对象的其余部分。Refect将让渐变继续,但渐变将继续反向渲染,从最后一种颜色到第一种颜色。等到再次到达渐变的末端,然后反转顺序,这样就填充了引导线对象。重复也会让渐变继续渲染,但不会逆序,从第一种颜色到最后一种颜色反复渲染。效果如下:

  查看重复呈现的代码:如下复制代码:

  svg宽度=220 高度=220

  面数

  radialGradient id=渐变

  CX= 0.5 cy= 0.5 r= 0.25 FX=. 25 fy=. 25

  spreadMethod=repeat

  停止偏移=0% 停止-颜色=红色/

  停止偏移=100% 停止-颜色=蓝色/

  /radialGradient

  /defs

  rect x= 50 y= 50 rx= 15 ry= 15 width= 100 height= 100

  fill=url(#Gradient)/

  /svg

  纹理填充纹理填充也是一种流行的填充方式。在SVG中,您可以使用pattern创建纹理,然后使用该图案填充其他对象。直接看例子:复制代码如下:

  svg宽度=200 高度=200

  面数

  线性梯度id=梯度6

  停止偏移=0% 停止-颜色=白色/

  停止偏移=100% 停止-颜色=蓝色/

  /线性梯度

  线性梯度id= gradient 7 x1= 0 x2= 0 y1= 0 y2= 1

  停止偏移=0% 停止-颜色=红色/

  停止偏移=100% 停止-颜色=橙色/

  /线性梯度

  /defs

  面数

  模式id=模式 x= .05 y= .05 宽度=. 25 高度=. 25

  rect x= 0 y= 0 width= 50 height= 50 fill= sky blue /

  rect x= 0 y= 0 width= 25 height= 25 fill= URL(# gradient 7)/

  circle CX= 25 cy= 25 r= 20 fill= URL(# gradient 6) fill-opacity= 0.5 /

  /模式

  /defs

  rect fill= URL(# Pattern) stroke= black x= 0 y= 0 width= 200 height= 200 /

  /svg

  这个例子看起来很简单,通过渐变创建图案,然后使用图案。

  填充矩形。这里应该注意:

  1.不同的浏览器在填充这种图案的时候会有不同的效果。

  例如,这个例子在FireFix和Chrome中是一样的。但是如果你用渐变色

  和模式定义在同一个defs组合中,FireFox仍然可以正常呈现,

  但是Chrome无法识别渐变颜色,只能用默认的黑色填充。

  2.模式也需要定义id。

  3.模式也必须在defs中定义。

  4.模式还用于直接分配要填充或描边的url(#id)。

  以上都很简单。让我们关注例子中的坐标表示。坐标的模式更复杂。

  模式包含两个相关的属性:patternUnits和patternContentUnits属性;这两个属性的值仍然只有两个:objectBoundingBox和userSpaceOnUse。上面已经提到了这两个值的含义。这里比较混乱的是,这两个属性的默认值是不一样的,但是当你明白这样做的原因后,你会发现真的很有道理。

  1.patternUnits属性

  该属性与渐变的gradientUnits属性相同,默认为objectBoundingBox。受此属性影响的属性有x、y、宽度和高度。这四个属性分别定义了图案的起点、宽度和高度。两者都采用相对值。在示例中,我们希望在水平和垂直方向上填充它们四次,因此宽度和高度都设置为0.25。

  2.patternContentUnits属性

  这个属性的缺省值正好相反,使用userSpaceOnUse。此属性描述在图案中绘制的形状的坐标系(如上面的rect、circle)。也就是说,默认情况下,你在pattern中绘制的形状和pattern本身的大小/位置使用不同的坐标系。考虑上面例子中的情况。我们要填充一个200*200的矩形,每个方向重复4次。这意味着每个图案都是50*50,所以在这个50*50的矩形中画出了图案中的两个矩形和一个圆。这样,我们就可以理解上图中矩形和圆形的坐标了。另外,为了居中,这个例子中的图案在渲染之前需要偏移10px,这个值受到patternUnits属性的限制,所以默认情况下,x和y的值是:10/200=0.05。

  那么为什么pattern要这样设置两个属性的默认值呢?

  这是由用户的使用情况决定的(用上面的例子讨论):第一种pattern样式:我觉得这是大多数情况,所以作为默认值处理:pattern会随着外部图形的缩放而拉伸。无论外围的正方形有多大,图案总是在两个方向上被填充4次。但是,图案中包含的图形不会随着外部填充的正方形的缩放而拉伸。很牵强,但我们这么理解吧。第二种pattern样式:图案中的形状也会随着外围形状的缩放而拉伸。我们可以展示patternContentUnits属性的值也被设置为objectBoundingBox来实现这种效果。例如,按如下方式修改pattern的部分:按如下方式复制代码:

  Pattern id= Pattern width=. 25 height=. 25 patternContentUnits= objectBoundingBox

  rect x= 0 y= 0 width=. 25 height=. 25 fill= sky blue /

  rect x= 0 y= 0 width= . 125 height= . 125 fill= URL(# gradient 2)/

  circle CX= . 125 cy= . 125 r= . 1 fill= URL(# gradient 1) fill-opacity= 0.5 /

  /模式

  修改后,当填充矩形的尺寸改变时,图案中的形状也会被拉伸。而且修改后改为相对外围物体的坐标,所以不再需要pattern的X和Y坐标。图案将始终被调整以适合填充的形状。第三种pattern的样式:图案的形状和大小是固定的。无论外围对象如何缩放,都可以将坐标系改为userSpaceOnUse来达到这个效果。代码如下:复制代码。代码如下:

  模式id=模式 x=10 y=10 宽度=50 高度=50 模式单位=用户空间使用

  rect x= 0 y= 0 width= 50 height= 50 fill= sky blue /

  rect x= 0 y= 0 width= 25 height= 25 fill= URL(# gradient 2)/

  circle CX= 25 cy= 25 r= 20 fill= URL(# gradient 1) fill-opacity= 0.5 /

  /模式

  下图显示了3中的典型模式:

  实用参考:

  官方文件:http://www.w3.org/TR/SVG11/

  脚本索引:http://msdn.microsoft.com/zh-cn/library/ff971910(v=vs . 85)。文件

  开发中心:https://developer.mozilla.org/en/SVG

  大众参考:http://www.chinasvg.com/

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: