gpt4 book ai didi

SVG:基于文本的动态大小,合并对象

转载 作者:行者123 更新时间:2023-12-04 19:32:01 24 4
gpt4 key购买 nike

<div style="float: left; padding: 10px; border: 1px solid; 
background: #ccc">random text</div>

有没有办法在 SVG 中实现这样的目标?我的意思是有一个矩形和一个文本,并且:

a) 矩形的宽度和高度是动态的,所以当我改变文本时,矩形会调整它的大小
b)当我移动矩形时,文本随之而来

<canvas> 中实现这样的事情会更容易吗? ?

编辑:
<defs>       
<text id="text1" x="90" y="100" style="text-anchor:start;font-size:30px;">
THIS IS MY HEADER</text>
</defs>

<filter x="0" y="0" width="1" height="1" id="background">
<feFlood flood-color="gray"/>
<feComposite in="SourceGraphic"/>
</filter>

<use xlink:href="#text1" fill="black" filter="url(#background)"/>

Erik Dahlström 提出了这样的建议。如何将填充放在背景中,如何添加例如。矩形的阴影或边框?而且,这在 IE9 中不起作用,所以我不能接受。我可以用 <foreignObject>如果在 IE 中支持它。

我刚刚想出了 b) 我的问题的答案 .您必须将两个元素放入组中:
<g>
<rect x="0" y="0" width="100" height="100" fill="red"></rect>
<text x="50" y="50" font-size="14" fill="blue" text-anchor="middle">Hello</text>
</g>

然后你可以使用 transform 移动组参数:
<g transform="translate(x, y)">

似乎在每个浏览器中都能正常工作。

最佳答案

您可以使用 JavaScript 来调整框:

<svg xmlns="http:/www.w3.org/2000/svg" onload="init()" height="100" width="200">
<style type="text/css">
rect {
stroke:black;
stroke-width:1;
fill:#ccc;
}
</style>
<script type="text/javascript">
var text, rect
var padding = 10
function init() {
text = document.getElementsByTagName("text")[0]
rect = document.getElementsByTagName("rect")[0]
adjustRect()
}

function adjustRect() {
var bbox = text.getBBox()
rect.setAttribute("x",bbox.x - padding)
rect.setAttribute("y",bbox.y - padding )
rect.setAttribute("width",bbox.width + 2*padding)
rect.setAttribute("height",bbox.height + 2*padding)
}

</script>
<g>
<rect x="0" y="0" width="100" height="100" fill="red"></rect>
<text x="50" y="50" font-size="14" fill="blue" text-anchor="middle">Hello</text>
</g>
</svg>
<div>
<button onclick="text.textContent='Goodbye';adjustRect()">change text</button>
</div>

关于SVG:基于文本的动态大小,合并对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13861780/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com