SVG实战开发学习(五)——装饰SVG图形

之前介绍过<defs>元素,它允许我们自定义图形元素。在本章中将要使用这个元素来定义SVG图形的色彩渐变、模式填充、剪裁和遮罩,还将介绍如何在svg中使用css样式表。

【色彩渐变】

svg中有两种色彩渐变:线性渐变和反射渐变。它们的渐变格式都被定义在<defs>元素中,然后在需要的SVG图元中引用它。

线性渐变——是沿着直线方向的色彩渐变过度,使用<linearGradient>元素来定义。

基本属性:

id="GradientName":<linearGradient>元素的标识ID,也就是它的名字,取值是字符串,用来被需要渐变效果的图形引用。

x1:表示渐变矢量起点的X轴坐标,默认值为0%;

y1:表示渐变矢量起点的Y轴坐标,默认值为0%;

x2:表示渐变矢量终点的X轴坐标,默认值为100%;

y2:表示渐变矢量终点的Y轴坐标,默认值为0%;

(特别说明:上述4个坐标值的取值既可以是数字也可以是百分比,而且可以全部选择默认。选择默认时渐变矢量处于水平向右的方向,但其具体的位置取决于下面将要介绍的"gradientUnits")属性的值。

其实色彩属性不在<linearGradient>元素中定义,而是在其子元素<stop>中定义,<stop>元素同时"服侍二主",也是反射渐变的子元素。<stop>元素定义了色彩渐变的关键点的色彩和位置,而且每个<linearGradient>元素下可以有若干个<stop>元素,也就是可以拥有若干个渐变关键点:如果有若干个<stop>元素,那么它们的排列顺序必须严格遵循"offset"属性值的大小。

基本属性:

offset:表示渐变关键点的位置,通常用百分比来表示,因为可能无法知道渐变矢量的具体位置,只给出一个相对的位置。0%代表起点,100%代表终点,取值大于1取1,小于0取0.对于线性渐变,该属性表示沿着渐变矢量方向的关键点位置;而对于放射渐变,则表示从点(fx,fy)到外圆圆周各方向上的某个比例处的点,这些点构成了一条包围点(fx,fy)的曲线。

stop-color:表示渐变关键点的颜色值,默认是黑色。

stop-opacity:表示渐变关键点渲染时的透明度,取值从0到1,即透明到不透明,默认值为1.

【放射渐变】

svg使用<radialGradient>元素来定义。放射渐变除了渐变矢量的定义与线性渐变不同外,其他属性都基本一样。

基本属性

cx:定义圆心的X轴坐标,默认值是50%,即中心点(中心放射)。这个属性和下面要介绍的"cy"属性都是为了帮助放射渐变定义一个圆,这个圆内部分就是色彩的渐变区域。

cy:定义圆心的Y轴坐标,默认值是50%。

r:定义圆的半径,默认值是50%。

fx:

fy:

【带色彩渐变效果的箭头】

svg中绘制箭头的元素<maker>元素,<maker>元素通常也在<defs>元素中定义。

【模式填充】

模式填充与色彩渐变类似,也需要在<defs>中事先定义模板效果。

基本属性:

id:<pattern>元素的标识ID,也就是它的名字。取值是字符串,用来被需要模式填充效果的图形引用。

x:定义模式填充的矩形模板左上角的X轴坐标,默认值是0%,其长度单位由下文的"patternUnits"属性决定。

y:定义模式填充的矩形模板左上角的Y轴坐标,其他同X属性。

width:定义模式填充的矩形模板的宽度,非负,0为不渲染。

height:定义模式填充的矩形模板的高度,非负,0为不渲染。

patternUnits:" userSpaceOnUse | objectBoundingBox "定义上述的大小、位置属性的长度单位。其定义与上一节模式识别中介绍的" gradientUnits "属性相似。

viewBox=" x1 y1 x2 y2 "定义图元在模板矩形内的位置时所使用的内部坐标系。这个属性与<svg>元素中的" viewbox "属性的意义是一样的,是一个相对坐标系,而上述的" x,y,width,height "属性定义的是模板矩形在所引用的元素中位置。

具体效果参见书P93

【svg中的CSS】

svg中几乎所有所有的可视化图形元素都具有" style "属性,它定义了如何渲染这些图形元素,svg有很多样式属性与css和XSL是相同的,但也拥有一些专门为SVG设立的属性,svg的css样式涵盖字体、文字、滤镜效果、交互、绘图等几大类,使用的方法与HTML中的css有类似之处。

 【内嵌CSS】

直接把CSS样式表定义在svg文档中,它是通过在<defs>元素中定义<style>元素来实现的,但这与使用"style"属性是不同的。<style>元素允许大家把CSS样式表直接嵌入在svg文档中。

<defs>

  <style type="text/css"><![CDATA[

  rect{ fill:red;

  stroke:blue;

  stroke-3;

 }

  ]]>

  </style>

</defs>

<rect x="200" width="300" height="100"/>

以上实例就是定义的css样式表。使用了实体嵌入标记"<![CDATA[]]>",这样即使样式表中有不符合XML语法的语句也不会对SVG文档的解析造成影响。因为SVG解析器不会对这个实体标记内的字符数据流进行XML规范检查。

【外部CSS】

与内部css方式相对应的是引用外部的css样式表,这种方式使得css代码更易维护,并且可重用性更好,不同的svg文档可以共享同一个css文件。这种引用方式同HTML中引用css样式表的方式很相似。下面举例说明,外部css文件名为"svg.css"。

【style属性常用参数一览】

css样式在svg中的另外一个用法就是把"style"属性写入在某些元素下,使得这些元素按照"style"属性的定义进行渲染。有时可以在<g>元素内定义"style"属性,其下的元素都会自动继承这个样式,如果这些元素对一些样式不匹配的话,svg会自动识别而抛弃,下面列举的参数中有些已经出现在之前的章节中,这里只对常用的参数做一个归纳。

1、绘图类参数

"fill":是否填充及填充色。

"fill-opacity":填充透明度。

"fill-rule":填充的的规则。

"marker":引用箭头标记。

"marker-start":在路径起点绘制一个箭头。

"marker-mid":在路径中点绘制一个箭头。

"marker-end":在路径终点绘制一个箭头。

"stroke":是否描边及描边色。

" stroke-width ":描边宽度。

"stroke-dasharray":描边所用的线型。

"stroke-dashoffset":描边所用的线型的线条间的偏移量。

"stroke-linecap":路径线条端点的绘制样式。

"stroke-linejoin":线条交叉处的过度形状。

"stroke-miterlimit":路径端点是"miter"时的大小限制。

"stroke-opacity":描边的透明度。

"stroke-rendering":描边时的渲染规则。

2、字体类参数

"font-family":字体名称。

"font-size":字号大小。

"font-size-adjust":字号大小细微调整时的规则。

"font-stretch":字体拉升时的规则。

"font-style":字体额外的样式。

"font-variant":字体的变体方式。

"font-weight":字体是否是粗体或者粗体的程度。

3、文字类参数

"direction":文字排列方向。

"letter-spacing":文字间距。

"text-decoration":文字的修饰效果。

"unicode-bidi":文字使用Unicode编码方式。

" word-spacing ":文字中的词的间距。

"alignment-baseline":文字的基线排列方式。

4、可视化媒体类参数

"clip":仅用于最外层<svg>元素,说明剪裁方式。

"color":颜色值。

"cursor":鼠标光标的形状。

"display":图像对象是否显示。

"overflow":仅用于创建新视口的元素,说明该元素大小的处理方式。

"visibility":图像对象是否可见。

5、滤镜效果类参数

"enable-background":滤镜渲染时是否考虑背景图像。

"filter":滤镜参数细节。

"flood-color":填充色彩。

"flood-opacity":填充透明度。

6、渐变类参数

"stop-color":色彩渐变的起止颜色值。

"stop-opacity":色彩渐变的透明度。

7、交互类参数

"pointer-events":该元素是否产生事件。

【使用直接属性】

css样式在svg中还有一个用法,就是把"style"属性的参数直接作为元素的属性值。在前面的章节中,也出现过这种用法。比如这样一个元素定义:

<rect x="200" y="100" width="300" height="100" style="fill:red;stroke:black"/>

这里使用"style"属性定义的方法,如果使用直接属性,那么应该这样定义:

<rect x="200" y="100" width="300" height="100" fill="red" stroke="black"/>

 【使用class属性】

如果我们在一个css文件中这样定义:

.road{color:red}

.company{color:yellow}

.river{color:blue}

要引用这些样式时就必须使用如下的语法:

<path class="road" … />

原文地址:https://www.cnblogs.com/cacti/p/4689455.html