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

发布于 2024-10-31 14:31:31 字数 246 浏览 7 评论 0原文

CSS 有一个 @font-face 允许我们“使用”自定义字体的规则。

JavaScript有这个功能吗?

更具体地说,是否可以在不使用 CSS @font-face 规则的情况下“使用”自定义字体?

CSS has a @font-face rule which allows us to "use" custom fonts.

Does JavaScript have this functionality?

More specifically, is it possible to "use" custom fonts without using the CSS @font-face rule?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(6

再浓的妆也掩不了殇 2024-11-07 14:31:31

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…

我' m 将 url_to_font_name 变量分隔开,以表明它可以是动态生成的字符串。与 CSS 相比,这是我认为使用 JavaScript 加载字体的最大好处。

Update 2023: use FontFace

As found on CSS Font Loading API on MDN:

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…

I'm separating the url_to_font_name variable out to indicate that it can be a dynamically generated string. This the biggest benefit I see to use JavaScript to load fonts compared to CSS.

迷乱花海 2024-11-07 14:31:31

如果您了解 CSS,您可以使用 document.write 动态附加样式表...我想这将算​​作使用 CSS,但它会起作用

if you know CSS you can use document.write to append a style sheet dynamically... I guess that would count as using CSS, but it would work

我要还你自由 2024-11-07 14:31:31

除了使用 @font-face 规则之外,没有其他方法可以使浏览器从网络加载字体。理论上,您可以从 JavaScript 创建 @font-face 规则,而无需使用 document.write (或 document.createElement(" style") 等),如果您使用 CSS 对象模型;但目前我不指望在任何浏览器中实现这一点。

There is no way to cause the browser to load a font from the network other than with a @font-face rule. You could theoretically create that @font-face rule from JavaScript without having to use document.write (or document.createElement("style") etc), if instead you used the CSS Object Model; but I wouldn't count on that to be implemented in any browser at the moment.

疏忽 2024-11-07 14:31:31

不,没有。 JavaScript 可以操作 DOM,但它不关心格式。

No. There's not. Javascript can manipulate the DOM, but it doesn't care about formatting.

梦断已成空 2024-11-07 14:31:31

有一种实验性技术“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';
        })

There is an experimental technology "CSS Font Loading API" that allows to load and use font in javascript. Currently working in chrome and 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';
        })
秋千易 2024-11-07 14:31:31

是的,你可以:

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

这是一个小提琴: http://jsfiddle.net/maniator/QMZ8N/

这个只向元素添加预定义字体。

向页面添加字体样式。为此你可能必须使用 CSS

yes you can:

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

here is a fiddle: http://jsfiddle.net/maniator/QMZ8N/

this only adds a predefined font to an element.

This does NOT add a font style to the page. for that you might have to use CSS

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文