Wie füge ich mehrere Schriftdateien für dieselbe Schriftart hinzu?


454

Ich suche auf der MDC-Seite nach der @ font-face-CSS-Regel , aber eines verstehe ich nicht. Ich habe separate Dateien für Fett , Kursiv und Fett + Kursiv . Wie kann ich alle drei Dateien in eine @font-faceRegel einbetten ? Zum Beispiel, wenn ich habe:

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

Der Browser weiß nicht, welche Schriftart für Fettdruck verwendet werden soll (da diese Datei DejaVuSansBold.ttf ist), daher wird standardmäßig etwas verwendet, das ich wahrscheinlich nicht möchte. Wie kann ich dem Browser alle verschiedenen Varianten mitteilen, die ich für eine bestimmte Schriftart habe?


Benötigen wir als Erweiterung der Frage, ob wir diese Schriftarten in WYSIWYG-Editoren wie TinyMCE verwenden, noch die Fettschrift? Obwohl die TinyMCE Buttongs hat, um Bold Italics zu machen? Meine Antwort lautet JA - weil sie intern nach diesen Dateien suchen?
Nishant

Antworten:


749

Die Lösung scheint darin zu bestehen, mehrere @font-faceRegeln hinzuzufügen , zum Beispiel:

@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;
}

Übrigens scheint Google Chrome nichts über das format("ttf")Argument zu wissen. Vielleicht möchten Sie das überspringen.

(Diese Antwort war für die CSS 2- Spezifikation korrekt . CSS3 erlaubt nur einen Schriftstil anstelle einer durch Kommas getrennten Liste.)


130
Die Reihenfolge ist wichtig, der fett / kursive Stil muss zuletzt kommen.
The Who

8
Beachten Sie, dass dies in IE8 (und darunter) nicht funktioniert, selbst wenn Sie eine EOT verwenden. IE lädt die alternative Schrift herunter, verwendet sie jedoch nicht. Stattdessen wird die normale Schrift fett-fett / kursiv dargestellt. Außerdem scheint Chrome 11 eine Schrift nicht zu rendern, die sowohl fett als auch kursiv ist
JaffaTheCake

2
Dieses Beispiel eignet sich perfekt für Schriftarten mit einer separaten TTF-Datei für Fett und Kursiv. Aber was ist, wenn sich die gesamte Schriftart in einer .ttf-Datei befindet und Sie Fettdruck verwenden möchten? Wie funktioniert das?

2
Dieser Artikel erklärt hervorragend, warum dies funktioniert. Schlüsselauszug: "Beachten Sie, dass die Eigenschaft der Schriftfamilie für alle vier Schriftarten der gleiche Name ist. Außerdem stimmen Schriftstil und Schriftgröße mit der Schrift überein. Hinweis: Die normale Schrift muss ganz oben auf der Liste stehen! Wir haben nicht festgestellt, dass die Reihenfolge danach wichtig ist. "
JD Smith

13
Ich hatte Probleme damit auf dem eingebetteten Browser Android 4.4. Der Wechsel font-style: italic, oblique;zu font-style: italic;schien schien einfach alles zu reparieren.
Xavi

59

Ab CSS3 hat sich die Spezifikation geändert und nur eine einzige zugelassen font-style. Eine durch Kommas getrennte Liste (gemäß CSS2) wird wie behandelt behandelt normalund überschreibt alle früheren (Standard-) Einträge. Dadurch werden auf diese Weise definierte Schriftarten dauerhaft kursiv angezeigt.

@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;
}

In den meisten Fällen ist Kursivschrift wahrscheinlich ausreichend und schräge Regeln sind nicht erforderlich, wenn Sie sorgfältig definieren, welche Sie verwenden, und sich daran halten.


Ich glaube, die dritte und vierte Schrift sind falsch benannt, sie sollten "Kursiv" anstelle von "Schräg" haben.
Nathan Merrill

3
@ NathanMerrill wie von OP: I have separate files for bold, italic and bold + italic- Es gibt also drei verschiedene Dateien. Diese Antwort korrigiert die akzeptierte, font-style: italic, oblique;die nicht mehr gültig ist, aber auch diese Antwort verwendet dieselbe Datei für kursiv und schräg. Es sei jedoch darauf hingewiesen, dass die Datei in zwei Fällen gemeinsam genutzt wird.
Dumme Freak

18

Damit die Schriftvariation korrekt funktioniert, musste ich die Reihenfolge von @ font-face in CSS umkehren.

@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");
}

Sehr hilfreich. +1
Mr. Polywhirl

Was meinst du mit "Reihenfolge umkehren" ?
Nyxynyx

15

heutzutage, 17.12.2017. Ich finde keine Beschreibung der Notwendigkeit von Font-Property-Order in der Spezifikation . Und ich teste in Chrom funktioniert immer in welcher Reihenfolge auch immer.

@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

Wenn Sie Google-Schriftarten verwenden, würde ich Folgendes vorschlagen.

Wenn Sie möchten, dass die Schriftarten von Ihrem lokalen Host oder Server ausgeführt werden, müssen Sie die Dateien herunterladen.

Anstatt die ttf-Pakete in den Download-Links herunterzuladen, verwenden Sie den von ihnen bereitgestellten Live-Link, zum Beispiel:

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

Fügen Sie die URL in Ihren Browser ein und Sie sollten eine Schriftartenerklärung erhalten, die der ersten Antwort ähnelt.

Öffnen Sie die angegebenen URLs, laden Sie die Dateien herunter und benennen Sie sie um.

Kleben Sie die aktualisierten Schriftartendeklarationen mit relativen Pfaden zu den woff-Dateien in Ihrem CSS, und Sie sind fertig.


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

Vergessen Sie nicht, dass es für eine mutige Variante ist font-weight; für kursive Variante ist esfont-style


Nicht sehr verwandt mit dem Problem und @font-facedeshalb versuche ich, diese Antwort abzulehnen (aber ich kann nicht, ich habe nicht genug Ruf)
FryingggPannn

Ja, es ist keine Antwort auf die Frage, aber eine gute Sache, an die Sie sich erinnern sollten, wenn Sie die Antworten anwenden. Das Problem ist, dass der Kommentarbereich der Antwort bereits viele enthält, sodass dieser Tipp begraben wäre
Ooker

Ok, dann wusste ich das nicht
FryingggPannn
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.