FontFace

MDN (opens in a new tab)

使用浏览器提供的 FontFace API 来动态的增加字体

async function loadFonts() {
  const font = new FontFace("my-font", "url(my-font.woff)", {
    style: "normal",
    weight: "400",
    stretch: "condensed",
  });
  // wait for font to be loaded
  await font.load();
  // add font to document
  document.fonts.add(font);
  // enable font with CSS class
  document.body.classList.add("fonts-loaded");
}

document.fonts 同样能获取到当前全部的字体集(FontFaceSet)

document.fonts.ready.then((fontFaceSet) => {
	...
}

浏览器兼容性:基本都支持

PS:检测字体是否加载完成的库 (opens in a new tab)

字体切割

https://github.com/KonghaYao/cn-font-split (opens in a new tab)