4. svg学习笔记-文档结构元素和样式的使用
svg除了绘图元素之外还有一部分是专门用于文档结构的,这类元素有<g>,<use>,<defs>,<symbol>等
<g>元素
如果我们仅仅用于学习svg的时候可能不太会用到<g>元素,但当我们绘制特别复杂的图形的时候<g>元素可配上大用场。<g>元素的作用就是将其子元素作为一个组合,以备将来的复用。可以通过为<g>元素添加<title>子元素来为组合添加标题,详细的描述可以放在<desc>子元素中。例如:
<!DOCTYPE html>
<html>
<head>
<title>SVG</title>
</head>
<body>
<svg width="300" height="300" style="border:1px solid #000">
<g id="basic">
<title>一条线段</title>
<desc>这是一条线段,起点坐标(23,30),终点坐标(209,78)</desc>
<line x1="23" y1="30" x2="209" y2="78" stroke="#000"></line>
</g>
</svg>
</body>
</html>
<g>元素的作用在于复用,且看下面的<use>元素
<use>元素
以上介绍的<g>元素可将元素进行分组,<use>元素的作用就是复用这些分组元素,use的使用格式如下:
<use xlink:href="#use-element-id" x="translate-x" y="translate-y"></use>
xlink:href属性指定了引用元素的id,x属性指定了相对于原来的元素水平平移的距离,y元素指定了相对于原来的元素垂直平移的距离
示例如下:
<!DOCTYPE html>
<html>
<head>
<title>SVG</title>
</head>
<body>
<svg width="300" height="300" style="border:1px solid #000">
<g id="basic">
<title>一条线段</title>
<desc>这是一条线段,起点坐标(23,30),终点坐标(209,78)</desc>
<line x1="10" y1="0" x2="10" y2="100" stroke="#000"></line>
</g>
<use xlink:href="#basic" x="10" y="0"></use>
</svg>
</body>
</html>
打开效果如下:
将<use>元素的y改为10,效果如下:
<defs>元素
<defs>元素的作用和<g>元素的作用类似,都是复用元素,但是<defs>元素块相当于声明了一个模板区域,这个元素块中的子元素一律不会显示,而是作为模板,以备文档中其他部分的引用,SVG规范推荐我们将所有的想要复用的对象放在<defs>模块中,这样SVG阅读器可以更高效的处理数据。
示例如下:
<!DOCTYPE html>
<html>
<head>
<title>SVG</title>
</head>
<body>
<svg width="300" height="300" style="border:1px solid #000">
<defs>
<g id="basic-line">
<title>一条线段</title>
<desc>这是一条线段,起点坐标(23,30),终点坐标(209,78)</desc>
<line x1="10" y1="0" x2="10" y2="100" stroke="#000"></line>
</g>
<g id="basic-circle">
<circle cx="30" cy="40" r="50" stroke="black" fill="none">
</g>
</defs> <use xlink:href="#basic-line" x="10" y="10"></use>
<use xlink:href="#basic-circle" x="70" y="50"></use>
</svg>
</body>
</html>
呈现如下:
<symbol>元素
<symbol>元素的作用和<g>元素的作用类似,都是用来组合元素,而不同的是<symbol>元素内的子元素不会显示,但依然建议将<symbol>元素放在<defs>元素内,以维护代码的简洁性,<symbol>元素与<g>元素还有一个不同,就是<symbol>元素可以指定viewbox属性和preserveAspectRatio属性,示例如下:
<!DOCTYPE html>
<html>
<head>
<title>SVG</title>
</head>
<body>
<svg width="300" height="300" style="border:1px solid #000">
<defs>
<g id="basic-line">
<title>一条线段</title>
<desc>这是一条线段,起点坐标(23,30),终点坐标(209,78)</desc>
<line x1="10" y1="0" x2="10" y2="100" stroke="#000"></line>
</g>
<g id="basic-circle">
<circle cx="30" cy="40" r="50" stroke="black" fill="none">
</g>
<symbol id="basic-polygon">
<polygon points="22.4,34 10,67 90,2"></polygon>
</symbol>
</defs> <use xlink:href="#basic-line" x="10" y="10"></use>
<use xlink:href="#basic-circle" x="70" y="50"></use>
<use xlink:href="#basic-polygon" x="200" y="50"></use>
</svg>
</body>
</html>
效果如下:
<image>元素
<image>元素可以引用其它图像显示在svg中,引用的图像可以是JPEG,PNG和SVG格式,使用格式如下:
<image xlink:href="picture-path" x=" left-top-point-x" y="left-top-point-y" width="w" height="h"></image>
xlink:href属性指定了需要引用图片的路径,x和y分别是引用图片的左上角顶点坐标,但非必需,若不声明,则默认以坐标原点为图片的左上角,width和height为引用图片的宽和高,
示例如下:
<!DOCTYPE html>
<html>
<head>
<title>SVG</title>
</head>
<body>
<svg width="300" height="300" style="border:1px solid #000">
<image xlink:href="background.jpg" x="90" y="80" width="200" height="150"></image>
</svg>
</body>
</html>
SVG样式的使用方式
主要有内联样式,内部样式表,引用样式表3种方式,和css的使用方式一样。
内联样式就是直接在元素上添加style属性或者直接使用对应的属性,例如:
<svg width="300" height="300" style="border:1px solid #000000">
<line x1="10" y1="10" x2="200" y2="200" stroke="black">
</line>
</svg>
其中<svg>元素使用了style的方式来添加样式,而<line>元素直接使用样式属性添加样式,这种方式就是内联样式
内部样式表就是在文件中直接声明style代码块专门用于给元素添加样式,例如:
<!DOCTYPE html>
<html>
<head>
<title>SVG</title>
</head>
<body>
<svg>
<defs>
<style type="text/css">
svg{
width:300px;
height:300px;
border:1px solid #000;
}
polygon{
stroke: black;
fill:none;
}
</style>
</defs>
<polygon points="10,10 10,210 190,150"></polygon>
</svg>
</body>
</html>
若在网页中使用svg,则可将上述代码的style代码块移到<head>标签内
引用样式表就是将样式表独立出来存成一个文件,然后在要使用该样式表的文件中引用,例如:
<!DOCTYPE html>
<html>
<head>
<title>SVG</title>
<link rel="stylesheet" type="text/css" href="svg-21.css">
</head>
<body>
<svg>
<ellipse cx="150" cy="150" rx="50" ry="10"></ellipse>
</svg>
</body>
</html>
效果如下:
4. svg学习笔记-文档结构元素和样式的使用的更多相关文章
- MongoDB学习笔记——文档操作之增删改
插入文档 使用db.COLLECTION_NAME.insert() 或 db.COLLECTION_NAME.save() 方法向集合中插入文档 db.users.insert( { user_id ...
- html5学习笔记(3)--主题结构元素-1
Article元素 以下为对应代码: <!DOCTYPE html> <html> <head lang="en"> <meta char ...
- MongoDB学习笔记——文档操作之查询
查询文档 使用db.COLLECTION_NAME.findOne()可以查询所有满足条件的第一条数据 预发格式如下: db.COLLECTION_NAME.findOne(<query> ...
- HTML5学习之文档结构和语义(一)
<!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <m ...
- StyleCop学习笔记-文档规则
文档规则: .SA1600:ElementsMustBeDocumented元素必须添加注释 .SA1601: PartialElementsMustBeDocumented Partial修饰的成员 ...
- Linux 编程学习笔记----文档管理系统
本文从网络上完成的第 Linux在文件系统管理. 1.VFS文件系统概述 linux採用VFS来管理文件系统,并且linux设计的原则之中的一个就是everything is file.因此文件管理系 ...
- winform学习笔记-文档路径
获取应用程序路径 //获取当前进程的完整路径,包含文件名(进程名).string str = this.GetType().Assembly.Location;result: X:\xxx\xxx\x ...
- Spring3.0学习笔记文档的官方网站(六)--3.4.1
3.4 依靠 3.4.1 依赖注入 依赖注入两种方式:基于构造函数DI.基于setter方法DI. 3.4.1.1 基于构造函数DI 参数是引进一个对象的.和缺乏父母之前-子类关系: ...
- MongoDB学习笔记(四) 用MongoDB的文档结构描述数据关系
MongoDB的集合(collection)可以看做关系型数据库的表,文档对象(document)可以看做关系型数据库的一条记录.但两者并不完全对等.表的结构是固定的,MongoDB集合并没有这个约束 ...
随机推荐
- MySQL小计
判断不等于某一个数字的时候,数据表为空的字段不参与比较: 判断字段为空用 is null
- MySQL中间件之ProxySQL(14):ProxySQL+PXC
返回ProxySQL系列文章:http://www.cnblogs.com/f-ck-need-u/p/7586194.html 1.ProxySQL+PXC 本文演示ProxySQL代理PXC(Pe ...
- iOS-CoreData详解与使用
上面已经说完了SQLite和FMDB以及两者的区别,本篇将讲述iOS中另一个存储方式,CoreData的使用.通读下来大约10分钟,后续还会根据项目中问题,不断更新. 一.预备知识 在了解CoreDa ...
- 好好耕耘 redis和memcached的区别
观点一: 1.Redis和Memcache都是将数据存放在内存中,都是内存数据库.不过memcache还可用于缓存其他东西,例如图片.视频等等: 2.Redis不仅仅支持简单的k/v类型的数据,同时还 ...
- IIS Tomcat共享80端口
为什么有这种需求, 原因是这样的, 公司有一个Java的web项目,在另一台服务器A上,最近老板一时兴起,想把他合并到这台稳定点的服务器B上,服务器B上使用IIS来寄宿asp.net 网站, 怎么办呢 ...
- [angularjs] angularjs系列笔记(八)事件
AngularJs有自己的HTML事件 ng-click指令 ng-click指令定义了AngularJs点击事件 当点击按钮的时候,赋值count变量并且给count变量加1,显示出count变量 ...
- P、NP、NPC、NP-Hard问题到底是何方神圣?
最近在做一个求解有向图中回路的问题,老师说求解图中全部回路是一个NP难问题.突然想到P.NP.NPC.NP-hard的描述一致不是很清楚,所以又学习了一下. 在解释这四个概念之前,我们需要先知道两个问 ...
- PATH环境变量
PATH是环境变量,要大写 那几个目录是你放置linux命令的目录,输入命令后系统会去PATH中寻找是否存在该命令 查看当前环境变量: echo $PATH 也可以用set命令看一下 设置: expo ...
- Netty 系列六(编解码器).
一.概念 网络传输的单位是字节,如何将应用程序的数据转换为字节,以及将字节转换为应用程序的数据,就要说到到我们该篇介绍的编码器和解码器. 将应用程序的数据转换为网络格式,以及将网络格式转换为应用程序的 ...
- SaaS技术栈的走势
本地部署时代 在软件还是“本地部署(on-premise)”的时候,SaaS的版图被大型玩家把持着,几乎所有的垂直领域(营销.支持.销售.人力)都被微软.SAP等大公司的解决方案占据.那时候的用户并没 ...