我有一个要分发的独立 HTML 文档,没有任何外部依赖项。我在本文档中使用了一种非标准字体,只有我的一些用户会安装它。
对于那些没有安装字体的用户,我在<body>
. (我在这个例子中使用了单字形字体,真正的文档使用的是完整的字体。)
<svg style="display: none;"><defs>
<font id="MyFontElement">
<font-face font-family="MyFont" />
<glyph unicode="A" horiz-adv-x="950" d="M0,0L0,100L100,100L100,200L0,200L0,300L100,300L100,400L200,400L200,500L300,500L300,600L400,600L600,600L600,500L700,500L700,400L800,400L800,300L900,300L900,200L800,200L800,100L900,100L900,0L600,0L600,100L700,100L700,200L800,200L800,300L100,300L100,200L200,200L200,100L300,100L300,0L0,0M300,400L600,400L600,500L300,500L300,400Z" />
</font>
</defs></svg>
SVG字体看起来不如普通字体好,所以我只希望在本地没有安装字体的情况下使用SVG字体。如果字体是在外部 SVG 文档中定义的,我可以使用它的优先级低于本地安装的字体,如下所示:(小提琴)
<style>
@font-face {
font-family: "My Font";
src: local("My Font"), url("fonts.svg#MyFontElement") format("svg");
}
</style>
<p style="font: 3em 'My Font';">
Alphabet
</p>
不幸的是,当前文档中的字体似乎都没有明显的变化:(小提琴)
src: local("My Font"),
url("./#MyFontElement") format("svg"),
url("./#MyFontElement"),
url("#MyFontElement") format("svg"),
url("#MyFontElement");
即使没有@font-face
声明,字体已经在文档中可用MyFont
,font-family
在<font-face />
. 但是,这将比名为 的本机字体具有更高MyFont
的优先级,因此它不是解决方案。
我希望我可以把它称为local("MyFont")
......(小提琴)
src: local("My Font"), /* local */
local("MyFont"); /* embedded */
...但这也不起作用。
我可以给嵌入字体一个不同的名称并以较低的优先级使用它style="font-family: LocalFont, EmbeddedFont"
,但是我允许用户将本地文件中的片段导入到文档中,并且这些本地文件将仅通过标准名称引用字体。导入这些引用时可以重写它们,但我不喜欢这种解决方案。
如何从@font-face
声明中引用嵌入在当前文档中的 SVG 字体?