动态准确地用正确定位的 SVG 文本替换 HTML span
Dynamically and Accurately Replace HTML span with SVG text with correct positioning
我想用相同的 SVG 格式文本替换常规 HTML 跨度。
我看过这样的例子,但是例子里好像只是手动输入的定位,即x=10和y=10,但我不确定是什么原因。
使用 span 我可以将文本垂直居中和水平居中,但是使用 SVG 似乎我必须具体告诉它在父元素中将文本放在哪里,默认情况下不设置 x 或 y 将文本放在外面框架。
这不一定是坏事,但我不知道如何正确定位它。特别是因为默认定位似乎将文本放在父 SVG 视图的上方和外面。
我什至添加了文本锚点和主要基线属性 post:
How to place and center text in an SVG rectangle
但这似乎没有任何作用。
这是我目前的情况。
var spantext = jQuery('.mytext').html();
var width = jQuery('.mytext').width();
var height = jQuery('.mytext').height();
var fontsize = jQuery('.mytext').css('font-size');
var color = jQuery('.mytext').css('color');
var newsvg = '<svg style="outline: 1px solid red; font-size: '+fontsize+'; overflow: visible; font-color:'+color+'" width="'+width+'" height="'+height+'"><tspan x="0" y="0" width="'+width+'" height="'+width+'"><text x="50%" y="50%" dominant-baseline="middle" text-anchor="middle">'+spantext+'</text></tspan></text></svg>';
jQuery('.mytext').replaceWith(newsvg);
svg text{
text-anchor: middle;
dominant-baseline: middle;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>
HTML SPAN VERSION: <br><br>
<span class="originaltext" style="font-size:15px;color:red;">Text Should Look Like This</span><br><br>
SVG VERSION: (Red Border Added for Clarification)<br><br>
<span class="mytext" style="font-size:15px;color:red;">Text Should Look Like This</span>
是这样的吗?它在盒子的中央。
我已经用 innerHTML 替换了 jQuery 赋值,因为 jQuery 和 SVG 不能真正协同工作。
var spantext = jQuery('.mytext').html();
var width = jQuery('.mytext').width();
var height = jQuery('.mytext').height();
var fontsize = jQuery('.mytext').css('font-size');
var color = jQuery('.mytext').css('color');
var newsvg = '<svg style="outline: 1px solid red; font-size: '+fontsize+'; overflow: visible; font-color:'+color+'" width="'+width+'" height="'+height+'"><text dominant-baseline=" ideographic" y="'+height+'"><tspan>'+spantext+'</tspan></text></svg>';
document.querySelector('.mytext').innerHTML = newsvg;
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>
HTML SPAN VERSION: <br><br>
<span class="originaltext" style="font-size:15px;color:red;">Text Should Look Like This</span><br><br>
SVG VERSION: (Red Border Added for Clarification)<br><br>
<span class="mytext" style="font-size:15px;color:red;">Text Should Look Like This</span>
我想用相同的 SVG 格式文本替换常规 HTML 跨度。
我看过这样的例子,但是例子里好像只是手动输入的定位,即x=10和y=10,但我不确定是什么原因。
使用 span 我可以将文本垂直居中和水平居中,但是使用 SVG 似乎我必须具体告诉它在父元素中将文本放在哪里,默认情况下不设置 x 或 y 将文本放在外面框架。
这不一定是坏事,但我不知道如何正确定位它。特别是因为默认定位似乎将文本放在父 SVG 视图的上方和外面。
我什至添加了文本锚点和主要基线属性 post:
How to place and center text in an SVG rectangle
但这似乎没有任何作用。
这是我目前的情况。
var spantext = jQuery('.mytext').html();
var width = jQuery('.mytext').width();
var height = jQuery('.mytext').height();
var fontsize = jQuery('.mytext').css('font-size');
var color = jQuery('.mytext').css('color');
var newsvg = '<svg style="outline: 1px solid red; font-size: '+fontsize+'; overflow: visible; font-color:'+color+'" width="'+width+'" height="'+height+'"><tspan x="0" y="0" width="'+width+'" height="'+width+'"><text x="50%" y="50%" dominant-baseline="middle" text-anchor="middle">'+spantext+'</text></tspan></text></svg>';
jQuery('.mytext').replaceWith(newsvg);
svg text{
text-anchor: middle;
dominant-baseline: middle;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>
HTML SPAN VERSION: <br><br>
<span class="originaltext" style="font-size:15px;color:red;">Text Should Look Like This</span><br><br>
SVG VERSION: (Red Border Added for Clarification)<br><br>
<span class="mytext" style="font-size:15px;color:red;">Text Should Look Like This</span>
是这样的吗?它在盒子的中央。
我已经用 innerHTML 替换了 jQuery 赋值,因为 jQuery 和 SVG 不能真正协同工作。
var spantext = jQuery('.mytext').html();
var width = jQuery('.mytext').width();
var height = jQuery('.mytext').height();
var fontsize = jQuery('.mytext').css('font-size');
var color = jQuery('.mytext').css('color');
var newsvg = '<svg style="outline: 1px solid red; font-size: '+fontsize+'; overflow: visible; font-color:'+color+'" width="'+width+'" height="'+height+'"><text dominant-baseline=" ideographic" y="'+height+'"><tspan>'+spantext+'</tspan></text></svg>';
document.querySelector('.mytext').innerHTML = newsvg;
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>
HTML SPAN VERSION: <br><br>
<span class="originaltext" style="font-size:15px;color:red;">Text Should Look Like This</span><br><br>
SVG VERSION: (Red Border Added for Clarification)<br><br>
<span class="mytext" style="font-size:15px;color:red;">Text Should Look Like This</span>