#html #svg
#HTML #svg
Вопрос:
Я пытаюсь передать параметры в svg, но я не делаю что-то не так, вы можете мне помочь?
Ссылка: codesandbox
HTML:
<object type="image/svg xml" data="button.svg?color=yellow">
<param name="color" value="red" />
<param name="label" value="stop" />
</object>
Svg:
<svg
xmlns="http://www.w3.org/2000/svg"
xmlns:xlink="http://www.w3.org/1999/xlink"
viewBox="0 0 110 40"
width="100%"
height="100%">
<g>
<rect
id="button_rect"
x="5"
y="5"
width="100"
height="30"
rx="15"
ry="15"
fill="param(color) blue"
stroke="navy"
/>
<text id="button_label" x="55" y="30" text-anchor="middle"
font-size="25" fill="white" font-family="Verdana"
content-value="param(label)">
Ok
</text>
</g>
</svg>
Комментарии:
1. вам необходимо включить param.js за w3.org/TR/SVGParamPrimer /. …
2. Я попытался включить его, вы можете увидеть его в codesanbox, но он не работает.
3. Я пытаюсь всеми способами, но у меня ничего не получается.
Ответ №1:
Люди, которые написали спецификации, отметили, что, хотя это не реализовано в самом браузере, вам необходимо включить библиотеку Javascript. То, что они упустили, — это то, куда вы должны его включить. Очевидно, что вашей первой мыслью может быть включение его в HTML-документ, но это не так — он должен быть включен в svg-файл как:
<script type="text/ecmascript" xlink:href="https://dev.w3.org/SVG/modules/ref/master/ref2.js"></script>
Кроме того, я бы рекомендовал ссылаться на параметры, используя url(#parameterName)
синтаксис.
Например:
<html>
<head>
<title></title>
<meta charset="UTF-8" />
<link rel="stylesheet" href="./style.css" />
</head>
<body>
<object type="image/svg xml" data="button.svg?fill=red">
<param name="fill" value="blue" />
<param name="stroke" value="red" />
</object>
</body>
</html>
и button.svg:
<svg
xmlns="http://www.w3.org/2000/svg"
xmlns:xlink="http://www.w3.org/1999/xlink"
viewBox="0 0 110 40"
width="100%"
height="100%">
<defs>
<ref id="paramX" param="fill" default="red"/>
<ref id="paramY" param="stroke" default="blue"/>
</defs>
<g>
<rect
id="button_rect"
x="5"
y="5"
width="100"
height="30"
rx="15"
ry="15"
fill="url(#paramX)"
stroke="url(#paramY)"
/>
<text
id="button_label"
x="55"
y="30"
text-anchor="middle"
font-size="25"
fill="white"
font-family="Verdana" >
Go
</text>
</g>
<script type="text/ecmascript" xlink:href="https://dev.w3.org/SVG/modules/ref/master/ref2.js"></script>
</svg>
Комментарии:
1. Кажется, это работает, но если я хочу передать текст текстовому компоненту, как я могу сделать: codesandbox.io/s/html-code-editor-forked-5vv45?file=/button.svg