javascript - 请问SVG text怎么设置字体大小?怎么换行?
伊谢尔伦
伊谢尔伦 2017-04-11 12:06:07
[JavaScript讨论组]

代码如下:


     
     
     ${text}


怎样设置最后一个 text 容器的字体大小以及能根据文字长度进行换行处理?
伊谢尔伦
伊谢尔伦

小伙看你根骨奇佳,潜力无限,来学PHP伐。

全部回复(4)
PHP中文网

字体大小最好通过css来设置。

至于一般所期望的换行,当前标准的 svg 做不到。不过,可以嵌入html来解决。

参考:svg文字自动换行

巴扎黑

昨天刚做了一个Canvas绘制文本的项目,也遇到过这种问题在网上查到一个函数!你可以参考下这个函数的思路!

/*
str:要绘制的字符串
canvas:canvas对象
initX:绘制字符串起始x坐标
initY:绘制字符串起始y坐标
lineHeight:字行高
*/
function canvasTextAutoLine(str,canvas,initX,initY,lineHeight){

var ctx = canvas.getContext("2d"); 
var lineWidth = 0;
var canvasWidth = c.width; 
var lastSubStrIndex= 0; 
for(let i=0;i<str.length;i++){ 
    lineWidth+=ctx.measureText(str[i]).width; 
    if(lineWidth>canvasWidth/8*5){
        ctx.fillText(str.substring(lastSubStrIndex,i),initX,initY);
        initY+=lineHeight;
        lineWidth=0;
        lastSubStrIndex=i;
    } 
    if(i==str.length-1){
        ctx.fillText(str.substring(lastSubStrIndex,i+1),initX,initY);
    }
}

}

大家讲道理

没有接触过SVG得相关库,就原生SVG来说。
换行通常是通过tspan标签来实现的。
这个标签通常是嵌套在text之中,拥有者xydxdy四个和位置相关的基本属性。
xy顾名思义就是相对于text标签起点的绝对定位
dxdy则是相对于上一个tspan标签的相对定位

一般而言,每一行文字就是一个tspan标签,它们的属性要么就是dy = (行高)或者就是y = (行高 * 第几行)。你看情况选择吧。

大家讲道理

采纳了@hyule 的方案,代码如下

<svg xmlns="http://www.w3.org/2000/svg" style="outline: 1px solid red;margin: 50px;">
    <switch>
        <foreignObject x="20" y="0" width="150" height="200" style="outline: 1px solid blue;">
            <p xmlns="http://www.w3.org/1999/xhtml">Text goes here, Text goes here, Text goes here, Text goes here</p>
        </foreignObject>
                
        <text x="20" y="20">Your SVG viewer cannot display html.</text>
    </switch>
</svg>
        
        

效果图如下:

这是目前为止我自己发现的最优解决方案

缺点是IE11不兼容(其他版本未测试),chrome 55,firefox 51支持(其他版本未测试)

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号