Safari 优先于已安装的字体



在我的工作场所工作的一些设计师注意到,在Safari上,我们网站的字体似乎是安装在他们机器上的字体,而不是我们正在服务的字体。

我们在两个不同的场合用两种不同的字体注意到了它:蒙特塞拉特和Open Sans。

第一次(与蒙特塞拉特)用户拥有较新版本的字体,她只在 Safari 上看到最新版本,因为她已经在本地计算机上安装了它(这在 Chrome 上没有发生)。

第二次(使用 Open Sans)我们只在特定机器上看到更粗的字体:然后我们发现,在该机器上,用户安装了比我们所服务的机器(600)更粗的重量(700)。规则是

font-weight: bold;

所以我想浏览器从安装的字体中选择了最大胆的(700)。

我做了一些研究,但没有找到任何证据。有谁知道 Safari 上是否有任何证据/文档优先考虑已安装的字体而不是您提供的字体?

我们没有使用谷歌CDN中的谷歌字体,因为我们决定下载它们并从我们自己的服务器提供它们。

编辑:我正在添加我们用于加载字体的代码(使用Google Webfonts Helper生成):

@font-face {
font-family: 'Open Sans';
font-style: normal;
font-weight: 400;
src: url("font/opensans/open-sans-latin_cyrillic-400.eot");
src: local("Open Sans"), local("OpenSans"), url("font/opensans/open-sans-latin_cyrillic-400.eot?#iefix") format("embedded-opentype"), url("font/opensans/open-sans-latin_cyrillic-400.woff2") format("woff2"), url("font/opensans/open-sans-latin_cyrillic-400.woff") format("woff"), url("font/opensans/open-sans-latin_cyrillic-400.ttf") format("truetype"), url("font/opensans/open-sans-latin_cyrillic-400.svg#OpenSans") format("svg"); 
}
@font-face {
font-family: 'Open Sans';
font-style: normal;
font-weight: 600;
src: url("font/opensans/open-sans-latin_cyrillic-600.eot");
src: local("Open Sans Semibold"), local("OpenSans-Semibold"), url("font/opensans/open-sans-latin_cyrillic-600.eot?#iefix") format("embedded-opentype"), url("font/opensans/open-sans-latin_cyrillic-600.woff2") format("woff2"), url("font/opensans/open-sans-latin_cyrillic-600.woff") format("woff"), url("font/opensans/open-sans-latin_cyrillic-600.ttf") format("truetype"), url("font/opensans/open-sans-latin_cyrillic-600.svg#OpenSans") format("svg"); 
}
@font-face {
font-family: 'Montserrat';
font-style: normal;
font-weight: 400;
src: url("font/montserrat/montserrat-latin-regular.eot");
src: local("Montserrat-Regular"), url("font/montserrat/montserrat-latin-regular.eot?#iefix") format("embedded-opentype"), url("font/montserrat/montserrat-latin-regular.woff2") format("woff2"), url("font/montserrat/montserrat-latin-regular.woff") format("woff"), url("font/montserrat/montserrat-latin-regular.ttf") format("truetype"), url("font/montserrat/montserrat-latin-regular.svg#Montserrat") format("svg"); 
}
@font-face {
font-family: 'Montserrat';
font-style: normal;
font-weight: 700;
src: url("font/montserrat/montserrat-latin-700.eot");
src: local("Montserrat-Bold"), url("font/montserrat/montserrat-latin-700.eot?#iefix") format("embedded-opentype"), url("font/montserrat/montserrat-latin-700.woff2") format("woff2"), url("font/montserrat/montserrat-latin-700.woff") format("woff"), url("font/montserrat/montserrat-latin-700.ttf") format("truetype"), url("font/montserrat/montserrat-latin-700.svg#Montserrat") format("svg"); 
}

以及相关代码为页面的不同部分提供不同的字体。

body{
font-family: "Open Sans", Helvetica, Arial, sans-serif;
font-size: 14px;
}
h6, h5, h4, h3, h2, h1{
font-family: inherit; // inheriting from body
font-weight: bold;
}
.view{
font-family: 'Montserrat', sans-serif;
}

根据您显示的代码,解决方案很明显:如果您不希望本地字体干扰,请不要告诉浏览器先尝试local()。或者根本没有,真的。

现在是 2017 年,在今天的浏览器环境中,您只需要src: url(woff font version) format("woff"),没有别的:没有其他格式,没有本地优先,只是明确您的内容应该使用的字体。在当前的浏览器环境中,eotsvg甚至不再作为有效格式存在,而 woffttf/otf,但经过压缩,并明确标记为"用于网络"的预期,以便可以省略一些通常需要的数据,从而产生更小的字体有效载荷。您可以添加的唯一其他格式是 WOFF2,它使用更新的压缩算法,并允许将单个字体"切片"为多个子集,以便浏览器仅加载设置内容样式所需的切片,而不是一次性加载整个字体。

无论什么为你生成这个CSS,似乎仍然停留在"webfonts在2012年是如何工作的"。

最终,我使用了@Mike'Pomax'Kamermans在最后一条评论中对他自己的答案的建议,为了清楚起见,我将其发布在这里。

我们删除了除.eot文件和.woff2文件之外的所有local规范和每个src

然后我们添加了这个声明,告诉 Safari 我们的粗体字体应该使用 600 权重渲染,否则 Safari 会查看已安装的字体副本(其中包括 700 权重)。

@font-face {
font-family: 'Open Sans';
font-style: normal;
font-weight: bold;
src: url('font/open-sans-latin_cyrillic_latin-ext-600.eot'); /* IE9 Compat Modes */
src: url('font/open-sans-latin_cyrillic_latin-ext-600.woff2') format('woff2'); /* Super Modern Browsers */
}

最新更新