该部分为四个主要部分:

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  属性 。

从上图可得到结论:

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 文本的更多相关文章

  1. SVG文本

    前面的话 本文将详细介绍SVG文本相关内容 位置属性 在一个SVG文档中,使用<text>元素来设置文本,<text>元素有x.y.dx.dy这四个位置属性 [x和y] 属性x ...

  2. SVG之文本

    一.文本标签<text> SVG支持直接对文本进行操作,如果我们需要在SVG中使用文本,那么我们需要使用到<text>标签.直接看一个简单的demo. <!DOCTYPE ...

  3. 划词标注1——使用svg绘制换行文本并自动识别库中字典数据

    业务需求 给出一段文本,自动识别出文本中包含的关键字信息,关键字是库里已知的数据,根据类型的不同显示出不同的颜色 业务分析 1)采用css:文本识别出来后,根据识别出的文本更改对应文本的dom,通过更 ...

  4. svg是什么

    SVG,指可缩放矢量图形(Scalable Vector Graphics),是用于描述二维矢量图形的一种图形格式,是由万维网联盟制定的开放标准.SVG 使用 XML 格式来定义图形,除了 IE8 之 ...

  5. HTML5程序设计--SVG

    SVG(Scalable Vector Graphics):可缩放矢量图形,一种二维图形表示语言. 借助SVG,我们可以实现很多同Canvas API类型的绘制操作,但在Canvas元素上绘制文本的时 ...

  6. SVG之初识

    什么是SVG? 也许现在很多人都听说过SVG的人比较多,但不一定了解什么是SVG:SVG(Scalable Vector Graphics 一大串看不懂的英文)可伸缩矢量图形,它是用XML格式来定义用 ...

  7. SVG 学习(一)

    SVG 意为可缩放矢量图形(Scalable Vector Graphics). SVG 使用 XML 格式定义图像. 什么是SVG? SVG 指可伸缩矢量图形 (Scalable Vector Gr ...

  8. SVG的text使用

    SVG的text使用: 参考:http://www.docin.com/p-7393979.html <%@ page language="java" contentType ...

  9. o'Reill的SVG精髓(第二版)学习笔记——第二章

    在网页中使用SVG 将SVG作为图像: SVG是一种图像格式,因此可以使用与其他图像类型相同的方式包含在HTML页面中,具体可以采用两种方法:将图像包含在HTML标记的<img>元素内(当 ...

随机推荐

  1. SQL 数据优化索引建suo避免全表扫描

    首先什么是全表扫描和索引扫描?全表扫描所有数据过一遍才能显示数据结果,索引扫描就是索引,只需要扫描一部分数据就可以得到结果.如果数据没建立索引. 无索引的情况下搜索数据的速度和占用内存就会比用索引的检 ...

  2. A/B Testing的简要知识

    A/B testing主要用来检测网站或者APP的两个版本中哪一个更好,它的中心思想是把流量一分为二,一份用作experiment group,访问新的版本,另一份用作control group,访问 ...

  3. Android快乐贪吃蛇游戏实战项目开发教程-03虚拟方向键(二)绘制一个三角形

    该系列教程概述与目录:http://www.cnblogs.com/chengyujia/p/5787111.html 一.绘制三角形 在上一篇文章中,我们已经新建了虚拟方向键的自定义控件Direct ...

  4. Phaser-游戏之旅

    虽然这个小游戏逻辑不是很复杂,但为了熟悉Phaser这个游戏框架的使用方法所以就选择了它. 另外第一次在项目中尝试使用ES6,之后利用babel进行转换. 自动化构建:gulp(其他文件复制和解析) ...

  5. Nginx服务器 之反向代理与负载均衡

    一.反向代理 正向代理: 客户端要获取的资源就在服务器上,客户端请求的资源路径就是最终响应资源的服务器路径,这就是正向代理.正向代理的特点:就是我们明确知道要访问哪个网站地址. 反向代理: 客户端想获 ...

  6. SQL Server 动态生成数据库所有表Insert语句

    一. 背景 SQL Server,如果我们需要把数据库A的所有表数据到数据库B中,通常我们会怎么做呢?我会使用SSMS的导入导出功能,进行表数据的导入导出,无可厚非,这样的导入非常简单和方便: 但是, ...

  7. JQuery 滚动条插件perfect-scrollbar

    原文地址 https://github.com/noraesae/perfect-scrollbar perfect-scrollbar Tiny but perfect jQuery scrollb ...

  8. 慕课网H5圣诞主题

    继七夕之后,我又出了一个圣诞主题的课程.圣诞主题是基于HTML5+CSS+JS编写与实现的,同时也是七夕主题的故事延续.圣诞主题依旧延续着七夕主题设计的思路,引入了3个经典的场景页面,在每个场景中表述 ...

  9. JavaScript权威设计--事件冒泡,捕获,事件句柄,事件源,事件对象(简要学习笔记十八)

    1.事件冒泡与事件捕获 2.事件与事件句柄   3.事件委托:利用事件的冒泡技术.子元素的事件最终会冒泡到父元素直到跟节点.事件监听会分析从子元素冒泡上来的事件. 事件委托的好处:     1.每个函 ...

  10. ASP.NET MVC5+EF6+EasyUI 后台管理系统(19)-权限管理系统-用户登录

    系列目录 我们之前做了验证码,登录界面,却没有登录实际的代码,我们这次先把用户登录先完成了,要不权限是讲不下去了 把我们之前的表更新到EF中去 登录在Account控制器,所以我们要添加Account ...