SVG意为可缩放矢量图
SVG使用XML格式定义图像
什么是SVG?
- SVG 指可伸缩矢量图形 (Scalable Vector Graphics)
- SVG 用来定义用于网络的基于矢量的图形
- SVG 使用 XML 格式定义图形
- SVG 图像在放大或改变尺寸的情况下其图形质量不会有所损失
- SVG 是万维网联盟的标准
- SVG 与诸如 DOM 和 XSL 之类的 W3C 标准是一个整体
背景和优势
在 2003 年一月,SVG 1.1 被确立为 W3C 标准。
参与定义 SVG 的组织有:太阳微系统、Adobe、苹果公司、IBM 以及柯达。
与其他图像格式相比,使用 SVG 的优势在于:
- SVG 可被非常多的工具读取和修改(比如记事本)
- SVG 与 JPEG 和 GIF 图像比起来,尺寸更小,且可压缩性更强。
- SVG 是可伸缩的
- SVG 图像可在任何的分辨率下被高质量地打印
- SVG 可在图像质量不下降的情况下被放大
- SVG 图像中的文本是可选的,同时也是可搜索的(很适合制作地图)
- SVG 可以与 Java 技术一起运行
- SVG 是开放的标准
- SVG 文件是纯粹的 XML
SVG 的主要竞争者是 Flash。
<?xml version="1.0" encoding="UTF-8"> <!--XML name Space 命名空间,当前标签的使用环境--> <svg xmlns="http://www.w3.org/2001/XMLSchema"> <rect width="100" height="50"></rect> </svg>
第一行包含XML声明。
version 属性可定义所使用的 SVG 版本,xmlns 属性可定义 SVG 命名空间。
HTML页面嵌入SVG的4种方法
1.iframe
<iframe src="res/svg.html" frameborder="0"></iframe>
2.object
<object data="res/svg.html" type=""></object>
注释:假如您安装了最新版本的 Adobe SVG Viewer,那么当使用 <object> 标签时 SVG 文件无法工作(至少不能在 IE 中工作)!
3.embed
<embed src="res/svg.html" width="300" height="100" type="image/svg+xml" pluginspage="http://www.adobe.com/svg/viewer/install/" />
注释:当在 HTML 页面中嵌入 SVG 时使用 <embed> 标签是 Adobe SVG Viewer 推荐的方法!然而,如果需要创建合法的 XHTML,就不能使用 <embed>。任何 HTML 规范中都没有 <embed> 标签。
4.svg
<svg width="600" height="600" id="s1"> <!--<circle r="100" cx="300" cy="300" fill="red"></circle>--> </svg>
使用SVG绘制矩形
<svg width="600" height="600" id="s"> <rect width="100" height="100" x="0" y="0" fill="red" fill-opacity="0.5" stroke="blue" stroke-width="5" opacity="0.5"></rect> </svg>
- x 属性定义矩形的左侧位置(例如,x="0" 定义矩形到浏览器窗口左侧的距离是 0px)
- y 属性定义矩形的顶端位置(例如,y="0" 定义矩形到浏览器窗口顶端的距离是 0px)
- CSS 的 fill-opacity 属性定义填充颜色透明度(合法的范围是:0 - 1)
- CSS 的 stroke-opacity 属性定义笔触颜色的透明度(合法的范围是:0 - 1)
- CSS 的 stroke-width 属性定义轮廓宽度
- CSS 的 stroke 属性定义轮廓颜色
- CSS 的 fill 属性定义背景颜色
- CSS 的 opacity 定义整个元素的透明度(0-1)
- CSS rx,ry产生圆角
注意:
(1)SVG图形的样式可以用HTML属性赋值,也可以使用CSS形式,但不接受普通的CSS属性!只能使用SVG元素的专有样式属性。
(2)SVG图形的属性不属于HTMLDOM标准,只能使用核心DOM方法操作其属性: rect.setAttribute('','')
(3)使用JS动态创建SVG元素,
1)用svg.innerHTML =''
2)用document.createElementNS(''命名空间,创建元素 ''),不能使用document.createElement()
(4)SVG元素的nodeName都是纯小写形式!与普通的HTML元素不同!
使用SVG绘制圆形
<circle r="" cx="" cy=""></circle>
cx,cy定义原点坐标
r定义半径
剩下使用通用属性
使用SVG绘制椭圆
<ellipse rx="" ry="" cx="" cy=""></ellipse>
rx,ry属性定义圆点x,y坐标
cx,cy属性定义水平半径,与垂直半径
使用SVG绘制直线
<line x1="0" y1="0" x2="100" y2="0" stroke="red"></line>
stroke 属性是必须的SVG默认只有填充颜色,没有描边颜色
例题实现
<svg width="600" height="600"> <!--公共属性放在GROUP中,--> <g stroke-width="30" stroke="red"> <line x1="100" y1="150" x2="200" y2="150"></line> <line x1="250" y1="150" x2="500" y2="150"></line> <line x1="100" y1="300" x2="200" y2="300"></line> <line x1="250" y1="300" x2="500" y2="300"></line> <line x1="100" y1="450" x2="200" y2="450"></line> <line x1="250" y1="450" x2="500" y2="450"></line> </g> </svg>
通用属性放在<g>标签中</g> 即group(小组),小组内标签继承小组的通用属性
使用SVG绘制折线
<svg width="800" height="800"> <polyline points="100,100 600,100 100,600 350,0 600,600 100,100 " stroke="#000" fill-opacity="0"></polyline> </svg>
注意:
1.fill-opacity="0" ,不然有背景填充
2.stroke 属性颜色赋值,要不显示不出来
3.points 去折线的点
使用SVG绘制多边形
<polygon points="100,100 300,300 450,250" fill="red" stroke="red" ></polygon>
points 与polyline的属性一样下,x1,y1 x2,y2 定义每个角的坐标
<g fill="#f45fas"> <polygon points="0,0 400,200 800,0"></polygon> <polygon points="0,100 400,300 800,100 800,800 0,800"></polygon> </g>
使用SVG绘制文本
<g fill="#f45fas"> <polygon points="0,0 400,200 800,0"> <span>你号</span> 错误
</polygon> <polygon points="0,100 400,300 800,100 800,800 0,800"></polygon> </g>
<text font-size="30" alignment-baseline="before-edge">你好</text>
设置文本基线
提示:传统的标签不能置于SVG标签内部!同理,SVG的标签也不能放在其它元素内部!
使用SVG绘制图像
提示:在SVG中绘制图像使用image元素,引入位图后,此SVG图片放大后会失真。
<image width="" height="" xlink:href="x.jpg" x="" y=""></image>
12.如何使用渐变效果
linear 线性
radial 放射性
<linearGradient ></linearGradient>元素定义线性渐变。
<linearGradient ></linearGredient>必须在defs内部
<svg width="600" height="400" id="svg15">
<!--渐变属于特效,必须声明在“特效列表”-->
<defs > <linearGradient id="g1" x1="0" y1="0" x2="100%" y2="100%"> <stop offset="0" stop-color="red"></stop> <stop offset="50%" stop-color="blue"></stop> <stop offset="100%" stop-color="green"></stop> </linearGradient> </defs> <rect width="200" height="200" x="50" y="50" fill="url(#g1)"></rect>
滤镜:详细信息http://blog.csdn.net/chy555chy/article/details/53364310
<defs>
<filter id="Gaussian_Blur">
<feGaussianBlur in="SourceGraphic" stdDeviation="3" />
</filter>
</defs>
- 注意:
- <filter> 标签的 id 属性可为滤镜定义一个唯一的名称(同一滤镜可被文档中的多个元素使用)
- filter:url 属性用来把元素链接到滤镜。当链接滤镜 id 时,必须使用 # 字符
- 滤镜效果是通过 <feGaussianBlur> 标签进行定义的。fe 后缀可用于所有的滤镜
- <feGaussianBlur> 标签的 stdDeviation 属性可定义模糊的程度
- in="SourceGraphic" 这个部分定义了由整个图像创建效果