许多流行的字体似乎只能从http://webfonts.fonts.com/
供网络使用然而,它以一种非常奇怪的方式工作。它们不会为您提供直接的字体URL,而是为您提供引用字体文件的CSS文件。我认为CSS中的字体URL可能是短暂的,随着时间的推移会发生变化,以防止未经授权的使用。所以你必须使用他们的CSS,你不能直接合并字体文件的URL(据我所知)。
CSS依次不是我认为应该是的。而不是(简化):
@font-face {
font-family: "Foo";
font-weight: bold;
src: url("foo-bold-variant.ttf");
}
@font-face {
font-family: "Foo";
font-weight: normal;
src: url("foo-normal-variant.ttf");
}
是:
@font-face {
font-family: "Foo Bold";
src: url("foo-bold-variant.ttf");
}
@font-face {
font-family: "Foo Normal";
src: url("foo-normal-variant.ttf");
}
因此,您不能这样做:
body {
font-family: "Foo", sans-serif;
}
相反,在您使用font-weight: bold
的任何地方,您必须将其更改为font-family: "Foo Bold"
,而且我猜您必须添加CSS规则以更改<strong>
之类的内容。我使用粗体作为示例,但除了font-style
之外,font-weight
也出现了同样的问题。
他们将此解释为iOS错误的解决方法(“这是一个功能!”):http://blog.fonts.com/2010/09/23/getting-web-fonts-to-look-fantastic-on-iphone-and-ipad-devices/
但是这个bug已经在iOS 4.2中得到修复: http://blog.typekit.com/2010/12/06/updates-to-typekits-mobile-support/
使用此设置,除非我遗漏了某些内容,否则我无法使用任何试图使用font-weight
的第三方CSS或脚本,因为fonts.com的方法会破坏font-weight
和{ {1}} CSS属性完全。您必须为“mybold”或类似的东西组成一个自定义CSS类,而不是使用font-weight,以将font-family设置为“Foo Bold”。即他们打破标准CSS。 (我错过了什么?)
也许他们会在某个时候解决这个问题。但与此同时,任何人都可以想到一个理智的解决方法吗?没有办法根据他们的“Foo Bold”来定义家庭“Foo”等等。font-style
定义是什么?写一些疯狂的JavaScript来动态地从CSS中提取URL,然后动态定义我自己的@ font-face?
(“使用与其他服务不同的字体”不算作答案;-)是的我已经想到了这一点,但我想知道是否有办法通过某种方式调整“修复”webfonts.fonts.com他们的CSS使用我自己的CSS规则或JavaScript。)
答案 0 :(得分:3)
可悲的是,差不多两年后这仍然是一个问题,而且Fonts.com没有立即改变他们声明字体的方式(asked them on Twitter)。
但是如果你使用CSS编译器(例如SASS),你可以很容易地用嵌套样式解决这个问题...唯一的缺点是它比使用简单的字体权重声明更多的代码。
在这里抛出这段代码,万一有人像我一样偶然发现这个旧线程!
h1 {
font-family: "PMNCaeciliaW01-75Bold", Georgia, Times, serif;
b, strong {
font-family: "PMNCaeciliaW01-85Heavy", Georgia, Times, serif;
}
i, em {
font-family: "PMNCaeciliaW01-76BoldIt", Georgia, Times, serif;
}
b i, strong i,
i b, i strong
b em, strong em,
em b, em strong {
font-family: "PMNCaeciliaW01-86HeavyI", Georgia, Times, serif;
}
}
它不会生成世界上最漂亮的CSS,但它有效。
答案 1 :(得分:3)
更新2014/01/16: Fonts.com now supports standard font face embeds.以下内容仍然有效,但很大程度上是由第一方支持所取代。
首先,请注意Fonts.com现在断言家庭分组是"in the works"。然而,与此同时,人们可以使用Fonts.com供应的工具包实际进行正常的@font-face
家庭嵌入。[1]
假设他们给你的字体表面声明是这样的,我在每种情况下用hash
代替字体文件的名称:[2]
@font-face{
font-family:"Minion W01 It";
src:url("Fonts/hash.eot?#iefix");
src:url("Fonts/hash.eot?#iefix") format("eot"),url("Fonts/hash.woff") format("woff"),url("Fonts/hash.ttf") format("truetype"),url("Fonts/hash.svg#8cda8fb2-6a3e-4e20-b063-4fbfca0025e5") format("svg");
}
@font-face{
font-family:"Minion W01 Regular";
src:url("Fonts/hash.eot?#iefix");
src:url("Fonts/hash.eot?#iefix") format("eot"),url("Fonts/hash.woff") format("woff"),url("Fonts/hash.ttf") format("truetype"),url("Fonts/hash.svg#cfa664d4-e518-4a49-b8a3-fccec93c29c1") format("svg");
}
@font-face{
font-family:"Minion W01 SmBd";
src:url("Fonts/hash.eot?#iefix");
src:url("Fonts/hash.eot?#iefix") format("eot"),url("Fonts/hash.woff") format("woff"),url("Fonts/hash.ttf") format("truetype"),url("Fonts/hash.svg#cae2aa90-12f3-4dab-8a67-205fbdf0f046") format("svg");
}
@font-face{
font-family:"Minion W01 SmBd It";
src:url("Fonts/hash.eot?#iefix");
src:url("Fonts/hash.eot?#iefix") format("eot"),url("Fonts/hash.woff") format("woff"),url("Fonts/hash.ttf") format("truetype"),url("Fonts/hash.svg#76687d3a-f199-47f2-be8c-a6ccde14c771") format("svg");
}
然后要创建一个名字很好的字体家族,你可以按如下方式调整这些声明:
@font-face{
font-family:"Minion";
font-style: italic;
src:url("Fonts/hash.eot?#iefix");
src:url("Fonts/hash.eot?#iefix") format("eot"),url("Fonts/hash.woff") format("woff"),url("Fonts/hash.ttf") format("truetype"),url("Fonts/hash.svg#8cda8fb2-6a3e-4e20-b063-4fbfca0025e5") format("svg");
}
@font-face{
font-family:"Minion";
font-weight: normal;
font-style: normal;
src:url("Fonts/hash.eot?#iefix");
src:url("Fonts/hash.eot?#iefix") format("eot"),url("Fonts/hash.woff") format("woff"),url("Fonts/hash.ttf") format("truetype"),url("Fonts/hash.svg#cfa664d4-e518-4a49-b8a3-fccec93c29c1") format("svg");
}
@font-face{
font-family:"Minion";
font-weight: 700;
src:url("Fonts/hash.eot?#iefix");
src:url("Fonts/hash.eot?#iefix") format("eot"),url("Fonts/hash.woff") format("woff"),url("Fonts/hash.ttf") format("truetype"),url("Fonts/hash.svg#cae2aa90-12f3-4dab-8a67-205fbdf0f046") format("svg");
}
@font-face{
font-family:"Minion";
font-weight: 700;
font-style: italic;
src:url("Fonts/hash.eot?#iefix");
src:url("Fonts/hash.eot?#iefix") format("eot"),url("Fonts/hash.woff") format("woff"),url("Fonts/hash.ttf") format("truetype"),url("Fonts/hash.svg#76687d3a-f199-47f2-be8c-a6ccde14c771") format("svg");
}
就是这样;就这么简单。我已经在我自己的一个网站上测试了它,它按预期工作。显然,对于不支持它的旧浏览器,您将遇到问题(Typekit以其他方式解决的问题)。但是,如果您使用的是fonts.com,则应该为您处理。
hash
因为文件名看起来像是通过哈希生成器运行原始文件名而生成的。由于这是一个自托管套件,这些名称不会改变,因此这将继续有效。感谢vieron的评论者pointing out,这需要澄清。答案 2 :(得分:2)
我为Fonts.com编写了一个小型Javascript Loader,它允许每个字体系列有多个权重。 它基于rossi的方法,但转换为可重复使用的脚本。查看this gist中的代码和用法。
基本上它从fonts.com加载CSS,根据指定的设置进行修改,并附加到文档的<head>
。
在你的JS中:
FontsComLoader.load('HelveticaNeueFontsCom', 'https://fast.fonts.net/cssapi/XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX.css', {
'W02-55Roma': '400',
'W02-75Bold': '700'
});
在你的CSS中:
.helvetica-regular,
.helvetica-bold {
font-family: 'HelveticaNeueFontsCom', 'Helvetica Neue', Helvetica, Arial, sans-serif;
}
.helvetica-regular {
font-weight: 400;
}
.helvetica-bold {
font-weight: 700;
}
答案 3 :(得分:1)
一年过去了,但我仍然没有在webfonts.fonts.com中看到所需的功能,所以我遇到了与“Havoc P”相同的问题。看起来很令人沮丧。 幸运的是,我需要的字体也托管在“webtype.com”上,允许使用标准的“样式链接”方法,并且如果需要,还允许使用粗体/斜体不同的姓氏。所以我就跟它一起去了。
答案 4 :(得分:1)
我这样做了:(没有费心去清理代码,这可能会更好/更普遍,但无论如何我会发布它,你会得到这个想法) 它使用document.stylesheets进行Internet Explorer,因为我没有使用跨域css加载来处理它,以及其他浏览器的css的$ .get ajax加载。没有登记,即低于8,但我认为它甚至在那里工作。 窗户上的铬有一些闪烁(vista),但我认为这个和谷歌webfont加载器的组合可以做到这一点。
<link rel="stylesheet" href="//fast.fonts.net/cssapi/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx.css" />
<script>
var data = "";
try
{
data = document.styleSheets[document.styleSheets.length - 1].cssText;
data = data.replace(/url\(/g, 'url(//fast.fonts.net');
data = data.replace(/font-family: Geom Slab 703 W01 Light;/g, 'font-family:"GeomSlab";font-weight:lighter;');
data = data.replace(/font-family: GeomSlab703W01-LightIta;/g, 'font-family:"GeomSlab";font-weight:lighter;font-style: italic;');
data = data.replace(/font-family: GeomSlab703W01-Medium;/g, 'font-family:"GeomSlab";font-weight:normal;');
data = data.replace(/font-family: GeomSlab703W01-MediumIt;/g, 'font-family:"GeomSlab";font-weight:normal;font-style: italic;');
data = data.replace(/font-family: Geom Slab 703 W01 Bold;/g, 'font-family:"GeomSlab";font-weight:bold;');
data = data.replace(/font-family: GeomSlab703W01-BoldItal;/g, 'font-family:"GeomSlab";font-weight:bold;font-style: italic;');
document.styleSheets[document.styleSheets.length - 1].cssText = data;
}
catch (e)
{
}
$.get(location.protocol + '//fast.fonts.net/cssapi/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx.css', function(data) {
data = data.replace(/url\("/g, 'url("//fast.fonts.net');
data = data.replace(/import url\(/, 'import url(//fast.fonts.net');
data = data.replace(/font-family:"Geom Slab 703 W01 Light";/g, 'font-family:"GeomSlab";font-weight:lighter;');
data = data.replace(/font-family:"GeomSlab703W01-LightIta";/g, 'font-family:"GeomSlab";font-weight:lighter;font-style: italic;');
data = data.replace(/font-family:"GeomSlab703W01-Medium";/g, 'font-family:"GeomSlab";font-weight:normal;');
data = data.replace(/font-family:"GeomSlab703W01-MediumIt";/g, 'font-family:"GeomSlab";font-weight:normal;font-style: italic;');
data = data.replace(/font-family:"Geom Slab 703 W01 Bold";/g, 'font-family:"GeomSlab";font-weight:bold;');
data = data.replace(/font-family:"GeomSlab703W01-BoldItal";/g, 'font-family:"GeomSlab";font-weight:bold;font-style: italic;');
var s = $('<style type="text/css" />').appendTo('head');
s.html(data);
});
</script>
好的,所以我对目前的项目不需要超过这个快速入侵,但如果有人编写清理/优化的版本,我会很高兴听到它。
答案 5 :(得分:1)
Fonts.com现在有一个“Family Grouping”选项来解决这个问题。我没有彻底调查,但它看起来像是在2013年9月左右发布的。
答案 6 :(得分:-1)
虽然我意识到这是一项更多的工作,但有一种替代方法应该能够实现您的最终结果: Google的WebFont Loader API (我们的服务提供字体)。< / p>
基本上,Google已经构建了一个可以与我们的服务一起使用的AJAX API。优点包括检测字体加载状态的能力 - API根据字体无法加载(非活动),当前是否正在加载(加载)或已成功加载(以及是否已成功加载),根据不同的类动态设置页面的HTML标记样式(活性)。然后,您可以使用一些聪明的CSS规则来利用这些类。
可在我们的blog post和Google's documentation上找到更多信息。
答案 7 :(得分:-1)