Javascript 有没有一种方法可以使用CSS3/Canvas绘制曲线/圆弧文本
我正在尝试使用CSS3、HTML画布,甚至SVG(例如,请参见下图)制作一个曲线文本效果?这可能吗?如果是,我怎样才能达到这个效果 更新:澄清一下:将以这种方式设置样式的文本将是动态的Javascript 有没有一种方法可以使用CSS3/Canvas绘制曲线/圆弧文本,javascript,html,canvas,css,Javascript,Html,Canvas,Css,我正在尝试使用CSS3、HTML画布,甚至SVG(例如,请参见下图)制作一个曲线文本效果?这可能吗?如果是,我怎样才能达到这个效果 更新:澄清一下:将以这种方式设置样式的文本将是动态的 您当然可以使用canvas完成此操作,请尝试以下代码作为示例: <!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <title>Testing min-width and
您当然可以使用canvas完成此操作,请尝试以下代码作为示例:
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>Testing min-width and max-width</title>
<style type="text/css">
</style>
</head>
<body>
<canvas id="cnv"></canvas>
<script type="text/javascript" charset="utf-8">
cnv = document.getElementById("cnv");
cnv.width = 500;
cnv.height = 300;
ctx = cnv.getContext("2d");
ctx.font = "bold 12px sans-serif";
text = "abcdefghijklm"
for (i = 0; i < text.length; i++) {
ctx.fillText(text[i], 300, 100);
ctx.rotate(0.1);
}
</script>
</body>
</html>
测试最小宽度和最大宽度
cnv=document.getElementById(“cnv”);
cnv.宽度=500;
cnv.高度=300;
ctx=cnv.getContext(“2d”);
ctx.font=“bold 12px无衬线”;
text=“abcdefghijklm”
对于(i=0;i
它做得并不完全正确,但我相信你会设法根据自己的喜好来调整它;) 我能够从 进入Chrome,但在IE中不起作用 您可以使用SVGWeb
或者,您可以在服务器站点(在.NET/PHP中)像Http处理程序一样编写自己的图像生成实用程序,并将文本传递给它,它将通过使用图形库和动态渲染图像返回GIF/PNG。或者您可以使用一些CSS来完成此操作,但我相信您不会很快在IE上运行它。另一方面,最酷的是文本是可选择的:D
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>Testing min-width and max-width</title>
<style type="text/css">
.num1 {
-webkit-transform: translate(0px, 30px) rotate(-35deg);
}
.num2 {
-webkit-transform: translate(0px, 25px) rotate(-25deg);
}
.num3 {
-webkit-transform: translate(0px, 23px) rotate(0deg);
}
.num4 {
-webkit-transform: translate(0px, 25px) rotate(25deg);
}
.num5 {
-webkit-transform: translate(0px, 30px) rotate(35deg);
}
span {display: inline-block; margin: 1px;}
</style>
</head>
<body>
<div style="width: 300px; height: 300px; margin: 50px auto">
<span class="num1">a</span><span class="num2">b</span><span class="num3">c</span><span class="num4">d</span><span class="num5">e</span>
</div>
</body>
</html>
测试最小宽度和最大宽度
.num1{
-webkit变换:平移(0px,30px)旋转(-35度);
}
.num2{
-webkit变换:平移(0px,25px)旋转(-25度);
}
.num3{
-webkit变换:平移(0px,23px)旋转(0deg);
}
.num4{
-webkit变换:平移(0px,25px)旋转(25度);
}
.num5{
-webkit变换:平移(0px,30px)旋转(35度);
}
span{显示:内联块;边距:1px;}
abcde
SVG直接支持路径上的文本,尽管它不会沿路径“弯曲”单个图示符。以下是您如何创建它的示例:
...
<defs>
<path id="textPath" d="M10 50 C10 0 90 0 90 50"/>
</defs>
<text fill="red">
<textPath xlink:href="#textPath">Text on a Path</textPath>
</text>
...
。。。
路径上的文本
...
我意识到这已经晚了一年多,但这是我的解决方案
它环绕文本,但我不知道如何沿底部垂直翻转字母,因为我真的很讨厌画布变换,也不知道如何在文本上进行两次旋转(沿y轴翻转一次,再绕一个假想圆的中心翻转一次)。这向您展示了如何使用HTML5和canvas实现这一点。上面的另一个回复也有类似的想法,即使用canvas.rotate方法。这一个还使用canvas.translate。有一个jQuery插件,它使用CSS3绘制文本曲线,名为。它相当不错,有一系列的配置选项。我想它在IE8上不起作用,但我想大多数CSS3都不起作用
还有一个演示页面,其中有一些示例 你可以试试这个jQuery插件
它有许多自定义文本拱门和文本圆圈的选项。
适用于所有主流浏览器和操作系统。这不是一个纯粹的CSS解决方案,但CircleType.js非常适用于弧形文本
我使用上面提到的教程(由Simon Tewsi编写)编写了一个关于内核问题的更好的解决方案。不使用库,纯JS 见
注意:所以我也要求将JSFIDLE中的所有代码都放在这里。我不认为这是明智的,因为代码太多,所以我只添加函数名。您可以将SVG与TextPath一起使用,如下所示:
函数更新消息(str){
document.getElementById(“MyMessage”).textContent=str;
}
更改文本
这篇文章是弯曲的
展示了使用SVG可以实现的功能。仔细查看源代码可能会帮助您了解solution@Gabriel,奇怪的问题:那是什么字体?很好吃。@sudowned:已经有一段时间了,但我相信这是Futura。希望这能对你有所帮助:对于IE,你必须使用excanvas:看看这个,下面的SVG解决方案似乎简单多了。你为什么要这样做?坦白地说,我不关心IE。这是为iPhone优化的网站设计的,所以我只担心它在Webkit中正确显示。我也许可以通过一些JavaScript技巧实现您对动态文本的建议。谢谢。IE9+支持CSS3 2d转换,IE8及以下版本支持microsoft的矩阵转换,但它们在处理上有点不同。@JayC是的,这篇文章已经2年了。我相信使用-ms-
前缀应该基本上是可行的,尽管我没有办法测试。为什么这不是答案?似乎是目前为止最好的解决方案?这是一项出色的工作。自2011年以来,你有没有扩展过它或者建立过一个图书馆?太棒了!它很容易工作。请注意,它需要另一个插件(“letting.js是必需的”),它需要花费大量的时间来加载。
<embed width="100" height="100" type="image/svg+xml" src="path.svg">
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<defs>
<path id="textPath" d="M10 50 C10 0 90 0 90 50"/>
</defs>
</svg>
</embed>
function drawTextAlongArcInside(ctx, str, font, color, radius, angle, centerX, centerY, wspace)