我想推迟在我的网站上加载字体,灵感来自deferred font loading logic for Smashing Magazine.

这项工作的主要部分是将字体转换为base64并准备CSS文件.到目前为止,我的步骤如下:

  1. Select Google Web Fonts种字体并下载它们.
  2. Use Font Squirrel Webfont Generator to convert downloaded TTF files to CSS file with base64 embedded WOFF fonts (Expert options -> CSS -> Base64 Encode).
  3. 异步加载CSS文件(这里不重要).

开放式SAN的CSS代码段粗体:

@font-face {
  font-family: 'Open Sans';
  src: url(data:application/x-font-woff;charset=utf-8;base64,<base64_encoded>) format('woff');
  font-weight: 700;
  font-style: normal;
}

problem is,也就是转化成fonts look a lot different的那个.看看Open Sans Bold:

特别要注意的是,口音偏离了很远,还有绝对可怕的字母a.其他字体系列和变体看起来也非常不同(大小和形状扭曲等).


所以问题是:How do you properly encode TTF files from Google Web Fonts (or other source) to base64 format and use it in a way that the result is identical to the original file?

推荐答案

在Font Squirrel Expert Options中,确保将"TrueType提示"选项设置为"Keep Existing".其他任一选项都会导致修改TrueType指令(提示),这反过来会影响字体的呈现.

Alternatively,如果您对直接从GWF呈现字体感到满意,您可以只取该文件并自己进行Base64编码.在OS X或Linux中,使用终端/shell中内置的base64命令:

$ base64 myfont.ttf > fontbase64.txt

对于Windows,您需要下载一个程序以在base64中进行编码(有几种可用的免费/开源工具).复制该文件的内容,然后在CSS中使用:

@font-face {
    font-family: 'myfont';
    src: url(data:font/truetype;charset=utf-8;base64,<<copied base64 string>>) format('truetype');
    font-weight: normal;
    font-style: normal;
}

(请注意,您可能需要对各种@font-face信息进行一些调整,以匹配特定的字体数据;这只是一个示例模板)

Css相关问答推荐

Angular中嵌套数组的网格

如何使重复线性渐变适合字体大小?

VueJS3+Vutify中缺少一些CSS类

如果`line-Height:1`,则垂直字母所占的高度

CSS子网格不显示行间距

如何使用DirectusImage标签作为背景?

如何向 Highcharts 迷你图添加具有淡入淡出效果的线性渐变?

为什么 :focus 会覆盖 :focus-visible ?

禁用MUI DataGrid上的悬停效果

antd 中的子菜单项不可滚动

如果父项的不透明度小于 1,则背景过滤器不适用

未知规则 @propertycss(unknownAtRules)

ID 在整个页面中必须是唯一的吗?

如何将页脚保持在屏幕底部

将文本放在 div 的底部

如何停止 setTimeout 循环?

在无序列表中的项目之后添加管道分隔符,除非该项目是最后一行

bootstrap 关闭响应菜单点击

CSS显示:表格列应该如何工作?

行高百分比不起作用