SVG 文本
该部分为四个主要部分:
1. <text>和<tspan>标签详解
2. 文本水平垂直居中问题
3. <textpath>让文本在指定路径上排列
4. <a>插入超链接
<text>和<tspan>标签
<text>和<tspan>标签是定义文本的基本标签。
<text>
| 参数 | 描述 | 默认值 |
| x | 文本绘制x轴位置 | 0 |
| y | 文本绘制y轴位置 | 0 |
| dx | 每个字符相对前一个字符的偏移距离 | 0 |
| dy | 每个字符相对前一个字符的偏移距离 | 0 |
例子:
<svg width="100%" height="100%" version="1.1" xmlns="http://www.w3.org/2000/svg">
<text x="100" y="100" dx="20 40 60 80 100" fill="black" style="font-size:40px;">我是中国人</text>
<path d="M100,0 V200 M0,100 H200" stroke="red"/>
</svg>
效果:

PS:文字并不是完全在左下角位置,而是在一个叫基线(baseline)的位置,所以文字会在哪个位置,还得看该字体的基线(关于基线的定义请自身查阅资料)。
<tspan>
<tspan>标签是用在<text>标签里面的,也可嵌套使用。所有text标签可用的属性,tspan也都可以用。
例子:
<svg width="100%" height="100%" version="1.1" xmlns="http://www.w3.org/2000/svg">
<text x="100" y="100" dy="100" fill="black" style="font-size:40px;">
<tspan fill="blue" dy="-20 10">我是</tspan><tspan fill="red">中国人</tspan>
</text>
<path d="M100,0 V200 M0,100 H200" stroke="red"/>
</svg>
效果:

注意:
1. 两个标签不支持自动换行。
2. 可以用style属性设置样式(基本支持大部分CSS属性)。
3. 可以通过程序计算dx、dy值来得到各自文字排版(像波浪形或一些函数曲线)。
4. text和tspan标签设置的dx、dy属性是会往下传递的。也就是在没有设置情况下,后面字符会用沿用上一个字符的dx、dy值。
5. 如果tspan设置了dx、dy属性,就会覆盖text标签上的dx、dy值,而不是叠加计算。
文本水平垂直居中
水平排列
text-anchor属性可设置文本水平排列,有三个取值 start | middle | end。
例子:
<svg width="100%" height="100%" version="1.1" xmlns="http://www.w3.org/2000/svg">
<text x="200" y="50" text-anchor="start" fill="black" style="font-size:40px;">我是中国人</text>
<text x="200" y="100" text-anchor="middle" fill="black" style="font-size:40px;">我是中国人</text>
<text x="200" y="150" text-anchor="end" fill="black" style="font-size:40px;">我是中国人</text>
<path d="M200,0 V200 M0,100 H400" stroke="red"/>
</svg>
效果:

垂直排列
dominant-baseline属性可设置文本垂直排列 。
PS:属性很多,请查看:http://www.w3.org/TR/SVG/text.html#DominantBaselineProperty
例子:
讲师已经将该属性示例演示出来:http://jsbin.com/lekob/5/edit
注意:
可以从效果上看,这个属性还没有真正做到垂直居中。
还有另一个做法,就是算出垂直居中的y值,进而模拟垂直居中效果。
讲师已经将模拟的代码演示出来:http://output.jsbin.com/kemaxe
<textpath>标签
<textpath>可以让文本在指定路径上排列 。
例子:
<svg width="100%" height="100%" version="1.1" xmlns="http://www.w3.org/2000/svg">
<path id="p1" d="M100,200 Q200 100 300 200 T 500 200" stroke="green" fill="none"/>
<text style="font-size:20px;">
<textPath xlink:href="#p1">落红不是无情物,一枝红杏出墙来,恰似一江清水向东流。</textPath>
</text>
</svg>
效果:

PS:超出Path的部分,浏览器不进行渲染。
渲染原理
如下图:

1. 浏览器会算出第一个字符的宽度。
2. 结合路径的起点得到另一个点。
3. 取得中间的那个点做一条的切线和法线。
4. 然后将该字符放到这个位置上。
5. 将上一个字符最后一个点作为下一个字符的起点。
6. 循环第1步,直到文本渲染完毕。
文本在路径上的偏移
文本在路径上的偏移可以用定位属性 x, y, dx, dy,text-anchor 和 startOffset 属性 。

.png)
从上图可得到结论:
1. x/dx/startOffset可以设置字符在路径上的渲染起点。
2. y属性设置是没有任何效果的。
3. dy可设置字符在法线上的偏移。
4. text-anchor是设置文本水平排列效果。
<a>标签
<a>标签可以添加到任意的图形上 。
| 属性 | 描述 |
| xlink:href | 指定链接地址 |
| xlink:title | 指定链接提示 |
| target | 指定打开目标 |
例子:
<svg width="100%" height="100%" version="1.1" xmlns="http://www.w3.org/2000/svg">
<a
xlink:title="百度"
xlink:href="https://www.baidu.com"
target="_blank">
<rect x="50" y ="50" width="200" height="200" fill="red"/>
</a>
</svg>
参考视频
1. SVG课程(慕课网)
本文为原创文章,转载请保留原出处,方便溯源,如有错误地方,谢谢指正。
本文地址 :http://www.cnblogs.com/lovesong/p/5998650.html
SVG 文本的更多相关文章
- SVG文本
前面的话 本文将详细介绍SVG文本相关内容 位置属性 在一个SVG文档中,使用<text>元素来设置文本,<text>元素有x.y.dx.dy这四个位置属性 [x和y] 属性x ...
- SVG之文本
一.文本标签<text> SVG支持直接对文本进行操作,如果我们需要在SVG中使用文本,那么我们需要使用到<text>标签.直接看一个简单的demo. <!DOCTYPE ...
- 划词标注1——使用svg绘制换行文本并自动识别库中字典数据
业务需求 给出一段文本,自动识别出文本中包含的关键字信息,关键字是库里已知的数据,根据类型的不同显示出不同的颜色 业务分析 1)采用css:文本识别出来后,根据识别出的文本更改对应文本的dom,通过更 ...
- svg是什么
SVG,指可缩放矢量图形(Scalable Vector Graphics),是用于描述二维矢量图形的一种图形格式,是由万维网联盟制定的开放标准.SVG 使用 XML 格式来定义图形,除了 IE8 之 ...
- HTML5程序设计--SVG
SVG(Scalable Vector Graphics):可缩放矢量图形,一种二维图形表示语言. 借助SVG,我们可以实现很多同Canvas API类型的绘制操作,但在Canvas元素上绘制文本的时 ...
- SVG之初识
什么是SVG? 也许现在很多人都听说过SVG的人比较多,但不一定了解什么是SVG:SVG(Scalable Vector Graphics 一大串看不懂的英文)可伸缩矢量图形,它是用XML格式来定义用 ...
- SVG 学习(一)
SVG 意为可缩放矢量图形(Scalable Vector Graphics). SVG 使用 XML 格式定义图像. 什么是SVG? SVG 指可伸缩矢量图形 (Scalable Vector Gr ...
- SVG的text使用
SVG的text使用: 参考:http://www.docin.com/p-7393979.html <%@ page language="java" contentType ...
- o'Reill的SVG精髓(第二版)学习笔记——第二章
在网页中使用SVG 将SVG作为图像: SVG是一种图像格式,因此可以使用与其他图像类型相同的方式包含在HTML页面中,具体可以采用两种方法:将图像包含在HTML标记的<img>元素内(当 ...
随机推荐
- Linux LVM逻辑卷配置过程详解
许多Linux使用者安装操作系统时都会遇到这样的困境:如何精确评估和分配各个硬盘分区的容量,如果当初评估不准确,一旦系统分区不够用时可能不得不备份.删除相关数据,甚至被迫重新规划分区并重装操作系统,以 ...
- 我的MYSQL学习心得(十三) 权限管理
我的MYSQL学习心得(十三) 权限管理 我的MYSQL学习心得(一) 简单语法 我的MYSQL学习心得(二) 数据类型宽度 我的MYSQL学习心得(三) 查看字段长度 我的MYSQL学习心得(四) ...
- C#与yaml解析
YAML 官方网站称 YAML 是"一种所有编程语言可用的友好的数据序列化标准".YAML Ain't Markup Language,和GNU一样,YAML是一个递归着说&quo ...
- .NET Web开发技术简单整理
在最初学习一些编程语言.一些编程技术的时候,做的更多的是如何使用该技术,如何更好的使用该技术解决问题,而没有去关注它的相关性.关注它的理论支持,这种学习技术的方式是短平快.其实工作中有时候也是这样,公 ...
- IT公司的女流之辈
声明:并不是对女性怎么怎么滴歧视, 我只是想陈述事实. 女性来IT公司工作, 真的适合吗? 如果是杰出女性也就罢了, 如果只是一般女性呢? 她能够像一般男性一样的 努力工作, 像牛马一样的工作? 在某 ...
- Android 浏览器 —— 使用 WebView 实现文件下载
对当前的WebView设置下载监听 mCurrentWebView.setDownloadListener(new DownloadListener() { @Override public void ...
- Qt5 开发 iOS 应用之访问 SQLite 数据库
开发环境: macOS 10.12.1 Xcode 8.1 Qt 5.8 iPhone 6S+iOS 10.1.1 源代码: 我在 Qt 程序里指定了数据库的名称来创建数据库,在 Win10.An ...
- 我为NET狂官方群福利贴:一些常用的工具:2016-08-01更新
本次更新下载:http://pan.baidu.com/s/1skXzG4H 源码文档见官方群(以下为8.1更新内容) 逆天工具 CDN 资源库 国内 http://www.bootcdn.cn/ h ...
- 断电不断网——Linux的screen
title: 断电不断网--Linux的screen author:青南 date: 2015-01-01 20:20:23 categories: [Linux] tags: [linux,scre ...
- 数据库日常维护-CheckList_03有关数据库数据文件大小检查
日常数据维护中容量规划是每个DBA的基础工作之一,也是非常重要的工作.在生产环境中一些比较重要的业务数据库会用前期容量规划不足,或出现意外的爆发式的数据增长,直至盛满整个磁盘空间,系统会无法使用,最终 ...