如何使用JavaScript导入字体文件?

ssm49v7z  于 2023-03-06  发布在  Java
关注(0)|答案(6)|浏览(342)

CSS有一个@font-face规则,允许我们“使用”自定义字体。
JavaScript有这个功能吗?
更具体地说,是否可以在不使用CSS @font-face规则的情况下“使用”自定义字体?

58wvjzkj

58wvjzkj1#

如果你知道CSS,你可以使用document.write动态地附加一个样式表......我猜这会算作使用CSS,但它会工作

0wi1tuuw

0wi1tuuw2#

除了@font-face规则之外,没有办法让浏览器从网络上加载字体。理论上,你可以从JavaScript创建@font-face规则,而不必使用document.write(或document.createElement("style")等),如果你使用CSS Object Model;但我不指望它能在任何浏览器中实现。

ws51t4hk

ws51t4hk3#

不,没有。Javascript可以操纵DOM,但它不关心格式。

yrwegjxp

yrwegjxp4#

有一个实验性的技术"CSS Font Loading API"允许在javascript中加载和使用字体,目前在chrome和firefox中工作。

fetch('/static/media/ProximaNova-Regular.otf')
        .then(resp => resp.arrayBuffer())
        .then(font => {
            const fontFace = new FontFace('Proxima-Nova', font);
            document.fonts.add(fontFace);
            document.body.style.fontFamily = '"Proxima-Nova", Arial';
        })
lsmd5eda

lsmd5eda5#

您可以:

document.body.style.fontFamily = '...';

这里有一把小提琴:http://jsfiddle.net/maniator/QMZ8N/
这仅仅向元素添加预定义字体。
向页面添加字体样式。为此,您可能必须使用CSS

gc0ot86w

gc0ot86w6#

2023年更新:使用FontFace

如MDN上的CSS字体加载API所示:

const url_to_font_name = 'URL to font'
const font_name = new FontFace('Font Name', `url(${url_to_font_name})`);
document.fonts.add(font_name);
// Work that does not require `font_name` to be loaded…
await font_name.load()
// Work that requires `font_name` to be loaded…

我将url_to_font_name变量分离出来,以表示它可以是一个 * 动态生成的字符串 *。这是我看到的使用JavaScript加载字体与CSS相比的 * 最大好处 *。

相关问题