我们为什么要在字体中包含ttf,eot,woff,svg,...

用户名

CSS3 font-face,有包括如多发性字体类型ttfeotwoffsvgcff

为什么我们要使用所有这些类型?

如果它们专用于不同的浏览器,为什么它们的数量大于主要的Web浏览器的数量?

里奇·布拉德肖

在2019年回答:

仅使用WOFF2,或者如果需要传统支持,请使用WOFF。不要使用任何其他格式

svgeot是死的格式,ttfotf有完整的系统字体,并且不应该被用于Web的目的)

2012年的原始答案:

简而言之,font-face很老,但直到最近才得到IE的支持。

  • eot 早于IE9的Internet Explorer是必需的-他们发明了规范,但eot是专有解决方案。

  • ttf并且otf是普通的旧字体,因此有些人感到恼火,这意味着任何人都可以免费下载昂贵的许可字体。

  • 随着时间的流逝,SVG 1.1增加了一个“字体”一章,该章解释了如何仅使用SVG标记为字体建模,人们开始使用它。花费了更多时间,事实证明,与仅使用常规字体格式相比,它们绝对可怕,并且SVG 2明智地再次删除了整个章节。

  • 然后,woff由具有相当丰富的领域知识的人发明,这使得可以以丢弃对系统安装至关重要但对网络无关的位(使人们担心盗版感到高兴)的方式托管字体,并且允许进行内部压缩以更好地满足Web的需求(使用户和主机感到满意)。这成为首选格式。

  • 2019 edit几年后,woff2被起草并被接受,这改善了压缩效果,导致文件甚至更小,并且能够“部分地”加载单个字体,因此可以将支持20个脚本的字体存储为“块”而是在磁盘上显示,浏览器可以根据需要自动加载字体“部分”,而无需预先传输整个字体,从而进一步改善了排版体验。

如果您不想支持IE 8或更低版本,iOS 4或更低版本以及android 4.3或更早版本,则可以只使用WOFF(和WOFF2,即压缩程度更高的WOFF,用于支持它的最新浏览器。)

@font-face {
  font-family: 'MyWebFont';
  src:  url('myfont.woff2') format('woff2'),
        url('myfont.woff') format('woff');
}

为支持woff可在检查http://caniuse.com/woff
支持woff2可以在检查http://caniuse.com/woff2

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

自己托管字体真棒:我们是否需要所有格式 eot、svg、ttf、woff、woff2?

来自分类Dev

为什么我们不需要在self()中包含self?

来自分类Dev

我们为什么要在pytorch中“打包”序列?

来自分类Dev

Bootstrap-关于字体文件(.eot .svg .ttf .woff和.woff2)的角色和用法

来自分类Dev

如何在Wildfly 10中缓存字体(.woff,woff2,.ttf,.eot)?

来自分类Dev

在字体声明中仍然需要eot,ttf和svg吗?

来自分类Dev

为什么我们需要在Linux上挂载?

来自分类Dev

为什么我们要在OnCreate中检查重叠的片段?(来自文档)

来自分类Dev

为什么我们需要在/ dev / null 2>&1中有2>&1?

来自分类Dev

为什么我们需要在React Hook中返回一个函数?

来自分类Dev

为什么我们需要在Guice模块中实现configure()?

来自分类Dev

为什么我们需要在此脚本中调用“ c.set.bind(c)”?

来自分类Dev

为什么我们需要在Android应用中存储Goefence数据?

来自分类Dev

为什么我们需要在链接列表中填充数据?

来自分类Dev

为什么我们要在 docker 中同时使用 --detach 开关与 --interactive 和 --tty ?

来自分类Linux

为什么我们需要在PyTorch中调用zero_grad()?

来自分类Dev

为什么我们需要在React Native中绑定函数?

来自分类Linux

为什么我们需要在民意调查中调用poll_wait?

来自分类Java

为什么我们需要在Java中对ArrayList使用迭代器?

来自分类Dev

我们为什么要在某些递归算法中复制ArrayList?

来自分类Dev

我们为什么需要在vaadin的绑定中设置bean ** binder.setBean(object)**

来自分类Dev

为什么我们需要在MSIL中显式调用父构造函数?

来自分类Dev

为什么我们要在dpkg中添加i386体系结构?

来自分类Dev

为什么我们不需要在React中绑定箭头功能?

来自分类Dev

为什么我们需要在ConnectionString中设置最小池大小

来自分类Dev

为什么我们要在 useIsMounted 钩子中使用回调来从钩子中返回 ref?

来自分类Dev

为什么我们需要在C#中锁定并反对?

来自分类Dev

为什么我们要在Kotlin / Android中“获得稳定的参考”?

来自分类Dev

为什么我们需要在哈希导航URL中添加标记?

Related 相关文章

  1. 1

    自己托管字体真棒:我们是否需要所有格式 eot、svg、ttf、woff、woff2?

  2. 2

    为什么我们不需要在self()中包含self?

  3. 3

    我们为什么要在pytorch中“打包”序列?

  4. 4

    Bootstrap-关于字体文件(.eot .svg .ttf .woff和.woff2)的角色和用法

  5. 5

    如何在Wildfly 10中缓存字体(.woff,woff2,.ttf,.eot)?

  6. 6

    在字体声明中仍然需要eot,ttf和svg吗?

  7. 7

    为什么我们需要在Linux上挂载?

  8. 8

    为什么我们要在OnCreate中检查重叠的片段?(来自文档)

  9. 9

    为什么我们需要在/ dev / null 2>&1中有2>&1?

  10. 10

    为什么我们需要在React Hook中返回一个函数?

  11. 11

    为什么我们需要在Guice模块中实现configure()?

  12. 12

    为什么我们需要在此脚本中调用“ c.set.bind(c)”?

  13. 13

    为什么我们需要在Android应用中存储Goefence数据?

  14. 14

    为什么我们需要在链接列表中填充数据?

  15. 15

    为什么我们要在 docker 中同时使用 --detach 开关与 --interactive 和 --tty ?

  16. 16

    为什么我们需要在PyTorch中调用zero_grad()?

  17. 17

    为什么我们需要在React Native中绑定函数?

  18. 18

    为什么我们需要在民意调查中调用poll_wait?

  19. 19

    为什么我们需要在Java中对ArrayList使用迭代器?

  20. 20

    我们为什么要在某些递归算法中复制ArrayList?

  21. 21

    我们为什么需要在vaadin的绑定中设置bean ** binder.setBean(object)**

  22. 22

    为什么我们需要在MSIL中显式调用父构造函数?

  23. 23

    为什么我们要在dpkg中添加i386体系结构?

  24. 24

    为什么我们不需要在React中绑定箭头功能?

  25. 25

    为什么我们需要在ConnectionString中设置最小池大小

  26. 26

    为什么我们要在 useIsMounted 钩子中使用回调来从钩子中返回 ref?

  27. 27

    为什么我们需要在C#中锁定并反对?

  28. 28

    为什么我们要在Kotlin / Android中“获得稳定的参考”?

  29. 29

    为什么我们需要在哈希导航URL中添加标记?

热门标签

归档