当前位置: 首页 > news >正文

使用 @font-face

@font-face允许我们在网页里使用在线字体显示文字。把它写到css中以后,浏览器就会根据其中指明的地址下载对应的字体,然后按照css中的样式来显示字体。

不使用这个命令的话,网页可用的字体会受限于本地计算机的字体,同时非常依赖正在使用的操作系统。也就是说,我们在css指定一个字体,想要显示出来的话,本地计算机要有这个字体才行,而且同样的字体栈,在不同的操作系统下,默认的字体也不一样。╮(╯▽╰)╭

示例

<html>
<head>
  <title>Web Font Sample</title>
  <style type="text/css" media="screen, print">
    @font-face {
      font-family: "Bitstream Vera Serif Bold";
      src: local("Bitstream Vera Serif Bold"),
           local("BitstreamVeraSerif-Bold"),
           url("https://mdn.mozillademos.org/files/2468/VeraSeBd.ttf");
    }
    
    body { font-family: "Bitstream Vera Serif Bold", serif }
  </style>
</head>
<body>
  This is Bitstream Vera Serif Bold.
</body>
</html>

详解

@font-face {
  font-family: '字体名称';
  src: 字体链接;
  font-variant: 字体变型,默认normal;
  font-stretch: 字体拉伸,默认normal;
  font-weight: 字体粗细,默认normal;
  font-style: 字体样式,默认normal;
  unicode-range: 字体Unicode字符范围,默认U+0-10FFFF;
}

最大支持

这个写法就是当前能支持浏览器最多的了,同时应该保证把@font-face写在所有css的最顶端。

@font-face {
  font-family: 'MyWebFont';
  src: url('webfont.eot'); /* IE9 Compat Modes */
  src: url('webfont.eot?#iefix') format('embedded-opentype'), /* IE6-IE8 */
       url('webfont.woff2') format('woff2'), /* Super Modern Browsers */
       url('webfont.woff') format('woff'), /* Pretty Modern Browsers */
       url('webfont.ttf')  format('truetype'), /* Safari, Android, iOS */
       url('webfont.svg#svgFontName') format('svg'); /* Legacy iOS */
}
  • Chrome:4.0+

  • Safari:3.1+

  • Firefox:3.5+

  • Opera:10.0+

  • IE:4.0+

  • Android:yes

  • iOS:yes

适合大多数情况的支持

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

这里只添加了woff和woff2,但是已经可以支持大多数浏览器版本了,详情如下:

  • Chrome:5+

  • Safari:5.1+

  • Firefox:3.6+

  • Opera:11.50+

  • IE:9+

  • Android:4.4+

  • iOS:5.1+

更加保守的支持

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

添加了.ttf字体,这样基本已经可以涵盖绝大多数浏览器了,详情如下:

  • Chrome:3.5+

  • Safari:3+

  • Firefox:3.5+

  • Opera:10.1+

  • IE:9+

  • Android:2.2+

  • iOS:4.3+

更加激进的支持

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

可以预期总有一天所有浏览器都会支持woff2,它目前的支持情况如下:

  • Chrome:36+

  • Safari:no

  • Firefox:35+ with flag

  • Opera:23

  • IE:no

  • Android:37

  • iOS:no

另一种技术 @import

当字体存在于我们自己服务器上的时候,使用@font-face无疑是非常棒的选择,但是对于引用其他服务器字体,我们还有其他的办法,就像下面这样:

@import url(//fonts.googleapis.com/css?family=Open+Sans);

在css里的使用方法也是一样

body {
  font-family: 'Open Sans', sans-serif;
}

如果打开这个链接,就会发现背后还是@font-face在起作用。

使用字体托管服务的好处有很多,除了CDN的好处之外,它能保持极高的跨浏览器字体兼容性,而无需自己去维护。想想上面那个最大兼容(而且一套字体可能会存在不同的文件对应不同的unicode区间,文件数直接翻倍),简直不寒而栗啊。

字体文件简介

WOFF / WOFF2

代表:Web Open Font Format.

没有错,这就是专门为网络使用而创造的字体,相较于其它字体,woff的体积更小,更加适合网络传输。

woff2是下一代的woff,有比woff更大的压缩比。

SVG / SVGZ

代表:Scalable Vector Graphics (Font)

SVG是一种矢量字体,也就是说放大到多少都没问题,而且手机浏览器对它的支持也很好。

SVGZ是SVG的压缩版。

EOT

代表:Embedded Open Type.

这是由微软创造出来的字体,目前也只有IE支持,但是如果想在IE4-IE8中使用@font-face的话,就得把它加进去。

OTF / TTF

代表:OpenType Font and TrueType Font.

两个很古老,也很有有渊源的字体,据说woff最初的格式就是从这两个字体中来的。

大小对比

以我目前使用的MarckScriptLatin为例:

svg:130KB,
otf:70KB,
ttf:31KB,
eot:31KB,
woff:18KB,
woff2:14KB。

可以看出woff2相当具有优势。

其它

闲着没事折腾下,其实也是想让自己的网页更好看一些,所谓爱美之心人皆有之。

看到@font-face的支持情况,IE4就支持了,所以说这应该是个相当古老的命令了,而我还以为是css3带出来的,真实太后知后觉了。

有前端的地方就有优化,@fant-face也是这样的,虽然网页设计上来说更好了,但是也要明白,浏览器要加载这些字体,也是要先下载到本地的,而一个字体文件通常不会很小(例如上面的例子,即使woff2也有14KB)。

而优化的方案,也有很多。

参考

https://css-tricks.com/snippe...
https://developer.mozilla.org...

相关文章:

  • 格式与布局定位
  • 一步步来配置安卓开发环境ADTBundle
  • 基础知识整理-1
  • JavaScript之apply()和call()的区别
  • javascript 常用技巧
  • 自定义Spark Partitioner提升es-hadoop Bulk效率
  • 权限及权限管理
  • activemq安全设置 设置admin的用户名和密码
  • 全局CSS设置
  • 1分钟导出MySQL的数据字典
  • 1060. 爱丁顿数(25)
  • struts理解
  • win10 中xshell输入中文显示问号问题
  • java 面试每日一题
  • 图片或文字水印
  • 实现windows 窗体的自己画,网上摘抄的,学习了
  • 【Leetcode】104. 二叉树的最大深度
  • Fabric架构演变之路
  • gulp 教程
  • IE报vuex requires a Promise polyfill in this browser问题解决
  • IndexedDB
  • Java到底能干嘛?
  • JS基础之数据类型、对象、原型、原型链、继承
  • JS题目及答案整理
  • Linux各目录及每个目录的详细介绍
  • Python打包系统简单入门
  • React Transition Group -- Transition 组件
  • React-redux的原理以及使用
  • 软件开发学习的5大技巧,你知道吗?
  • 深度解析利用ES6进行Promise封装总结
  • 使用docker-compose进行多节点部署
  • 通过git安装npm私有模块
  • 为什么要用IPython/Jupyter?
  • 写给高年级小学生看的《Bash 指南》
  • ​批处理文件中的errorlevel用法
  • $.each()与$(selector).each()
  • (4)通过调用hadoop的java api实现本地文件上传到hadoop文件系统上
  • (42)STM32——LCD显示屏实验笔记
  • (C#)Windows Shell 外壳编程系列9 - QueryInfo 扩展提示
  • (C语言)strcpy与strcpy详解,与模拟实现
  • (二)c52学习之旅-简单了解单片机
  • (附源码)spring boot公选课在线选课系统 毕业设计 142011
  • (附源码)springboot工单管理系统 毕业设计 964158
  • (九)c52学习之旅-定时器
  • (免费领源码)Python#MySQL图书馆管理系统071718-计算机毕业设计项目选题推荐
  • (一)【Jmeter】JDK及Jmeter的安装部署及简单配置
  • (一)ClickHouse 中的 `MaterializedMySQL` 数据库引擎的使用方法、设置、特性和限制。
  • (一)插入排序
  • (转)Sql Server 保留几位小数的两种做法
  • (转载)VS2010/MFC编程入门之三十四(菜单:VS2010菜单资源详解)
  • ***汇编语言 实验16 编写包含多个功能子程序的中断例程
  • .net core 依赖注入的基本用发
  • .NET建议使用的大小写命名原则
  • .NET企业级应用架构设计系列之应用服务器
  • .NET下的多线程编程—1-线程机制概述