Я рисую текстовые метки в SVG. У меня есть фиксированная ширина (скажем, 200 пикселей). Если текст слишком длинный, как его обрезать?
Идеальным решением было бы добавить многоточие (...) там, где текст вырезан. Но я могу жить и без этого.
Элемент linearGradient можно использовать для получения чистого решения SVG. Этот пример затеняет усеченный текст (без многоточия):
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512">
<defs>
<linearGradient gradientUnits="userSpaceOnUse" x1="0" x2="200" y1="0" y2="0" id="truncateText">
<stop offset="90%" stop-opacity="1" />
<stop offset="100%" stop-opacity="0" />
</linearGradient>
<linearGradient id="truncateLegendText0" gradientTransform="translate(0)" xlink:href="#truncateText" />
<linearGradient id="truncateLegendText1" gradientTransform="translate(200)" xlink:href="#truncateText" />
</defs>
<text fill="url(#truncateLegendText0)" font-size="50" x="0" y="50">0123456789</text>
<text fill="url(#truncateLegendText1)" font-size="50" x="200" y="150">0123456789</text>
</svg>
(мне пришлось использовать линейные градиенты, чтобы решить эту проблему, потому что используемый мной рендерер SVG не поддерживает решение textPath.)