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-width: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" … />

时间: 2024-10-20 20:35:15

SVG实战开发学习(五)——装饰SVG图形的相关文章

SVG实战开发学习(七)——文字与声音

[文字:<text>元素] 基本属性 x:文字左下角的X坐标,默认测量单位是当前用户坐标系单位,默认值是0. y:文字左下角的Y坐标. [<text>中嵌套<tspan>元素] 通过该元素就可以对同一个<text>元素内的文字位置.样式等属性进行单独或者部分设置,而不用再增加<text>元素. 基本属性: x:逐个定义文字左下角的X绝对坐标."+"号表示这是一个列表值(下同),列表值可以用逗号或者空格进行分割.如果是列表值则表

SVG实战开发学习(二)——基本图形

[1]线段:<line>元素 基本属性:两点确定一条线段,所以线段的基本属性就是它的起止点的坐标. <svg width="300" height="400"> <!--水平线--> <line x1="20" y1="20" x2="70" y2="20"  style="stroke:black"  /> <!

SVG实战开发学习(三)——路径

[三种基本的绘图指令] 1.移动到当前点( MoveTo )和绘制直线(LineTo) <path d=" M269 112, L217 163, L272 163, M257 149, L299 149, L249 200" fill="#ffffff" stroke="#000000" /> 解析:           指令                     实际绘制动作                    M269 11

初学者福利:java从零基础到真正大型企业的项目实战开发学习资源

乡亲们,快来围观啊,java初学者福利java从零基础到真正大型企业的项目实战开发学习资源合集,不必再花时间网上找了,精彩不容错过,以下是学习内容截图(更多精彩稍后推出,最新课程请加群之后,查看群公告): 下载链接: http://pan.baidu.com/s/1o6E8zhC,下载密码请加QQ群435604457.加群验证:java

SVG 学习&lt;五&gt; SVG动画

先上个动画图 说道SVG动画不得不提到两个属性:stroke-dasharray(这个前面有提到,做虚线的)stroke-dashoffset (这个是关键). 先说说stroke-dasharray 之前提过 可以把线条做成虚线状,值可以为一个数值 也可以是一个数组.详见:SVG 学习<二>进阶 SVG世界,视野,视窗 stroke属性 svg分组 最后一段.在动画里 stroke-dasharray 用来绘制路径或者虚线环绕效果. stroke-dashoffset : 官方解释 svg的

Flask之旅《Flask Web开发:基于Python的Web应用开发实战》学习笔记

<Flask Web开发:基于Python的Web应用开发实战> 点击上方的"目录"快速到达哦! 虽然简单的网站(Flask+Python+SAE)已经上线,但只是入门.开发大型网站,系统地学习一遍还是有必要的. 1 虚拟环境 2016-6-8 书上介绍了 virtualenv,每个venv都会拷贝一份packages到项目 /venv目录. virtualenv venv venv\Scripts\activate.bat (venv) $ pip freeze >

HTML5的 2D SVG和SVG DOM的学习笔记(2)---SVG动画

SVG支持动画.可以通过以下几种方法获得动画效果: 使用SVG动画元素.SVG可以描述随时间变化的图形对象,使用不同的动画元素可以定义运动路径,淡入淡出效果和对象的膨胀.收缩.旋转和变换颜色. 使用SVG DOM.SVG DOM兼容DOM1和DOM2,而SVG又定义了一套附加的DOM接口,支持脚本动画.通过这个方法可以获得各种动画效果.脚本语言中的定时器对象可以用来启动和控制动画. SVG被设计为支持未来版本的SMIL(Sychronized Multimedia Integration Lan

学习SVG系列(1):SVG基础

什么是SVG? 1.指可伸缩矢量图形 2.用来定义用于网络的基于矢量的图形 3.使用XML格式定义图形 4.图像在放大或改变尺寸的情况下其图形不会有所损失 5.万维网联盟的标准, 用于描述二维矢量图形的一种图形格式 SVG的优势 1.可被非常多的工具读取和修改(比如记事本) 2.与JPEG和GIF图像比起来,尺寸更小,且压缩性强 3.可伸缩 4.图像可在任何的分辨率下被高质量打印 5.可以在图像质量不下降的情况下放大或者缩小 6.图像中的文本是可选的,同时也是可以搜索的(比较适合制作地图) 7.

经验之谈:循序渐进学习Java Web开发的五个阶段

Java web开发是Java开发中的主要方向,那什么是Java web开发呢,Java web开发就是基于J2SE的web应用程序开发,就是通过Java来解决互联网web应用的问题,互联网Web包含两个部分:web服务器和web客户端,Java语言在web服务器端的应用十分丰富,比如常用的Servlet.JSP等,总之,Java编程技术的到来给Web互联网的发展注入了一针强心剂,既然Java Web开发功能这么强大,那我们应如何循序渐进的学习Java Web开发呢?下面亦是美网络小编分为五个阶