Поскольку первая и вторая версии, которые вы дали, сильно отличаются друг от друга, я не уверен, чего вы хотите достичь. Я иду в основном с первым.
Основной трюк заключается в том, как вы используете атрибут viewBox
(и его последующий preserveAspectRatio
). Думайте о viewBox
как о прямоугольнике, который вписывается в область, которую вы определяете с помощью width
и height
. (здесь это прописано в CSS.) preserveAspectRatio
описывает правило подбора: выберите максимально возможный размер для прямоугольника, который помещается внутри элемента, и переместите его влево и вертикально к середине.
Все внутри <svg>
теперь останется фиксированным в положении и пропорции к этому прямоугольнику. Если вы увеличите высоту элемента, размер текста увеличится; и если вы уменьшите его ширину, в конечном итоге он будет уменьшаться, но всегда вместе с многоугольником.
Я поместил текст с text-anchor: middle
, что эквивалентно text-align: center
для SVG. Использование размера шрифта 0,4, как вы сделали, не очень хорошая идея; браузеры склонны обрабатывать значения ниже 1 некорректно.
Наконец, если вы используете это вместо тега <h1>
, вы должны либо окружить его этим, чтобы сохранить доступность, либо установить соответствующие атрибуты ARIA, как показано:
.title {
height: 60px;
width: 100%;
display: block; /* not needed if surrounded by <h1> */
}
.title polygon {
fill: blue;
}
.title text {
font-family: Arial;
font-size: 24px;
fill: #FFF;
text-anchor: middle;
}
<svg class="title" viewBox="0 0 250 60" preserveAspectRatio="xMinYMid meet"
aria-role="heading" aria-level="1">
<polygon points="2.5,0 250,9 240,54 0 45" />
<text x="125" y="36">WELCOME TO</text>
</svg>