2014-11-03 14 views
15

Ich wollte eine Schriftart mit Google Fonts hinzufügen, und ich habe ein seltsames Verhalten bemerkt.Wie kann ich nur lateinische Untermenge mit Google Fonts WOFF2-Dateien verwenden?

Ich möchte eine Schriftart nur mit der lateinischen Teilmenge hinzufügen, ich will nicht Latein-ext, kyrillisch oder kyrillisch-ext-Teilmenge, um den Code zu erleichtern. Ich verstehe, das ist das Standardverhalten, also habe ich so gemacht:

<link rel="stylesheet" href="http://fonts.googleapis.com/css?family=Philosopher"> 

In Firefox (und den anderen Browsern, die Unterstützung WOFF2 nicht), ich eine korrekte Ausgabe:

@font-face { 
    font-family: 'Philosopher'; 
    font-style: normal; 
    font-weight: 400; 
    src: local('Philosopher'), url(http://fonts.gstatic.com/s/philosopher/v7/OttjxgcoEsufOGSINYBGLbrIa-7acMAeDBVuclsi6Gc.woff) format('woff'); 
} 

Aber in Chrome, bekomme ich diese:

/* cyrillic */ 
@font-face { 
    font-family: 'Philosopher'; 
    font-style: normal; 
    font-weight: 400; 
    src: local('Philosopher'), url(http://fonts.gstatic.com/s/philosopher/v7/OttjxgcoEsufOGSINYBGLV4sYYdJg5dU2qzJEVSuta0.woff2) format('woff2'); 
    unicode-range: U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116; 
} 
/* latin */ 
@font-face { 
    font-family: 'Philosopher'; 
    font-style: normal; 
    font-weight: 400; 
    src: local('Philosopher'), url(http://fonts.gstatic.com/s/philosopher/v7/OttjxgcoEsufOGSINYBGLZQV2lvL5Ba9FjAYK6Lx0Qk.woff2) format('woff2'); 
    unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2212, U+2215, U+E0FF, U+EFFD, U+F000; 
} 

ich dachte, vielleicht die lateinische Teilmenge ist nicht mehr ein Standardverhalten, so dass ich hinzugefügt, um meine <link> der subset GET-Parameter:

<link rel="stylesheet" href="http://fonts.googleapis.com/css?family=Philosopher&subset=latin"> 

Aber es hat die Ausgabe nicht geändert. Wenn ich mit einem &subset=cyrillic gehe, ändert es sich in Firefox, aber die Chrome-Ausgabe ist die gleiche.

Gibt es eine Möglichkeit, nur die lateinische Teilmenge auszugeben?

Oder ist es nur, dass die WOFF2 und Unicode-Bereich nicht heruntergeladen werden, wenn es keine Notwendigkeit auf der Seite gibt? Und in diesem letzten Fall beträgt der Gewinn durch das Entfernen des kyrillischen Anrufs nur 8 Zeilen Code in der CSS-Datei, also ungefähr 300 Bytes, und es ist einfach nichts wert?

+0

Ich würde vorschlagen, sich nicht auf google fonts als Host zu verlassen, aber ftr können Sie den lateinischen Zeichensatz mit dem Parameter "text" anfordern: http://codepen.io/iautomation/pen/gbPwxe (siehe die Stylesheet-Ressource von Klicken Sie auf das Zahnradsymbol) – iautomation

Antwort

19

Der Trick liegt mit dieser Optimierung:

unicode-range: U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116; 

Damit der Browser weiß, ob es die Schrift herunterladen muss, abhängig von den Zeichen, die er gerade in dem HTML-Code geladen. Chrome ist derzeit der einzige mit full support for this.

MDN Listen Firefox 36+ als völlig ignorieren diese Spezifikation, daher Google Fonts muss es eine minimale Schriftart-Gesicht-Spezifikation dienen. Das gleiche passiert mit Safari.

Wie auch immer, das war eine interessante 30-minütige Reise im Internet, die, wie ich hoffe, jedem weiteren Internet-Reisenden hilft. Dies sollte Gewicht darauf legen, warum Sie Google Fonts als CDN zum Hosten von Zeichensätzen verwenden können, um eine optimale Leistung zu erzielen, anstatt sie selbst zu erstellen.

+3

aus dem [docs] (https://developers.google.com/fonts/docs/getting_started?hl=de#Subsets): 'Bitte beachten Sie, dass wenn ein Client-Browser Unicode-Bereich (http: //caniuse.com/#feat=font-unicode-range) Der Subset-Parameter wird ignoriert, ' –

+0

Große Antwort, aber hat einige veraltete Informationen: Aktueller Firefox und Safari unterstützen jetzt Unicode-Bereich. http://caniuse.com/#search=unicode-range –