12

多くの人気のあるフォントは、 http: //webfonts.fonts.com/からのみWebで使用できるようです。

ただし、それは非常に奇妙な方法で機能します。直接のフォント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 -および-ipad-devices/

しかし、そのバグはiOS 4.2で修正されています:http: //blog.typekit.com/2010/12/06/updates-to-typekits-mobile-support/

この設定では、何かが足りない場合を除いてfont-weight、fonts.comのアプローチではCSSプロパティfont-weightfont-styleCSSプロパティが完全に破壊されるため、使用しようとするサードパーティのCSSやスクリプトを使用できませんでした。font-weightを使用する代わりに、「mybold」などのカスタムCSSクラスを作成して、font-familyを「FooBold」に設定する必要があります。つまり、標準のCSSを破ります。(私は何が欠けていますか?)

多分彼らはこれをいつか修正するでしょう。しかし、その間に、誰もが正しい回避策を考えることができますか?「FooBold」などの観点から家族「Foo」を定義する方法はありません。@font-face定義はありますか?クレイジーなJavaScriptを作成して、CSSからその場でURLを抽出し、自分の@ font-faceを動的に定義しますか?

(「別のサービスで別のフォントを使用する」は答えとしてカウントされません;-)はい、私はそれを考えましたが、何らかの方法でCSSを微調整することによってwebfonts.fonts.comを「修正」する方法があるかどうか疑問に思います私自身のCSSルールまたはJavaScript。)

4

8 に答える 8

3

残念ながら、これはほぼ2年後もまだ問題であり、Fonts.comは、フォントの宣言方法をすぐに変更する予定はありません(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を生成するわけではありませんが、機能します。

于 2013-02-15T18:07:04.860 に答える
3

更新2014/01/16: Fonts.comは、標準のフォント面の埋め込みをサポートするようになりました。以下は引き続き正常に機能しますが、ファーストパーティのサポートによって大幅に回避されます。


まず、Fonts.comは、ファミリーグループが「作業中」であると主張していることに注意してください。ただし、当面の間は、@font-faceFonts.comが提供するキットを使用して通常のファミリ埋め込みを実際に行うことができます。[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");
}

それでおしまい; とても簡単です。私はすでに自分のサイトの1つでこれをテストしましたが、期待どおりに機能します。明らかに、それをサポートしていない古いブラウザの場合、問題が発生します(Typekitが他の方法で対処する問題)。ただし、fonts.comを使用している場合は、これで問題が解決するはずです。


脚注

  1. 注:この特定のアプローチは、Fonts.comがホストするバージョンではなく、セルフホストオプションでのみ機能することが保証されています。彼らがホストしているバージョンで動作する可能性があると思いますが、テストしておらず、近い将来テストする予定もありません。誰かが希望してコメントで知らせてくれたら、それを反映するように答えを喜んで更新します。
  2. ここで使用hashするのは、ファイル名がハッシュジェネレーターを介して元のファイル名を実行することによって生成されているように見えるためです。これはセルフホストキットであるため、これらの名前は変更されません。したがって、これは引き続き機能します。これには説明が必要であると指摘してくれたコメンターのvieronに感謝します。
于 2013-10-04T17:29:58.177 に答える
2

Fonts.com用の小さなJavascriptローダーを作成しました。これにより、フォントファミリーごとに複数の重みを使用できます。これはrossiのアプローチに基づいていますが、再利用可能なスクリプトに変換されています。この要点のコードと使用法を確認してください。

基本的に、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;
}
于 2013-10-05T16:48:08.970 に答える
1

1年が経過しましたが、webfonts.fonts.comに必要な機能がまだ表示されていないため、「HavocP」と同じ問題が発生しました。かなりイライラしているように見えます。幸い、必要なフォントは「webtype.com」でもホストされています。これにより、標準の「スタイルリンク」アプローチを使用でき、必要に応じて太字/斜体の異なるファミリ名を付けることもできます。だから私はそれで行きました。

于 2012-02-21T09:35:26.727 に答える
1

私はこれをしました:(コードをクリーンアップするのは面倒ではありませんでした、これははるかに優れている/より普遍的かもしれませんが、とにかく投稿します、あなたはアイデアを得るでしょう)それは私がしなかったのでインターネットエクスプローラーにdocument.stylesheetsを使用しますクロスドメインのcssロードを取得して動作させないでください。また、他のブラウザーのcssの$.getajaxロードを取得してください。チェックインしませんでした。つまり、8未満ですが、そこでも機能すると思います。Windows(vista)のクロムには多少のちらつきがありますが、これとgooglewebfontloaderの組み合わせでうまくいくと思います。

<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>

わかりました。現在のプロジェクトでは、この簡単なハック以上のものは必要ありませんが、クリーンアップ/最適化されたバージョンをコーディングする人がいれば、喜んでそれについて聞いていただければ幸いです。

于 2013-08-20T11:19:07.660 に答える
1

Fonts.comには、この問題を解決するための「ファミリーグループ化」オプションがあります。徹底的に調査はしていませんが、2013年9月頃にリリースされたようです。

于 2014-01-02T16:57:23.550 に答える
-1

もう少し手間がかかることは承知していますが、目的の最終結果を可能にする別の方法があります。それは、GoogleのWebFont Loader API(フォントを提供するサービスを使用)です。

基本的に、Googleはサービスで使用できるAJAXAPIを構築しました。利点には、フォントの読み込みのステータスを検出する機能が含まれます。APIは、フォントの読み込みに失敗した(非アクティブ)、現在読み込まれている(読み込み中)、または正常に読み込まれた(読み込み中)かどうかに基づいて、ページのHTMLタグをさまざまなクラスで動的にスタイル設定します。アクティブ)。次に、いくつかの巧妙なCSSルールを使用して、これらのクラスを利用できます。

詳細については、ブログ投稿Googleのドキュメントをご覧ください。

于 2011-05-19T15:29:20.613 に答える
-1

Robertcは、元の質問へのコメントとして最良の回答をしました。Fonts.comは、最も受け入れられているバージョンの@ font-face(現時点)を使用しています。これは、クロスブラウザーのサポートが不十分なため、フォントの太さの宣言を利用していません。

于 2012-12-06T00:10:24.000 に答える