为啥不在@font-face, Font Squirrel 中定义字体粗细或字体样式?

Posted

技术标签:

【中文标题】为啥不在@font-face, Font Squirrel 中定义字体粗细或字体样式?【英文标题】:Why not define font-weight or font-style in @font-face, Font Squirrel?为什么不在@font-face, Font Squirrel 中定义字体粗细或字体样式? 【发布时间】:2011-04-17 06:33:44 【问题描述】:

当我们定义@font-face 样式时,我们可以定义所引用的文件是用于字体的粗体、斜体还是粗斜体版本,正如这个 SO 问题中所讨论的:

How to add multiple font files for the same font?

例子:

@font-face 
    font-family: 'FontinSans';
    src: local('☺'), url('fontin_sans_regular.woff') format('woff');
    font-weight: normal;
    font-style: normal;


@font-face 
    font-family: 'FontinSans';
    src: local('☺'), url('fontin_sans_bold.woff') format('woff');
    font-weight: bold;
    font-style: normal;

但是,Font Squirrel 不会以这种方式生成 @font-face 套件。他们改为这样做:

@font-face 
    font-family: 'FontinSans';
    src: local('☺'), url('fontin_sans_regular.woff') format('woff');
    font-weight: normal;
    font-style: normal;


@font-face 
    font-family: 'FontinSansBold';
    src: local('☺'), url('fontin_sans_bold.woff') format('woff');
    font-weight: normal;
    font-style: normal;

这意味着在我们的 CSS 文件中我们必须这样做:

h2 
    font-family: 'FontinSansBold', Verdana, sans-serif;
    font-weight: normal;

为什么 Font Squirrel 不使用 font-weight 和 font-style 声明来区分粗体和斜体变体?为什么要使用单独的字体系列?他们是否知道某些浏览器对此功能的(缺乏)支持?

【问题讨论】:

投票关闭并转为网站管理员。 【参考方案1】:

默认情况下,Font-Squirrel 这样做是为了增加对不遵循规范的用户代理的支持(那些忽略 font-weightfont-style 的用户代理)。

如果您不关心那些过时的用户代理,您可以启用@font-face 套件生成器的专家部分中提供的“样式链接”选项。请注意,IE8 及以下版本会忽略编号为 font-weight 的值,仅支持 normalbold(以及对应的 400700 权重值)。

【讨论】:

谢谢,安德鲁。很高兴知道该选项在他们的设置中。这个问题会影响我编写 CSS 的方式。 澄清一下,我认为这不完全是因为 IE8(及以下?)不支持字体粗细/字体样式,而是 IE8 不支持字体的多个字体面的事实家庭。因此,在您的示例中,IE8 只会采用第一个 FontinSans 声明,并使用假粗体而不是正确的粗体自定义字体。它通常最终看起来很可怕......这就是为什么存在这种不同的字体系列名称解决方法的原因。另请注意,如果您执行 h2 font-family: 'FontinSansBold'; font-weight:bold;,它也会应用人造粗体,这又看起来像废话。【参考方案2】:

它确实涉及在字体内部四处寻找以确定字体是粗体还是斜体。并且必须在字体内设置某些位,以便 IE 获取样式链接。大多数粗体/斜体字体都设置了这些位,但不是全部。我们正在努力使其更加自动化。

【讨论】:

【参考方案3】:

似乎 Internet Explorer 8 可能是那些不支持字体粗细和字体样式的“旧”用户代理之一

我正在尝试使用 @font-face 和 font-family 自动设置粗体/斜体/粗体。

到目前为止,我的尝试一无所获。这是一个演示问题的页面。

http://clearimageonline.com/apps/playground/fonts/test_IE.html

这里有人遇到过这个问题并有一个适用于 IE8 的解决方案吗?


我这周的大部分时间都在搜索和摆弄这个问题的答案。看来 IE8 不允许我这样做。

这是一个建议的解决方法(非常丑陋的解决方法)......

http://clearimageonline.com/apps/playground/fonts/proposed_IE.html

这些测试页面仅适用于 Internet Explorer。此测试仅限于 IE。跨浏览器功能显然会成为最终解决方案的一部分。

【讨论】:

【参考方案4】:

使用默认 FontSquirrel 方法的问题是,如果加载备用字体,所有权重都会丢失,因为它们都设置为正常。我认为样式链接是最好的方法。

如果您担心 IE8 用户,您可以使用条件 css。

【讨论】:

以上是关于为啥不在@font-face, Font Squirrel 中定义字体粗细或字体样式?的主要内容,如果未能解决你的问题,请参考以下文章

@font-face 仅在 www 时显示。不在地址。仅域名,正确显示

为啥这个@font-face 代码在 Firefox 3.6 中不起作用?

为啥字体松鼠 @font-face 生成器不能在 IE8 中工作?

为啥@font-face 相对 URL 的加载正确但也会产生 404 错误?

有没有办法使用相同的base64数据URI和两个@ font-face声明?

Firefox 无法加载@font-face? [复制]