有没有办法使用 CSS3 / Canvas 来弯曲/弧形文本
我正在尝试使用 CSS3、HTML Canvas 甚至 SVG 制作弯曲文本效果(例如参见下图)?这可能吗?如果可以的话,怎样才能达到这样的效果呢?
更新:澄清一下:以这种方式设置样式的文本将是动态的。
I'm trying to make a curved text effect using CSS3, HTML Canvas, or even SVG (see image below for example)? Is this possible? If so, how can I achieve this effect?
Update: To clarify: The text that will be styled this way will be dynamic.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(10)
SVG 直接支持路径上的文本,但它不会沿路径“弯曲”各个字形。以下是如何创建它的示例:
SVG supports text-on-a-path directly, though it does not 'bend' the individual glyphs along the path. Here's an example of how you create it:
您当然可以使用画布来做到这一点,请尝试以下代码作为示例:
它做得并不完全正确,但我确信您会设法根据您的喜好调整它;)
You can certainly do it with canvas, try out this code as an example:
It doesn't do it exactly right, but I'm certain you'll manage to tweak it to your likening ;)
您可以使用一些 CSS 来做到这一点,但我确信您不会很快在 IE 上运行它。另一方面,最酷的事情是文本是可选的:D
You can do it using some CSS, however I'm sure you won't get it running on IE any time soon. On the other hand, the cool thing is that the text is selectable :D
它不是一个纯粹的 CSS 解决方案,但 CircleType.js 对于弧形文本非常有效。
http://circletype.labwire.ca/
It's not a pure CSS solution but CircleType.js works great for arced text.
http://circletype.labwire.ca/
有一个使用 CSS3 来弯曲文本的 jQuery 插件,名为 arctext.js。它非常好并且有一系列配置选项。我猜它在 IE8 上不起作用,但我猜大多数 CSS3 东西都不起作用!
此处还有一个演示页面,其中包含一些实际操作示例。
There is a jQuery Plugin to curve text using CSS3 called arctext.js. It's pretty good and has a range of configuration options. I guess it won't work on IE8 but I guess most CSS3 thing don't!
There's also a demo page with some example of it in action here.
这个 教程 向您展示了如何使用 HTML5 和 canvas 来完成此操作。其他答案之一提出了类似的想法,即使用 canvas.rotate 方法。这个也使用canvas.translate。
本教程的完整代码是:
This tutorial shows you exactly how to do it using HTML5 and canvas. One of the other answers presented a similar idea, which is to use the canvas.rotate method. This one also uses canvas.translate.
The full code from the tutorial is:
您可以将 SVG 与
一起使用,如下所示:You can use SVG with
<textPath>
like this:我使用上面提到的教程(由 Simon Tewsi 编写)编写了一个关于字距调整问题的更好的解决方案。不使用库,纯 JS。
请参阅 http://jsfiddle.net/fidnut/cjccg74f/
注意:SO 要求我把 JSFiddle 的所有代码也放在这里。我认为这不明智,代码太多,所以我只添加函数的名称。
I used the tutorial mentioned above (by Simon Tewsi) to write a better solution, regarding the kerning issue. Uses no library, pure JS.
See it at http://jsfiddle.net/fidnut/cjccg74f/
Note: SO is demanding that I put all the code from JSFiddle in here too. I don't think this is wise, too much code, so I am adding only the name of the function.
还有
transform: skew(x, y)
,它不使用canvas。There is also
transform: skew(x, y)
, which does not use canvas.