花潮论坛

搜索
热搜: 活动 交友 discuz
查看: 22|回复: 5

SVG:在textPath中实现文本两端对齐

[复制链接]
  • TA的每日心情
    奋斗
    2026-7-17 12:01
  • 签到天数: 1872 天

    [LV.Master]伴坛终老

    3276

    主题

    13万

    回帖

    29万

    积分

    管理员

    Rank: 9Rank: 9Rank: 9Rank: 9Rank: 9Rank: 9Rank: 9Rank: 9Rank: 9

    花潮帅哥鼠牛虎兔龙蛇马羊猴鸡狗猪多彩人生星月交辉奔放热烈海样胸怀春风拂面火热情怀优雅迷人神秘浪漫相遇之美鹰傲苍穹花好月圆紫色情节飞龙在天王者至尊大将风范音画大师天籁妙音共看流星风雨同行我心永远幸福快乐喜乐安康侠骨柔肠心想事成开朗大方花潮管理

    发表于 2026-7-17 12:04 | 显示全部楼层 |阅读模式

    请马上登录,朋友们都在花潮里等着你哦:)

    您需要 登录 才可以下载或查看,没有账号?立即注册

    x

    <textPath> 元素允许文字沿着路径绘制,提供了灵活的文本布局方式。通过将 <textPath><path> 结合,可以实现文字沿曲线、折线或复杂路径的展示。需要注意的是:其一,textPath 的书写,P 要大写;其二,textPath 应作为 <text> 的子元素出现;其三,textPath 内可以使用 <tspan> 子文本以便精细修饰碎片化的文本样式。

    以下是一个完整的 textPath 示例:

    代码:

    <svg width="400" height="200" style="border: 1px solid gray">
        <path id="path1" d="M20 20Q200 350,380 20" fill="none" stroke="tan" />
        <text fill="steelblue" style="font: bold 26px sans-serif">
            <textPath
                id="myTPath"
                href="#path1"
                lengthAjust="spacing"
                textLength="510">
                    山长水阔知何处
            </textPath>
        </text>
    </svg>

    textPath 元素里两个属性 lengthAdjusttextLength 的设置是文本在路径上两端对齐的关键:

    textPath :文本拉伸形式,控制文本如何拉伸到 textLength 属性定义的长度,值有 spacing(默认,字母或汉字之间的空格可能会增大或缩小)和 spacingAndGlyphs(整个文本元素被拉伸到文本的方向)
    textLength :文本长度,定义文本在指定路径中的布局长度(但使用百分比时是以 SVG viewBox的宽度为参照)。

    文本长度(textLength)一般与路径长度一致,路径长度可以使用 JS 的path.getTotalLength()方法获取。考虑到路径可能会随手改动,可以在 JS 中为 textPath 的 textLength 属性动态赋值,这样在 HTML 代码中的赋值可以略为随意:

    myTPath.setAttribute('textLength', path1.getTotalLength());

    另外,如果需要隐藏路径,可以将路径置入 <defs> 标签内,像这样:

    <defs>
        <path id="path1" d="M20 20Q200 350,380 20" />
    </defs>

    【小结】实现文本路径上的文本两端分散对齐,核心在于配套使用两个属性,lengthAjust="spacing"textLength="长度",其中文本长度和文本所安置的路径的长度应保持大致一致。

    评分

    参与人数 3威望 +110 金钱 +220 经验 +110 收起 理由
    杨帆 + 30 + 60 + 30 匠心独运,细节精致入微!
    红影 + 50 + 100 + 50 匠心独运,细节精致入微!
    梦江南 + 30 + 60 + 30 创意十足,赞一个!

    查看全部评分

  • TA的每日心情
    开心
    2026-7-17 09:30
  • 签到天数: 782 天

    [LV.10]以坛为家III

    550

    主题

    3万

    回帖

    8万

    积分

    贵宾

    Rank: 7Rank: 7Rank: 7Rank: 7Rank: 7Rank: 7Rank: 7

    花潮美女鼠牛虎兔龙蛇马羊猴鸡狗猪缤纷心情心曲飞扬花好月圆飞龙在天音画大师天籁妙音共看流星风雨同行我心永远喜乐安康花潮贵宾

    发表于 2026-7-17 12:14 | 显示全部楼层
    谢谢黑黑老师辛苦,学习了。
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    奋斗
    2026-7-17 12:01
  • 签到天数: 1872 天

    [LV.Master]伴坛终老

    3276

    主题

    13万

    回帖

    29万

    积分

    管理员

    Rank: 9Rank: 9Rank: 9Rank: 9Rank: 9Rank: 9Rank: 9Rank: 9Rank: 9

    花潮帅哥鼠牛虎兔龙蛇马羊猴鸡狗猪多彩人生星月交辉奔放热烈海样胸怀春风拂面火热情怀优雅迷人神秘浪漫相遇之美鹰傲苍穹花好月圆紫色情节飞龙在天王者至尊大将风范音画大师天籁妙音共看流星风雨同行我心永远幸福快乐喜乐安康侠骨柔肠心想事成开朗大方花潮管理

     楼主| 发表于 2026-7-17 12:19 | 显示全部楼层
    梦江南 发表于 2026-7-17 12:14
    谢谢黑黑老师辛苦,学习了。

    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2025-12-1 20:32
  • 签到天数: 1052 天

    [LV.10]以坛为家III

    1898

    主题

    33万

    回帖

    40万

    积分

    管理员

    Rank: 9Rank: 9Rank: 9Rank: 9Rank: 9Rank: 9Rank: 9Rank: 9Rank: 9

    花潮美女虎龙狗猪多彩人生星月交辉海样胸怀火热情怀优雅迷人神秘浪漫缤纷心情草莓情怀蝴蝶情怀心曲飞扬星星情怀七彩绚丽活泼开朗女儿情怀相遇之美一往情深花好月圆心香一瓣紫色情节飞龙在天金剪刀天籁妙音妙笔生花风雨同行我心永远天长地久幸福快乐绚丽缤纷喜乐安康中秋征文周年庆指尖上的流年舞会之星分析(喊冤)章总结章杀人王小强章最佳杀刺临屏写诗七夕诗钟活动第五届风云第六届风云情人节花潮管理

    发表于 2026-7-17 15:52 | 显示全部楼层
    路径长度可以使用 JS 的path.getTotalLength()方法获取。这个好,省得自己去赋值了, 因为本来不知道那个值是什么
     
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2025-12-1 20:32
  • 签到天数: 1052 天

    [LV.10]以坛为家III

    1898

    主题

    33万

    回帖

    40万

    积分

    管理员

    Rank: 9Rank: 9Rank: 9Rank: 9Rank: 9Rank: 9Rank: 9Rank: 9Rank: 9

    花潮美女虎龙狗猪多彩人生星月交辉海样胸怀火热情怀优雅迷人神秘浪漫缤纷心情草莓情怀蝴蝶情怀心曲飞扬星星情怀七彩绚丽活泼开朗女儿情怀相遇之美一往情深花好月圆心香一瓣紫色情节飞龙在天金剪刀天籁妙音妙笔生花风雨同行我心永远天长地久幸福快乐绚丽缤纷喜乐安康中秋征文周年庆指尖上的流年舞会之星分析(喊冤)章总结章杀人王小强章最佳杀刺临屏写诗七夕诗钟活动第五届风云第六届风云情人节花潮管理

    发表于 2026-7-17 15:53 | 显示全部楼层
    沿着路径绘制的文本很漂亮
     
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    奋斗
    2026-7-17 12:27
  • 签到天数: 598 天

    [LV.9]以坛为家II

    385

    主题

    4592

    回帖

    2万

    积分

    版主

    Rank: 7Rank: 7Rank: 7Rank: 7Rank: 7Rank: 7Rank: 7

    花潮帅哥鼠牛虎兔龙蛇马羊猴鸡狗猪多彩人生鹰傲苍穹飞龙在天王者至尊大将风范花潮版主

    发表于 2026-7-17 16:17 | 显示全部楼层
    很实用的知识与方法,谢谢马老师深入浅出的讲解

    请教马老师~属性 lengthAdjust的属性值:spacing与spacingAndGlyphs,在视角效果上的差异并不明显呀
    ★青春是一个人的精神生命,奋斗是一个人最大的体面,学习是一个人最美的姿态。
    回复 支持 反对

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    小黑屋|手机版|Archiver|服务支持:DZ动力|huachaowang.com Inc. ( 蜀ICP备17032287号-1 )

    GMT+8, 2026-7-17 19:04 , Processed in 0.076733 second(s), 25 queries .

    Powered by Discuz! X3.4

    © 2001-2013 Comsenz Inc.

    快速回复 返回顶部 返回列表