有没有办法使用 CSS3/Canvas 来弯曲/弧形文本

IT技术 javascript html canvas css
2021-02-10 00:34:05

我正在尝试使用 CSS3、HTML Canvas 甚至 SVG制作弯曲的文本效果(例如,请参见下图)?这可能吗?如果是这样,我怎样才能达到这种效果?

更新:澄清:以这种方式设置样式的文本将是动态的。

拱形或弯曲文本示例

6个回答

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>
...
为什么这不是答案?到目前为止似乎是最好的解决方案?
2021-03-26 00:34:05

你当然可以用画布来做,以下面的代码为例:

<!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>

它做得并不完全正确,但我确信您会设法将其调整为您的喜好;)

对于IE浏览器,你必须使用excanvas:看看这个diveintohtml5.org/canvas.html#ie
2021-03-21 00:34:05
下面的 SVG 解决方案似乎要容易得多。你为什么要这样做?
2021-04-12 00:34:05

或者您可以使用一些 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>
IE9+ 支持 CSS3 2d 变换,IE8 及以下支持微软的矩阵变换,但处理方式略有不同。
2021-03-23 00:34:05
坦率地说,我不在乎 IE。这是针对 iPhone 优化的网站,所以我只担心它在 Webkit 中是否正确显示。我也许可以使用一些 JavaScript 技巧来实现您对动态文本的建议。谢谢。
2021-04-11 00:34:05
@JayC 是的,这篇文章已经 2 岁了。我相信使用-ms-前缀应该主要工作,虽然我没有办法测试。
2021-04-11 00:34:05

它不是纯 CSS 解决方案,但 CircleType.js 非常适合弧形文本。

http://circletype.labwire.ca/

加载需要很多时间。
2021-03-16 00:34:05
好东西!它很容易工作。请注意,它需要另一个插件(“Lettering.js is required”)
2021-04-12 00:34:05

有一个名为arctext.js的 jQuery 插件可以使用 CSS3 弯曲文本它非常好并且有一系列的配置选项。我想它不会在 IE8 上工作,但我想大多数 CSS3 的东西都不会!

还有,在行动的它的一些例子演示页这里