Internet Explorer 8 忽略 CSS 中的字体粗细

Posted

技术标签:

【中文标题】Internet Explorer 8 忽略 CSS 中的字体粗细【英文标题】:Internet Explorer 8 ignores font-weight in CSS 【发布时间】:2013-01-31 05:36:39 【问题描述】:

所以我很难理解为什么 IE 在这里忽略了我的 CSS。我有这个代码:

<h2>Har du stadsnät eller kan du få det?</h2>

即没有什么奇怪的或任何东西。 这是生成的渲染:

但这里是这个 html 的 CSS 代码:

.rubrik, h2 
  font-family: Lato;
  font-size: 32px;
  font-weight: normal;
  line-height: 38px;
  font-variant: normal;
  font-style: normal;
  color: #969696; 

这清楚地表明 H2 应该具有“正常”作为字体粗细,但呈现的文本显然是粗体,这是正确的呈现(来自 Safari)

因此,我使用 Internet Explorer 8 附带的开发人员工具检查 CSS 解释,结果如下所示:

据我了解,我在这里看到的是 IE8 对我的 CSS 的解释,而可疑的是缺少“正常”属性。 IE 已将 CSS 转换为“字体”的单行版本,但不包括“正常”部分。现在,字体“Lato”是 font-face 字体,font-face CSS 在这里:

@font-face 
    font-family: Lato;
    src: url('/media/fonts/Lato.eot');
    src: local('nofont'), url('/media/fonts/Lato.ttf') format('truetype');

@font-face 
    font-family: Lato;
    src: url('/media/fonts/Lato-Bold.eot');
    src: local('nofont'), url('/media/fonts/Lato-Bold.ttf') format('truetype');
    font-weight: bold;

@font-face 
    font-family: Lato;
    src: url('/media/fonts/Lato-Bold-Italic.eot');
    src: local('nofont'), url('/media/fonts/Lato-Bold-Italic.ttf') format('truetype');
    font-weight: bold;
    font-style: italic;

@font-face 
    font-family: Lato;
    src: url('/media/fonts/Lato-Italic.eot');
    src: local('nofont'), url('/media/fonts/Lato-Italic.ttf') format('truetype');
    font-style: italic;

即使在字体粗细的字体声明中指定“正常”,它也不起作用。所以我被困在这里,试图找出我做错了什么没有让IE在H2的声明中包含“font-weight:normal”......有什么猜测吗?提前谢谢...

【问题讨论】:

尝试将字体名称放在引号中!哦,你用同一个名字多次定义字体系列,不确定 IE 是否喜欢这么多。 尝试使用font-weight: 100; @reinder 引用字体名称没有区别,IE 确实选择了正确的字体,而不仅仅是正确的重量。 @Mr.Alien 是的,这确实在 CSS 解释中包含了“100”,但在实际渲染中似乎没有任何改变,可能是因为没有相应的字体-weight:字体声明中的 100。我会用这个测试一些东西...... 这更像是一种 hack,但你可以尝试定义你的字体名称,如 Lato-normal、Lato-bold 等,并在你想要粗体的地方使用它们...... 【参考方案1】:

这可能是继承问题。您是否尝试过输入 !important 关键字。

font-weight: normal !important;

【讨论】:

我确实有,这也不包括在解释中,也没有改变渲染,很遗憾。 显式声明不能被继承覆盖;这是 CSS 继承概念的一部分。【参考方案2】:

我认为您需要更改每个 fontface 属性上的 font-family: Lato; 的名称,因为 IE 可能会混淆。而是尝试输入font-family: Lato-bold;font-family: Lato-italic 等。此外,如果字体具有粗体(如 Lato 那样,并且您已在 fontface 属性中引用),那么您不需要为 fontface 属性添加 font-weight: bold;,如字体已经是粗体,添加 font-weight 只会添加 faux-bold 并使其看起来很糟糕。

这意味着对于您的h2,如果您希望它是正常的非粗体版本,您只需输入font-family: Lato;

【讨论】:

但是这肯定违反了字体规范。如果是这样,您将如何获得粗体内联?那么如果没有指定 Lato 的粗体状态,我将不得不专门将 B 和 STRONG 设置为 font-family: Lato-Bold? 是的,设置 b 和 strong 以拥有 Lato-bold 的字体系列。如果你只是用 font-weight: bold;然后你会得到双粗体(字体独特设计的粗体,和浏览器的仿粗体),看起来不太好。我通常也将 h1、h2、h3 等设置为 font-family: Lato-bold;使用字体时也是如此。这对于支持/兼容性来说应该不是太大的问题,因为 IE6 和大多数其他浏览器版本都支持 @font-face:caniuse.com/#feat=fontface

以上是关于Internet Explorer 8 忽略 CSS 中的字体粗细的主要内容,如果未能解决你的问题,请参考以下文章

Internet Explorer CSS 属性“过滤器”忽略溢出:可见

Internet Explorer 忽略 URL 中的 Hashtag

Internet Explorer 10 忽略 XMLHttpRequest 'xhr.withCredentials = true'

Internet Explorer (IE11) 忽略 CSS break-inside:避免

由于缓存控制标头,如何绕过 Internet Explorer 11 忽略我的字体?

本地文件(无服务器)上的 Internet Explorer“由于 mime 类型不匹配而忽略 CSS”