我在使用“font-variant: small-caps”将我的 Web 字体设置为小型大写字母时遇到问题。这是我的发现和经历,排除了可能的问题:
- 我最初的想法是 .woff 文件出于某种原因没有渲染小型大写字母。我已经排除了这种可能性,因为该字体在 Safari 和 Firefox 中呈现良好,据我所知它们使用 .woff 格式。
- 我的第二个想法是这是一个 webkit 问题,但由于 Safari 显示正常,我认为不是。
- 我没有使用 twitter bootstrap,所以没有
text-rendering: optimylegibility
,我也尝试过将其重置为自动。 - 我尝试了
font-feature-settings: 'smcp'
包括浏览器前缀,它不呈现小型大写字母(在所有浏览器中只有第一个字母大写)
我是不是遗漏了什么?
编辑
经过进一步的研究,我找到了一个解决方法,就是在@font-face
中添加font-variant:small-caps
,如下所示:
@font-face {
font-family:'MYFONT';
src:url('../fonts/MYFONT.eot');
src:url('../fonts/MYFONT.eot?#iefix') format('embedded-opentype'),
url('../fonts/MYFONT.ttf') format('truetype'),
url('../fonts/MYFONT.woff') format('woff'),
url('../fonts/MYFONT.svg#myfont') format('svg');
font-variant:small-caps
}
事实证明,只有堆栈受此影响。在 Chrome 支持的每种字体格式中,像这样分配一个 @font-face
可以正常工作:
<style>
@font-face {
font-family:'MYFONTttf';
src:url('../fonts/MYFONT.ttf') format('truetype');
}
</style>
<div style="font-family:MYFONTttf; font-variant:small-caps">
works as expected, in small-caps
</div>
最佳答案
我认为关键是,奇怪的是,不包括 SVG 格式的字体。仅包括 WOFF 和 TTF 似乎可以正常显示。
我使用 Font Squirrel 生成了各种字体文件,所以我得到了 .woff
、.ttf
、.svg
和 .eot
文件。我的字体相关 CSS 是:
@font-face {
字体系列:“foo”;
src: url(/fonts/foo.eot);
src: url(/fonts/foo?#iefix) 格式('eot'), url(/fonts/foo.woff) 格式('woff'), url(/fonts/foo.ttf) 格式('truetype') , url(/fonts/foo.svg) 格式('svg');
字体粗细:正常;
字体样式:正常;
}
Compass 生成自:
+font-face("foo", font-files("/fonts/foo.woff", "/fonts/foo.ttf", "/fonts/foo.svg"), "/fonts/foo.eot", 正常, 正常)
符合Compass's SASS font-face guidelines .
删除对 SVG 的引用似乎可以解决问题。我还尝试切换 TTF 和 SVG 的顺序(打破 Compass 对字体文件的“推荐顺序”),但这没有帮助。
快速浏览一下,Chrome 似乎在渲染 SVG 字体方面存在其他杂项问题。这不是一个真正优雅的解决方案,但在 Chrome 解决其 SVG 问题之前可能有必要。
关于css - 小型大写字母不使用网络字体在 chrome 中呈现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20891903/