Как сделать размер svg таким, чтобы он соответствовал тексту содержимого

#html #css #svg #tspan

#HTML #css #svg #tspan

Вопрос:

Пожалуйста, проверьте мою ссылку на код

 <div class="suj_content">
<header class="suj_content_hd">
                        <div id="suj_content_hd_ytb"><iframe class="suj_content_hd_ytb" src="https://www.youtube.com/embed/kOc6ME2J_Us?mute=1amp;amp;loop=1amp;amp;playlist=kOc6ME2J_Usamp;amp;autoplay=1amp;amp;showinfo=0amp;amp;controls=0" width="100%" height="100%" frameborder="0"></iframe></div>
                        <h2>
    <svg id="suj_content_svg" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 100% 100%" preserveAspectRatio="xMidYMid slice">
        <defs>
            <mask id="mask" x="0" y="0" width="100%" height="100%">
                <rect x="0" y="0" width="100%" height="100%"></rect>
                <text>
                    <tspan x="0" dy="33.333333333333%" alignment-baseline="middle" text-anchor="start">mittel</tspan><tspan x="0" dy="23.222222222222%" alignment-baseline="middle" text-anchor="start">stand</tspan><tspan x="0" dy="23.222222222222%" alignment-baseline="middle" text-anchor="start">digital</tspan>                 </text>
            </mask>
        </defs>
        <rect x="0" y="0" width="100%" height="100%"></rect>
    </svg>
    </h2>
</header>
 

Как я могу установить ширину и высоту тега SVG в соответствии с его содержимым (тегами tspan). Количество тегов tspan не является фиксированным.

Спасибо

Ответ №1:

Во-первых: вы используете недопустимый атрибут viewBox. Проценты не допускаются. Значение поля просмотра равно fromX fromY width height .

Я использую окно просмотра, ширина которого равна 41 — ширине ограничивающей рамки текста.

Во-вторых: я подозреваю, что вы намерены вырезать текст из последнего прямоугольника. В этом случае вам нужно, чтобы текст был белым.

 console.log(t.getBBox()) 
 text{font-size:16px;} 
 <svg id="suj_content_svg" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 41 50" preserveAspectRatio="xMidYMid slice">
  <defs>
    <mask id="mask" x="0" y="0" width="100%" height="100%">
      <rect x="0" y="0" width="100%" height="100%"></rect>
      <text fill="white" id="t">
        <tspan x="0" dy="25%" dominant-baseline="middle" text-anchor="start">mittel</tspan>
        <tspan x="0" dy="25%" dominant-baseline="middle" text-anchor="start">stand</tspan>
        <tspan x="0" dy="25%" dominant-baseline="middle" text-anchor="start">digital</tspan>
      </text>
    </mask>
  </defs>
  <rect x="0" y="0" width="100%" height="100%" mask="url(#mask)"></rect>
</svg> 

Комментарии:

1. спасибо, но у меня это все еще не работает, не могли бы вы отредактировать прямо на jsfiddle.net/9u8jpexz/1 ?