带有 TTF 字体的 SVG 字体

Posted

技术标签:

【中文标题】带有 TTF 字体的 SVG 字体【英文标题】:SVG font-face with TTF fonts 【发布时间】:2013-05-01 05:27:54 【问题描述】:

我正在尝试使用 SVG 标准的字体元素。目前 Webkit 声称他们正确实现了字体模块,但我无法让它与外部引用的 TTF 文件一起使用。

<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
  <defs>
    <font-face font-family="blabla">
      <font-face-src>
        <font-face-uri xlink:href="/path/to/font.ttf" />
      </font-face-src>
    </font-face>
  </defs>
  <text font-family="blabla">This doesn't work unfortunately</text>
</svg>

上面的例子不起作用,但是在 SVG 文档中使用带有 @font-face 的嵌入样式标签确实起作用。我究竟做错了什么? (考虑将此 SVG 文档内联到 html5 文档中。)

如果这实际上是可能的,这是否也可以通过 javascript(字体加载)来实现?

【问题讨论】:

如果使用 CSS 添加时可以使用,为什么不直接使用 CSS? 因为我更喜欢使用更“原生”的实现,如果它应该工作,我想知道它为什么不工作。 这个问题鼓励我尝试 SVG 字体,但我无法让它们在任何浏览器上运行。原因:它们已被普遍弃用。 ☹caniuse.com/#search=svg%20fonts 【参考方案1】:

理论上你的例子应该可以工作,但我认为除了 SVG 字体之外,没有任何浏览器实现了&lt;font-face-uri&gt;。造成这种情况的一个可能原因可能是 SVG 1.1 规范不需要其他字体格式,因此 w3c 的 svg 测试套件中的测试大多使用 SVG 字体格式。

但是使用 css @font-face 并没有错,所有支持 CSS 样式化 svg 内容的 svg 用户代理都需要对 @font-face 的支持,请参阅 http://www.w3.org/TR/SVG11/fonts.html#FontDescriptionsAlternatives。这包括所有当前发布的支持 svg 的网络浏览器。

【讨论】:

我知道@font-face 做得很好,但我仍然想知道为什么Webkit 声称他们支持font-face-uri,但它根本不起作用。

以上是关于带有 TTF 字体的 SVG 字体的主要内容,如果未能解决你的问题,请参考以下文章

为啥我们应该在字体中包含 ttf、eot、woff、svg、...

为啥我们应该在字体中包含 ttf、eot、woff、svg、...

ttf,eot,woff,svg,字体格式介绍及使用方法

用于将 TTF/OTF 字体转换为 SVG 的命令行工具

安全地允许通过 MIME TYPES / fil 上传网络字体(ttf、eot、svg、woff、otf)

自定义TextView带有各类.ttf字体的TextView