这里有两个独立的问题:
- 使用 font-weight 关键字而不是数值。
- 是否需要支持 IE8(及更早版本)。
关键字
使用 font-weight 关键字的问题在于,lighter
和 bolder
不像 normal
和 bold
一样是绝对值(分别为400和700),而是相对于父元素已建立的加粗程度的变化量(比父元素轻或重100)。可能无法将 lighter
和 bolder
如同绝对值一样处理。
正如 @HTMLDeveloper 和 @Christoph 建议的那样,使用数值而不是关键字是解决这个问题的简单方法,并且如果不需要支持 IE8,则本身可能就是一个足够的解决方案。
@font-face {
font-family: "santana";
src: url("data:font/ttf;base64,AAEAAAALAI....") format('truetype');
font-weight: 400;
font-style: normal;
}
@font-face {
font-family: "santana";
src: url("data:font/ttf;base64,AAEAAAALAI....") format('truetype');
font-weight: 700;
}
@font-face {
font-family: "santana";
src: url("data:font/ttf;base64,AAEAAAALAI....") format('truetype');
font-weight: 900;
}
IE8及早期版本
一些浏览器在将多种字重或风格与同一font-family
名称相关联时会出现显示问题。
我所知道的具体问题有:(可能还有其他问题)
- 当多个字重与一个字体家族名称相连时,IE8会出现显示问题。
- 当超过4个字重或风格与字体家族名称相关联时,IE6/7/8会出现显示问题。
解决方案是为每个字体变体使用唯一的font-family
名称:
@font-face {
font-family: "santana";
src: url("data:font/ttf;base64,AAEAAAALAI....") format('truetype');
}
@font-face {
font-family: "santana-bold";
src: url("data:font/ttf;base64,AAEAAAALAI....") format('truetype');
}
@font-face {
font-family: "santana-bolder";
src: url("data:font/ttf;base64,AAEAAAALAI....") format('truetype');
}
这种方法通常被像Typekit这样的字体服务所使用。如果需要支持各种浏览器(或者至少是特别支持IE8),那么这可能被视为在嵌入字体时必须付出的代价之一。