同じフォントに複数のフォントファイルを追加する方法


454

MDCページで@ font-face CSSルールを探していますが、 1つ取得できません。太字斜体太字+斜体の個別のファイルがあります。3つのファイルすべてを1つの@font-faceルールに埋め込むにはどうすればよいですか?たとえば、私が持っている場合:

@font-face {
    font-family: "DejaVu Sans";
    src: url("./fonts/DejaVuSans.ttf") format("ttf");
}
strong {
    font-family: "DejaVu Sans";
    font-weight: bold;
}

ブラウザーは太字に使用するフォントを認識しません(そのファイルはDejaVuSansBold.ttfであるため)。そのため、デフォルトではおそらく必要のないフォントに設定されます。特定のフォントで使用しているさまざまなバリエーションをすべてブラウザに通知するにはどうすればよいですか?


TinyMCEのようなWYSIWYGエディターでこれらのフォントを使用する場合の質問の拡張として、引き続き太字のイタリックが必要ですか?TinyMCEが太字のイタリックを実行するボタンを持っているにもかかわらず、私の推測の答えはYESです。内部的にこれらのファイルを探しているためです。
Nishant 2013年

回答:


749

解決策は@font-face、たとえば、複数のルールを追加することです:

@font-face {
    font-family: "DejaVu Sans";
    src: url("fonts/DejaVuSans.ttf");
}
@font-face {
    font-family: "DejaVu Sans";
    src: url("fonts/DejaVuSans-Bold.ttf");
    font-weight: bold;
}
@font-face {
    font-family: "DejaVu Sans";
    src: url("fonts/DejaVuSans-Oblique.ttf");
    font-style: italic, oblique;
}
@font-face {
    font-family: "DejaVu Sans";
    src: url("fonts/DejaVuSans-BoldOblique.ttf");
    font-weight: bold;
    font-style: italic, oblique;
}

ちなみに、Google Chromeはformat("ttf")引数を認識していないようですので、スキップすることをお勧めします。

(この回答は、CSS 2仕様に正解でした。CSS3では、カンマ区切りのリストではなく、1つのフォントスタイルしか使用できません。)


130
順序は重要です。太字/斜体のスタイルが最後に来る必要があります。
誰が

8
EOTを使用しても、これはIE8(およびそれ以下)では機能しないことに注意してください。IEは代替書体をダウンロードしますが、それを使用せず、代わりに通常の書体を偽の太字/斜体にします。また、Chrome 11は失敗しているようです。太字で斜体の書体をレンダリングしてください
JaffaTheCake

2
この例は、ボールドとイタリックの個別のTTFファイルがあるフォントに最適です。しかし、フォント全体が1つの.ttfファイルにあり、太字を使用したい場合はどうすればよいでしょうか。

2
この記事 は、これが機能する理由を説明する素晴らしい仕事をします。主な抜粋:「font-familyプロパティは4つのフォントすべてで同じ名前です。また、font-styleとfont-weightはフォントと一致しています。注:通常の太さがリストの一番上にある必要があります。それ以降の順序が重要であることはわかりません。」
JD Smith

13
埋め込まれたブラウザAndroid 4.4でこれを切り取って問題がありました。すべてを修正font-style: italic, oblique;したfont-style: italic;ように見えるように変更を終了しました。
Xavi

59

CSS3の時点で、仕様が変更され、単一ののみが許可されましたfont-style。コンマ区切りのリスト(CSS2ごと)はあたかもそうであるかのように扱われ、normal以前の(デフォルト)エントリを上書きします。これにより、この方法で定義されたフォントがイタリックに永久的に表示されます。

@font-face {
    font-family: "DejaVu Sans";
    src: url("fonts/DejaVuSans.ttf");
}
@font-face {
    font-family: "DejaVu Sans";
    src: url("fonts/DejaVuSans-Bold.ttf");
    font-weight: bold;
}
@font-face {
    font-family: "DejaVu Sans";
    src: url("fonts/DejaVuSans-Oblique.ttf");
    font-style: italic;
}
@font-face {
    font-family: "DejaVu Sans";
    src: url("fonts/DejaVuSans-BoldOblique.ttf");
    font-weight: bold;
    font-style: italic;
}
@font-face {
    font-family: "DejaVu Sans";
    src: url("fonts/DejaVuSans-Oblique.ttf");
    font-style: oblique;
}
@font-face {
    font-family: "DejaVu Sans";
    src: url("fonts/DejaVuSans-BoldOblique.ttf");
    font-weight: bold;
    font-style: oblique;
}

ほとんどの場合、斜体で十分であり、斜体のルールは、どちらを使用するかを明確に定義することに注意すれば必要ありません。


3番目と4番目のフォントの名前が間違っていると思います。「斜め」ではなく「斜体」になっているはずです。
ネイサンメリル

3
OPによる@NathanMerrill:I have separate files for bold, italic and bold + italic-したがって、3つの異なるファイルがあります。この回答は、受け入れられた1つがfont-style: italic, oblique;無効になったものを修正しますが、同じ回答を斜体と斜体に使用しました。それでも、ファイルが2つのケースで共有されることを指摘する価値があります。
Silly Freak

18

フォントのバリエーションを正しく機能させるには、CSSで@ font-faceの順序を逆にする必要がありました。

@font-face {
    font-family: "DejaVuMono";
    src: url("styles/DejaVuSansMono-BoldOblique.ttf");
    font-weight: bold;
    font-style: italic, oblique;
}   
@font-face {
    font-family: "DejaVuMono";
    src: url("styles/DejaVuSansMono-Oblique.ttf");
    font-style: italic, oblique;
}
@font-face {
    font-family: "DejaVuMono";
    src: url("styles/DejaVuSansMono-Bold.ttf");
    font-weight: bold;
}
 @font-face {
    font-family: "DejaVuMono";
    src: url("styles/DejaVuSansMono.ttf");
}

非常に便利。+1
Mr. Polywhirl

「順序を逆にする」とはどういう意味ですか?
Nyxynyx

15

今日、2017-12-17。仕様に Font-property-orderの必要性についての説明はありません。そして、私はクロームでテストすることは常に順序が何であれ動作します。

@font-face {
  font-family: 'Font Awesome 5 Free';
  font-weight: 900;
  src: url('#{$fa-font-path}/fa-solid-900.eot');
  src: url('#{$fa-font-path}/fa-solid-900.eot?#iefix') format('embedded-opentype'),
  url('#{$fa-font-path}/fa-solid-900.woff2') format('woff2'),
  url('#{$fa-font-path}/fa-solid-900.woff') format('woff'),
  url('#{$fa-font-path}/fa-solid-900.ttf') format('truetype'),
  url('#{$fa-font-path}/fa-solid-900.svg#fontawesome') format('svg');
}

@font-face {
  font-family: 'Font Awesome 5 Free';
  font-weight: 400;
  src: url('#{$fa-font-path}/fa-regular-400.eot');
  src: url('#{$fa-font-path}/fa-regular-400.eot?#iefix') format('embedded-opentype'),
  url('#{$fa-font-path}/fa-regular-400.woff2') format('woff2'),
  url('#{$fa-font-path}/fa-regular-400.woff') format('woff'),
  url('#{$fa-font-path}/fa-regular-400.ttf') format('truetype'),
  url('#{$fa-font-path}/fa-regular-400.svg#fontawesome') format('svg');
}

13

Googleフォントを使用している場合は、次のことをお勧めします。

フォントをローカルホストまたはサーバーから実行する場合は、ファイルをダウンロードする必要があります。

ダウンロードリンクでttfパッケージをダウンロードする代わりに、それらが提供するライブリンクを使用します。次に例を示します。

http://fonts.googleapis.com/css?family=Source+Sans+Pro:300,400,600,300italic,400italic,600italic

ブラウザにURLを貼り付けると、最初の回答と同様のfont-face宣言が表示されます。

提供されたURLを開き、ファイルをダウンロードして名前を変更します。

更新されたfont-face宣言をCSSのwoffファイルへの相対パスで固定すれば完了です。


3
/*
# +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
# dejavu sans
# +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
*/
/*default version*/
@font-face {
    font-family: 'DejaVu Sans';
    src: url('dejavu/DejaVuSans.ttf'); /* IE9 Compat Modes */
    src: 
        local('DejaVu Sans'),
        local('DejaVu-Sans'), /* Duplicated name with hyphen */
        url('dejavu/DejaVuSans.ttf') 
        format('truetype');
}
/*bold version*/
@font-face {
    font-family: 'DejaVu Sans';
    src: url('dejavu/DejaVuSans-Bold.ttf'); 
    src: 
        local('DejaVu Sans'),
        local('DejaVu-Sans'),
        url('dejavu/DejaVuSans-Bold.ttf') 
        format('truetype');
    font-weight: bold;
}
/*italic version*/
@font-face {
    font-family: 'DejaVu Sans';
    src: url('dejavu/DejaVuSans-Oblique.ttf'); 
    src: 
        local('DejaVu Sans'),
        local('DejaVu-Sans'),
        url('dejavu/DejaVuSans-Oblique.ttf') 
        format('truetype');
    font-style: italic;
}
/*bold italic version*/
@font-face {
    font-family: 'DejaVu Sans';
    src: url('dejavu/DejaVuSans-BoldOblique.ttf'); 
    src: 
        local('DejaVu Sans'),
        local('DejaVu-Sans'),
        url('dejavu/DejaVuSans-BoldOblique.ttf') 
        format('truetype');
    font-weight: bold;
    font-style: italic;
}

1

ボールドバリアントの場合、それはそうであることを忘れないでくださいfont-weight。イタリック体の場合、それはfont-style


問題とはあまり関係@font-faceがないので、私はこの回答に反対票を投じようとしています(しかし、私はできません。十分な評判がないため)
FryingggPannn

はい、それは質問への回答ではありませんが、回答を適用するときに覚えておくことは良いことです。問題は、回答のコメントセクションにはすでに多くのものが含まれているため、このヒントは埋められます
Ooker

わかりました、それは知りませんでした
FryingggPannn
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.