在CSS / SVG中,如何旋转单词的每个字符?

时间:2015-06-27 16:49:01

标签: html css svg transform css-transforms

这是一个Jsfiddle demo



<link href="https://fonts.googleapis.com/icon?family=Material+Icons" rel="stylesheet">
<svg width="100%" height="100%" viewBox="0 0 1000 300" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
    <defs>
        <path id="MyPath" d="M 100 200 
             C 200 100 300   0 400 100
             C 500 200 600 300 700 200
             C 800 100 900 100 900 100" />
    </defs>
    <use xlink:href="#MyPath" fill="none" stroke="red" />
    <text class="material-icons">
        <textPath xlink:href="#MyPath">&#xe55d; &#xe55d; &#xe55d; &#xe55d;</textPath>
    </text>
    <!-- Show outline of the viewport using 'rect' element -->
    <rect x="1" y="1" width="998" height="298" fill="none" stroke="black" stroke-width="2" />
</svg>
&#13;
&#13;
&#13;

&#xe55d;是一个特殊字符,显示为&#34;箭头&#34;。

上面的演示中存在一个问题:<textPath>中的箭头方向垂直<path>,而我需要将其方向设置为与路径相同(并行)。

因此,我需要为文本&#xe55d; &#xe55d; &#xe55d; &#xe55d;中的每个字符旋转90度(而不是整个句子)..

我找到了关于旋转字符的this post,但它看起来并不理想,因为它需要&#34;使用jQuery&#34;封装元素中的每个字母。也许有一种方法可以更容易地在SVG中做到这一点?

有没有人有关于如何在<textPath>节点中旋转单词的每个字符的想法?

1 个答案:

答案 0 :(得分:4)

只需将此style="writing-mode: tb; glyph-orientation-vertical: 180;"添加到text

即可

我希望这就是你想要的:

&#13;
&#13;
<link href="https://fonts.googleapis.com/icon?family=Material+Icons" rel="stylesheet">
<svg width="100%" height="100%" viewBox="0 0 1000 300" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
    <defs>
        <path id="MyPath" d="M 100 200 
             C 200 100 300   0 400 100
             C 500 200 600 300 700 200
             C 800 100 900 100 900 100" />
    </defs>
    <use xlink:href="#MyPath" fill="none" stroke="red" />
    <text class="material-icons" style="writing-mode: tb; glyph-orientation-vertical: 180;">
        <textPath xlink:href="#MyPath">&#xe55d; &#xe55d; &#xe55d; &#xe55d;</textPath>
    </text>
    <!-- Show outline of the viewport using 'rect' element -->
    <rect x="1" y="1" width="998" height="298" fill="none" stroke="black" stroke-width="2" />
</svg>
&#13;
&#13;
&#13;