如何在加载字体之前使用内联元素设置字体图标的大小

How to set size of font icon with inline element before font is loaded

我有这个案例。我需要文本内部的图标字体,以便正确包装。我能做到这一点的唯一方法是,如果我在文本和图标之间使用  (我用很棒的字体标记),问题是在加载字体之前,图标的宽度为 0px。它破坏了我用 JavaScript 编写的布局。它计算包装元素的大小。

对我的情况的解释,我有 table 粘性 header 和粘性前两列,所以我有 4 tables 并且我需要匹配每个单元格的大小table,header 中的列在文本后有这样的图标 (?)。文字要换行,图标不能孤单。所以我使用   和图标作为内联元素,inline-block 不与文本对齐所以我有时会在最后得到带有图标的单行。

我不能使用 flex 或 table,因为我有文本需要换行,图标必须像字符一样。我考虑过在像 m 这样加载之前为字体创建不同的字符,但它没有图标那么宽。

我无法使用预加载,因为字体有不同的文件,我会在控制台中遇到我不喜欢的错误(对于不适用于该浏览器的字体)。

<table><thead>
    <tr>
      <!--...-->
      <td>Some text&nbsp;<i class="fa fa-circle"></i></td>
      <!--...-->
    </tr>
</thead></table>

我找到了一种方法来完成这项工作。我使用假图标并在加载字体时隐藏它们。

table th i::after {
  content: '⌧';
  color: transparent;
}
.fonts-loaded table th i::after {
  content: none;
}

我正在使用在这个问题 How to be notified once a web font has loaded 中找到的字体加载 API (browser support).

document.fonts.ready.then(function () {
  document.documentElement.classList.add('fonts-loaded');
});