我有两个字体文件,如:FONT-light和FONT-bold。两者都来自@ font-face kit,因此每个版本都包含5个字体文件(OGV,TTF,WOFF,EOT)。
要从简易版本转换为粗体版本,我必须使用font-family: FONT-light;
然后使用font-family: FONT-bold;
。我想使用font-weight: light;
和font-weight: bold;
,因为我需要CSS3过渡。我如何实现这一目标?
答案 0 :(得分:38)
@font-face {
font-family: 'DroidSerif';
src: url('DroidSerif-Regular-webfont.ttf') format('truetype');
font-weight: normal;
font-style: normal;
}
@font-face {
font-family: 'DroidSerif';
src: url('DroidSerif-Italic-webfont.ttf') format('truetype');
font-weight: normal;
font-style: italic;
}
@font-face {
font-family: 'DroidSerif';
src: url('DroidSerif-Bold-webfont.ttf') format('truetype');
font-weight: bold;
font-style: normal;
}
@font-face {
font-family: 'DroidSerif';
src: url('DroidSerif-BoldItalic-webfont.ttf') format('truetype');
font-weight: bold;
font-style: italic;
}
答案 1 :(得分:9)
在嵌入字体(font-weight
)上使用font-style
和@font-face
属性并非如此简单。您需要关注一些项目。
@font-face
语法:在所有浏览器上使用字体语法非常重要。拥有许多资源的Paul Irish编写了'Bulletproof Syntax',如上所示,已经多次改进:
@font-face {
font-family: 'FONT-NAME';
src: url('FONT-NAME.eot?') format('eot'), url('FONT-NAME.woff') format('woff'), url('FONT-NAME.ttf') format('truetype');
}
这个版本(http://www.paulirish.com/2009/bulletproof-font-face-implementation-syntax/,寻找'Fontspring @ font-face syntax')是最新的版本,可以在IE6
iOS
上使用},Android
。重要的是要查看链接以了解为什么应该以这种方式编写它。
font-weight
和font-style
如果需要,可以在font-weight
声明中应用font-style
和@font-face
来使用相同字体的变体,但您需要具体且准确地了解这些特征。有一些方法可以做到。
使用'防弹语法',假设您要加载'正常','粗体'和'斜体“变体,我们有:
@font-face {
font-family: 'FONT-NAME-normal';
src: url('FONT-NAME-normal.eot?') format('eot'), url('FONT-NAME-normal.woff') format('woff'), url('FONT-NAME-normal.ttf') format('truetype');
font-weight: normal;
font-style: normal;
}
@font-face {
font-family: 'FONT-NAME-bold';
src: url('FONT-NAME-bold.eot?') format('eot'), url('FONT-NAME-bold.woff') format('woff'), url('FONT-NAME-bold.ttf') format('truetype');
font-weight: normal;
font-style: normal;
}
@font-face {
font-family: 'FONT-NAME-italic';
src: url('FONT-NAME-italic.eot?') format('eot'), url('FONT-NAME-italic.woff') format('woff'), url('FONT-NAME-italic.ttf') format('truetype');
font-weight: normal;
font-style: normal;
}
因此,要使用您想要的变体,您必须调用与其对应的font-family
并在规则font-weight: normal
和font-style: normal
上声明。如果不这样做,浏览器可以将'faux bold / italic'应用于默认情况下具有此规则的元素。即使已经使用斜体或粗体字体,'仿'样式也会强制元素与其一起显示。问题是字体看起来总是很难看,因为它不是看起来的方式。
例如,在<p>
元素上定义'普通'字体时会出现同样的情况,并且在其中放置<strong>
或{{ 1}}。 <em>
和<strong>
会强制对字体进行粗体/斜体处理。为避免这种情况,您需要将正确的<em>
指定为粗体/斜体,并应用font-family
和<strong>
的规则及其各自的属性(<em>
并且font-weight
)设置为font-style
:
normal
但它存在问题。如果你的字体没有加载后备选择将失去他们的权重/样式。这引导我们进入下一个方向。
如果你的字体没有加载,这种方式更容易处理几个权重和样式和正确的后备。使用相同的例子:
strong {
font-family: 'FONT-NAME-bold';
font-weight: normal;
font-style: normal;
}
em {
font-family: 'FONT-NAME-italic';
font-weight: normal;
font-style: normal;
}
在此方法中,@font-face {
font-family: 'FONT-NAME';
src: url('FONT-NAME-normal.eot?') format('eot'), url('FONT-NAME-normal.woff') format('woff'), url('FONT-NAME-normal.ttf') format('truetype');
font-weight: normal;
font-style: normal;
}
@font-face {
font-family: 'FONT-NAME';
src: url('FONT-NAME-bold.eot?') format('eot'), url('FONT-NAME-bold.woff') format('woff'), url('FONT-NAME-bold.ttf') format('truetype');
font-weight: 700;
font-style: normal;
}
@font-face {
font-family: 'FONT-NAME';
src: url('FONT-NAME-italic.eot?') format('eot'), url('FONT-NAME-italic.woff') format('woff'), url('FONT-NAME-italic.ttf') format('truetype');
font-weight: normal;
font-style: italic;
}
声明中的权重和样式充当“标记”。当浏览器遇到CSS中其他地方的权重和样式时,它知道要访问哪个@font-face
声明以及要使用的字体变体。
确保您的重量和样式匹配。如果是这样,当您在使用您创建的@font-face
的父级内部使用<strong>
或<em>
时,它将加载正确的声明。
在嵌入式(http://coding.smashingmagazine.com/2013/02/14/setting-weights-and-styles-at-font-face-declaration/)这些样式化方法的源代码中,有另一种方法将我提到的两种方法结合起来( 2.1 和 2.2 )。但是它带来了很多问题,包括'虚假粗体/斜体',迫使你向@font-face
右边<strong>
声明,{{1} {,font-family
,对<em>
中classes
不同的font
变体进行换行。我想我选择的两个就足够好了。
来源: http://www.paulirish.com/2009/bulletproof-font-face-implementation-syntax/ http://coding.smashingmagazine.com/2013/02/14/setting-weights-and-styles-at-font-face-declaration/
无需使用大量字体扩展名。如果您需要支持IE8(仅接受weight
格式),.woff
类型几乎会出现除IE之外的所有浏览器。 (http://caniuse.com/#feat=fontface)
可能有用的其他提示是使用.eot
编码将字体嵌入到CSS中。这将有助于避免大量请求,但您需要记住它将覆盖CSS文件。这可以通过组织CSS内容和字体来处理,以便在一个小文件中快速提供第一个CSS规则,在base64
标记结束时将其他CSS规则传递到另一个CSS文件。
答案 2 :(得分:2)
您可以为font-weight属性添加数字,例如添加到light版本。
font-weight: normal; // light version as it is.
font-weight: 700; // makes light version bolder.