如何根据SVG模式的大小动态调整SVG模式的大小';谁的孩子?

如何根据SVG模式的大小动态调整SVG模式的大小';谁的孩子?,svg,Svg,我试图创建一个动态的基于文本的SVG填充模式(可以使用任何文本)。 我希望文本水平和垂直重复,而不必在模式定义中定义文本对象的宽度/高度。提供了很多关于patternUnits的信息,但不足以回答我的具体问题。该模式似乎需要绝对宽度/高度(不适用于动态内容)或基于SVG画布的相对%值 当使用userSpaceOnUse为模式的子对象设置像素值时,是否可以动态调整模式定义的大小以适合其子对象的边界框(支持任意文本) 用例使用用户提供的文本,因此预定义的宽度/大小不起作用;解决方案需要与文本内容无关

我试图创建一个动态的基于文本的SVG填充模式(可以使用任何文本)。 我希望文本水平和垂直重复,而不必在模式定义中定义文本对象的宽度/高度。提供了很多关于patternUnits的信息,但不足以回答我的具体问题。该模式似乎需要绝对宽度/高度(不适用于动态内容)或基于SVG画布的相对%值

当使用
userSpaceOnUse
为模式的子对象设置像素值时,是否可以动态调整模式定义的大小以适合其子对象的边界框(支持任意文本)

用例使用用户提供的文本,因此预定义的宽度/大小不起作用;解决方案需要与文本内容无关

svg{宽度:100%;高度:100%;}
身体{高度:100vh;}
正文,html{padding:0;margin:0;}

这个文本应该是动态的
利用中的答案,您可以使用Javascript调整模式的大小

每次代码更改时都可以触发
adjustPatternSize()
。如果您想在JS不可用的上下文中运行它,我已经烘焙了默认值

svg{宽度:100%;高度:100%;}
身体{高度:100vh;}
正文,html{填充:0;边距:0;}
输入{位置:绝对;左侧:10%;底部:10%;}

常数填充=4
const text=document.getElementById(“文本”);
const rect=document.getElementById(“GPattern”);
常量输入=document.getElementById(“textInput”);
input.oninput=handleInput;
函数handleInput(e){
调整图案大小(如目标值)
}
功能调整模式大小(字符串){
text.textContent=字符串;
const bbox=text.getBBox();
rect.setAttribute(“x”,bbox.x-填充);
rect.setAttribute(“y”,bbox.y-填充);
rect.setAttribute(“宽度”,bbox.width+2*填充);
rect.setAttribute(“高度”,bbox.height+2*填充);
}
adjustPatternSize(“此文本是动态的”);

这两个选项都不起作用,因为更改文本内容会破坏格式。这就是“此文本应该是动态的”的要点,文本可能会发生变化,无论是在文本本身还是以后可能的字体大小。当然,这是一个很好的开始!我已经更新了回复,JS选项是真正动态的。只需使用希望文本成为的
字符串触发
adjustPatternSize
;我尝试了
innerText
,但选择了
textContent
(可能更安全)我已经编辑了我的答案,以使用
textContent
。如果你对它感到满意,你可以将它标记为已接受?完全忘记。我本来想在我猜答案的时候就这么做的。