html字符串转svg,【SVG】如何操作SVG Text

上周我们学习了如何使用元素创建SVG文本。在实例中我们设置了x和y坐标来定位文本,也尝试了给SVG文本中的每个字符定位。关于元素还有很多内容。

8195bee49cb5d29f5dc9d7452cd7ac90.png

在处理SVG文本时,不要局限于x和y属性。元素还有几个可以添加的属性,现在我们开始讨论吧。

dx和dy属性

我们从dx和dy属性开始讲,和x和y类似,除了它们的值表示的是相对于前一个字符的长度,而不是相对于整个视窗的绝对定位。

和x、y一样,dx和dy接受一列长度值。

我们还是用上周的示例,然后把值赋给dx和dy。

This is some SVG Text

这里我把x和y的值都设置为0,然后dx和dy设置一列长度值。注意到随着长度值的增长,下一个字符的距离也在增长。如果想要在字符间保持相同的间距,你需要给dx和dy设置相同的值。

This is some SVG Text

一件你可能没注意到的事是上面列表中字符之间的长度和间距,好像有点不太对。如果你测量了每个字符的长度,你期望中的i和s之间的间距应该是60px,这是最后一个值设置的。

但是它没有这样显示的原因是,60px拉开的是从“is”中的i到“this”和“is”之间的space[空格]之间的间距。间隔是按照字符(空格也是字符)来算的。

旋转SVG字符

你还可以使用rotate属性来旋转字符,它接受一列值。每个数字又代表一个特定的字符。

This is some SVG Text

这里我把x设置为0,y为20,给rotate属性设置了一列值。字符T旋转0deg,H旋转45deg,以此类推。直到这列值结束,所有剩下的字符都会保持旋转0deg。

This is some SVG Text

和前面的实例一样,空格也会被旋转。this和is之间的空格被旋转了180deg,这就是为什么我在rotate这一列值的最后添加了一个0。否则,剩余的字符也都会被旋转180deg,变成颠倒的。

被旋转的是单个字符,而不是整个文本字符串。要旋转整个字符串你需要使用transform。

textLength属性

下一个属性是textLength,接受一个长度值。

textLength属性允许你设置文本的长度为一个指定值,忽略容器的尺寸。

This is some SVG Text

这里我把textLength设置为和视窗相同的宽度,这样文本会从两端拉伸。注意最后一个字符不会碰到右边缘。因为它还是在EM box中。EM box的右边缘碰到了视窗的右边缘。

注意:评论中提到,最后一个字符在Firefox和Edge中碰触到右边缘。我猜测这是和每个浏览器如何计算字符之间的间距有关,但是我也不确定。如果有同学知道的话,欢迎评论区分享。

This is some SVG Text

字符被自动分隔开,所以文本字符串填充了空间。就像证明内容一样,除非可以设置宽度。

如果你有兴趣,还可以通过设置一个较小的长度值,把字符都叠一起。

This is some SVG Text

This is some SVG Text

通常这不会用来展示大家要阅读的文本,但是它可以用于创建一些有趣的效果,在文本不需要被阅读的情况下。

有一件你需要注意的事情是,字符之间的空间是根据textLength调整的,但是字符本身保留相同的尺寸(不会变形)。你可以通过针对textElement的属性来改变。

lengthAdjust属性

lengthAdjust属性接受两个值(spacing和spacingAndGlyphs),决定文本是否会被拉伸或压缩。

对于这两个值,spacing是默认值,这就是为什么前面的实例中,字符之间的空格自动调整为需要的长度。还是用前面的实例,只改变lengthAdjust的值。

This is some SVG Text

字符得到拉伸,填满其整空间

This is some SVG Text

我前面提到了,因为SVG文本是和其他图形元素一样的渲染方式,所以我们可以给它添加描边和填充、图案、渐变。任何你可以给其它SVG元素添加的属性,都可以应用给SVG文本。

如下,这个实例中我把填充改成了蓝色,添加一个红色的描边,并把stroke-width设置为2。

SVG

SVG

和上一篇文章一起,我展示了几个操作文本的方式,还有几个文本相关的元素待学习。今天先到这里。

总结

我希望你觉得SVG文本不难学习,在元素中创建的元素,将其渲染为可搜索和选中的文本,so easy。

通过元素的属性,我们还可以操作SVG文本。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值