在网页里使用字体:@font-face 的现代写法
兼容所有浏览器(包括最古老的IE本文介绍现在推荐的网页字体写法。以前为老浏览器准备的 6.0)的Webfont(包括:EOT\WOFF\WOFF2\SVG\TTF),其@font-face的用法是:EOT、SVG 字体格式和各种兼容写法,现在已经不需要了。
@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 */
}最简单的写法
兼容主流浏览器的Webfont(包括:WOFF把字体文件(.woff2)放到你的网站上,然后在 \TTF),其@font-face的用法是:CSS 里声明:
@font-face {
font-family: 'MyWebFont'"LXGW WenKai";
src: url('webfont.woff'"/fonts/LXGWWenKai-Regular.woff2") format('woff'), /* Pretty Modern Browsers */
url('webfont.ttf') format('truetype'"woff2");
/*font-weight: Safari,400;
Android,font-style: iOSnormal;
*/font-display: swap;
}
body {
font-family: "LXGW WenKai", "PingFang SC", "Microsoft YaHei", sans-serif;
}
兼容较主流浏览器的Webfont(包括:WOFF)要点:
font-family:你给这款字体起的名字,下面的样式用同一个名字引用。
src:只写 WOFF2 就够了,所有主流浏览器都支持。format("woff2") 告诉浏览器这是什么格式,不支持的浏览器会直接跳过,不会白白下载。
font-weight、font-style:说明这个文件是什么粗细和样式。同一字体的常规体和粗体各写一个 @font-face,font-family 名字相同、font-weight 不同。
后备字体:font-family 后面跟上系统字体和通用字体族(如 sans-serif),网页字体还没下载好或加载失败时就用它们显示。
可变字体
可变字体一个文件包含一段连续的粗细,font-weight 写成一个范围:
@font-face {
font-family: 'MyWebFont'"Source Han Sans SC VF";
src: url('webfont.woff'"/fonts/SourceHanSansSC-VF.otf.woff2") format('woff'"woff2");
font-weight: 250 900;
font-display: swap;
}
之后在样式里用 font-weight: 350 这样的任意数值都可以。
font-display:字体还没下载好时怎么显示
swap
先用后备字体显示文字,网页字体下载好后马上换上
标题、品牌字等一定要用这款字体的地方
fallback
极短时间内不显示文字,之后用后备字体;只在短时间内下载好才换上
正文
optional
极短时间内没下载好就一直用后备字体,不再替换
对稳定性要求高、字体只是锦上添花的页面
block
最多隐藏文字一小段时间,等字体下载
图标字体等必须用原字体才能看懂的情况
auto
交给浏览器决定
不推荐,各浏览器表现不一致
中文字体文件大,一般用 swap 或 fallback,避免页面长时间看不到文字。
unicode-range:只在需要时下载
unicode-range 告诉浏览器这个文件包含哪些字符。页面上没有用到这些字符时,浏览器就不会下载这个文件:
/* Pretty Modern Browsers英文和数字部分 */
}然后,像这样使用:
body@font-face {
font-family: 'MyWebFont'"LXGW WenKai";
src: url("/fonts/wenkai-latin.woff2") format("woff2");
unicode-range: U+0000-00FF, U+2000-206F;
font-display: swap;
}
/* 常用汉字部分 */
@font-face {
font-family: "LXGW WenKai";
src: url("/fonts/wenkai-cjk-01.woff2") format("woff2");
unicode-range: U+4E00-4FFF;
font-display: swap;
}
几个 @font-face 用同一个 font-family 名字,浏览器会根据页面上实际出现的字符,只下载需要的那几个文件。这是中文网页字体的基本做法,详见《中文网页字体为什么要拆分子集》。
提前加载最重要的字体
首屏一定会用到的字体文件,可以在 <head> 里提前加载:
<link rel="preload" href="/fonts/wenkai-latin.woff2"
as="font" type="font/woff2" crossorigin>
注意必须写 crossorigin,否则浏览器会重复下载。只给一两个最关键的文件加,不要给所有分片都加。
字体放在别的域名上
字体文件放在另一个域名(比如单独的静态资源域名)上时,那边的服务器需要返回允许跨域的响应头 Access-Control-Allow-Origin,否则浏览器会拒绝使用这个字体。
使用前先看许可
把字体放到网站上供浏览器下载,属于“网页嵌入”。开源字体一般允许,商业字体通常需要单独的网页字体许可。见《用字前先看许可:能不能商用、能不能改、能不能嵌入》。