Narysuj tekst w SVG, ale usuń tło
Pracuję z elementem SVG, który powinien wyglądać podobnieto: (przepraszam, że muszę opublikować to jako łącze zamiast jako zdjęcie, ale jako nowy użytkownik nie miałem uprawnień do publikowania obrazów)
Obramowanie z zaokrąglonymi narożnikami pośrodku strony, ale gdzie granica jest usuwana, gdy ma być wstawiony nagłówek / stopka. Tekst określony przez użytkownika należy wstawić do nagłówka, stopki i do samej ramki. Prostokąt jest malowany na innym tle (obraz, inny prostokąt z kolorem itp.). Muszę znaleźć sposóbtrzymać oryginalne tło, pomaluj tylko części obramowania i umieść tekst na oryginalnym tle.
Wymyśliłem to rozwiązanie:
<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="100%" height="100%" viewBox="0 0 620 1100" preserveAspectRatio="xMidYMid meet">
<defs>
<!--Define some texts-->
<text id="text1" x="90" y="100" style="text-anchor:start;font-size:30px;">THIS IS MY HEADER</text>
<text id="text2" x="525" y="1010" style="text-anchor:end;font-size:30px;">MY TEXT HERE</text>
<mask id="Mask1">
<!--draw the entire screen-->
<rect x="0" y="0" width="620" height="1100" style="fill:white;" />
<!--Mask out the two rectangles where text is to be placed-->
<rect x="300" y="980" width="350" height="50" style="fill:black;" />
<rect x="90" y="90" width="350" height="40" style="fill:black;" />
</mask>
</defs>
<!--The original background (here a rect with a fill color, but could also be an image)-->
<rect x="0" y="0" width="620" height="1100" style="fill:#f0ffb6"/>
<!--Draw the rectangle but applying the mask-->
<rect x="100" y="100" rx="20" ry="20" width="420" height="900" mask="url(#Mask1)" style="fill:none;stroke:green;stroke-width:5"/>
<!--Draw the text-->
<use xlink:href="#text1" fill="black" stroke="black" stroke-width="1" />
<use xlink:href="#text2" fill="black" stroke="black" stroke-width="1" />
<text x="200" y="200">This text goes into the border</text>
</svg>
Moim problemem jest teraz to, że ostatnie dwa rekty w masce (prostokąty gdzienie aby narysować granicę) musi mieć szerokość statyczną. Jeśli użytkownik zmieni szerokość tekstu, użytkownik musi również obliczyć nowy tekst i zaktualizować te dwa prostokąty.
Czy istnieje sposób na zamaskowanie bloku o tej samej szerokości cotekst i pomiń prostokąty w masce. Czy jest to jedyny sposób na stworzenie takiej maski? Jeśli ktoś „tam” ma lepszy i bardziej intuicyjny sposób na osiągnięcie tego układu, byłbym bardziej niż zainteresowany wysłuchaniem ciebie.
Dzięki za pomoc.