Я бы хотел выровнять по центру по горизонтали более одной строки текста.
Следующий подход работает в Firefox 68.0.2
path { stroke: #000; }
text { fill: #000; }
<svg width="400" height="120">
<path id="p1" d="M10,40l250,0" />
<text text-anchor="middle">
<textPath href="#p1" startOffset="50%">
<tspan x="0" dy="1.4em">this is the first line</tspan>
<tspan x="0" dy="1.4em">and this is the second</tspan>
</textPath>
</text>
</svg>
Однако в Chrome версии 77.0.3865.90 обе строки отображаются слева. Похоже, что объединенная длина двух <tspan>
используется для вычисления центральной точки.
Я могу заставить его работать в обоих браузерахиспользуя два отдельных элемента <text>
:
path { stroke: #000; }
text { fill: #000; }
<svg width="400" height="120">
<path id="p1" d="M10,40l250,0" />
<text text-anchor="middle">
<textPath href="#p1" startOffset="50%">
<tspan x="0" dy="1.4em">this is the first line</tspan>
</textPath>
</text>
<text text-anchor="middle">
<textPath href="#p1" startOffset="50%">
<tspan x="0" dy="2.8em">and this is the second</tspan>
</textPath>
</text>
</svg>
(я также пытался использовать два <textPath>
в одном и том же родительском элементе <text>
, но поведение dy
также отличается в обоих браузерах)
Мои вопросы:
- Какой браузер работает правильно (это ошибка в другом)?
- Существует ли кросс-браузерный способ достижениятот же результат без рендеринга двух отдельных
<text>
элементов?