SVG <textPath>文本路径

2018-9-27 11:10| 作者: admin| 查看: 1926| 评论: 0|来自: 蚂蚁部落

CSS对于文本排列方式的控制能力非常有限,大致仅限于横平竖直。

如果想要实现文本按照比较复杂的路径排列,利用CSS难度较高,也许将字符逐个放入span元素,然后利用定位控制span元素可以实现类似效果,可以想象过程一定十分复杂,而利用SVG则要轻松的多。

代码实例如下:

[HTML] 纯文本查看 复制代码运行代码
<!doctype html>
<html>
<head>
<meta charset="utf-8">
<meta name="author" content="http://www.softwhy.com/" />
<title>蚂蚁部落</title>
<style>
svg {
  border:1px solid blue;
  overflow:visible;
  margin:50px;
}
</style>
</head>
<body>
<svg width="400" height="200">
  <defs>
    <path id="myTextPath"
      d="M20,20
         L160,20
         L160,160
         L20 160"/>
  </defs>
  
  <path d="M20,20
           L160,20
           L160,160
           L20 160"
        fill="none"
        stroke="red"/>
  
  <text>
    <textPath xlink:href="#myTextPath">
      蚂蚁部落欢迎您,本站地址在青岛市南区,网址是www.softwhy.com
    </textPath>
  </text>
</svg>
</body>
</html>

代码运行效果截图如下:

a:3:{s:3:\"pic\";s:43:\"portal/201809/27/111118baluz2bjiucns0z0.png\";s:5:\"thumb\";s:0:\"\";s:6:\"remote\";N;}

可以看到文本"蚂蚁部落欢迎您,本站地址在青岛市南区,网址是www.softwhy.com"沿着指定的路径分布。

代码分析如下:

(1).利用id属性值为"myTextPath"的<path>元素绘制一个路径,此路径是没有进行填充,在视觉上不可见。

(2).使用<text>元素绘制文本,但是文本外面还要嵌套一个<textPath>元素,这就是本文的主角。

(3).之所以文本要嵌套在<textPath>元素中,因为文本要与路径发生联系,需要通过<textPath>元素。

(4).通过<textPath>元素的xlink:href属性引用路径即可。

(5).红色的路径是为了便于观察而做的一条辅助线。

[HTML] 纯文本查看 复制代码运行代码
<!doctype html>
<html>
<head>
<meta charset="utf-8">
<meta name="author" content="http://www.softwhy.com/" />
<title>蚂蚁部落</title>
<style>
svg {
  border:1px solid blue;
  overflow:visible;
  margin:50px;
}
</style>
</head>
<body>
<svg width="400" height="200">
  <defs>
    <path id="myTextPath"
      d="M20,20
         L160,20
         L160,160
         L20 160"/>
  </defs>
  
  <path d="M20,20
           L160,20
           L160,160
           L20 160"
        fill="none"
        stroke="red"/>
  
  <text>
    <textPath xlink:href="#myTextPath" startOffset="50">
      蚂蚁部落欢迎您,本站地址在青岛市南区,网址是www.softwhy.com
    </textPath>
  </text>
</svg>
</body>
</html>

代码运行效果截图如下:

a:3:{s:3:\"pic\";s:43:\"portal/201809/27/111155w4frkfz1fhswbbzo.png\";s:5:\"thumb\";s:0:\"\";s:6:\"remote\";N;}

此代码与第一段代码的唯一区别是为<textPath>元素添加了startOffset属性。

startOffset是一个合成词,由单词start与offset合成,start是开始的意思,offset是偏移量的意思。

由此我们可以猜测此属性用来规定文本距离路径起始位置的偏移量,事实也是如此。


鲜花

握手

雷人

路过

鸡蛋

最新评论

返回顶部