Optimaliseer het laden van lettertypen op uw website voor snelheid en een betere gebruikerservaring. Leer technieken om Flash of Unstyled Text (FOUT) te voorkomen en zorg voor consistente typografie op alle apparaten en browsers wereldwijd.
CSS-lettertypen laden onder de knie krijgen: Prestatieoptimalisatie en FOUT-preventie voor een wereldwijd publiek
In het huidige, visueel gedreven digitale landschap speelt typografie een cruciale rol in de vormgeving van de esthetiek en gebruikerservaring van een website. De lettertypen die u kiest en hoe ze worden geladen, kunnen de prestaties, toegankelijkheid en de waargenomen kwaliteit van uw site aanzienlijk beïnvloeden. Voor een wereldwijd publiek is dit nog belangrijker, omdat gebruikers uw site mogelijk bezoeken onder uiteenlopende netwerkomstandigheden, apparaatmogelijkheden en geografische locaties. Deze uitgebreide gids duikt in de complexiteit van het laden van CSS-lettertypen, met de nadruk op kritieke prestatieoptimalisatietechnieken en strategieën om de gevreesde Flash of Unstyled Text (FOUT) en Flash of Invisible Text (FOIT) te voorkomen.
De uitdagingen van het laden van lettertypen begrijpen
Weblettertypen bieden een ongeëvenaarde ontwerpvrijheid, maar introduceren tegelijkertijd een unieke reeks prestatie-uitdagingen. In tegenstelling tot systeemlettertypen die direct beschikbaar zijn op het apparaat van een gebruiker, moeten weblettertypen door de browser worden gedownload voordat ze kunnen worden weergegeven. Dit proces kan, indien niet zorgvuldig beheerd, leiden tot:
- Trage laadtijden van pagina's: Grote lettertypebestanden kunnen de weergave van tekst vertragen, waardoor gebruikers langer moeten wachten op uw content.
- Flash of Unstyled Text (FOUT): Dit gebeurt wanneer de browser de tekst in eerste instantie weergeeft met een terugvallettertype (vaak een systeemstandaard) en deze vervolgens vervangt door het weblettertype zodra het is gedownload. Dit kan storend zijn en de gebruikerservaring negatief beïnvloeden.
- Flash of Invisible Text (FOIT): In sommige gevallen verbergen browsers de tekst volledig totdat het weblettertype is gedownload. Dit resulteert in een lege ruimte waar tekst zou moeten staan, wat nog frustrerender kan zijn voor gebruikers.
- Inconsistente weergave op verschillende apparaten en browsers: Verschillende browsers en besturingssystemen kunnen de weergave en het laden van lettertypen iets anders afhandelen, wat leidt tot visuele verschillen.
Het aanpakken van deze uitdagingen is van het grootste belang om een naadloze en performante webervaring te creëren voor elke bezoeker, ongeacht hun locatie of technische configuratie.
De anatomie van het laden van CSS-lettertypen
De basis van het laden van weblettertypen ligt in de @font-face CSS at-rule. Met deze regel kunt u aangepaste lettertypen specificeren voor gebruik op uw webpagina's.
De @font-face-regel
Een typische @font-face-declaratie ziet er als volgt uit:
@font-face {
font-family: 'MyCustomFont';
src: url('/fonts/mycustomfont.woff2') format('woff2'),
url('/fonts/mycustomfont.woff') format('woff');
font-weight: normal;
font-style: normal;
font-display: swap;
}
Laten we de belangrijkste eigenschappen uiteenzetten:
font-family: Dit is de naam die u zult gebruiken om naar het lettertype te verwijzen in uw CSS (bijv.font-family: 'MyCustomFont', sans-serif;).src: Dit specificeert het pad naar uw lettertypebestanden. Het is cruciaal om meerdere formaten aan te bieden voor brede browsercompatibiliteit.font-weightenfont-style: Deze eigenschappen definiëren de dikte (bijv. normal, bold) en stijl (bijv. normal, italic) van de lettertypevariant.font-display: Dit is een essentiële eigenschap om te bepalen hoe lettertypen worden weergegeven tijdens het laadproces. We zullen de waarden ervan later in detail bekijken.
Lettertypeformaten voor webcompatibiliteit
Om ervoor te zorgen dat uw lettertypen op een breed scala aan browsers en apparaten worden weergegeven, is het essentieel om ze in verschillende formaten aan te bieden. De meest gangbare en aanbevolen formaten zijn:
- WOFF2 (Web Open Font Format 2): Dit is het meest moderne en efficiënte formaat, dat superieure compressie biedt in vergelijking met WOFF. Het wordt ondersteund door alle belangrijke moderne browsers.
- WOFF (Web Open Font Format): De opvolger van TrueType en OpenType voor het web, met goede compressie en browserondersteuning.
- TrueType (.ttf) / OpenType (.otf): Hoewel deze formaten breed worden ondersteund, bieden ze over het algemeen minder efficiënte compressie voor webgebruik in vergelijking met WOFF en WOFF2.
- Embedded OpenType (.eot): Voornamelijk voor oudere versies van Internet Explorer. Tegenwoordig minder gebruikelijk, maar kan worden overwogen voor extreem brede legacy-ondersteuning.
- SVG Fonts (.svg): Ondersteund door oudere iOS-apparaten. Over het algemeen niet aanbevolen voor nieuwe projecten vanwege prestatie- en weergaveproblemen.
Beste praktijk: Geef altijd voorrang aan WOFF2 en WOFF. Een veelgebruikte strategie is om WOFF2 als eerste te vermelden in de src-declaratie, gevolgd door WOFF, zodat de browser het best beschikbare formaat kan selecteren.
Strategieën voor prestatieoptimalisatie
Het optimaliseren van het laden van lettertypen is een veelzijdige aanpak. Het omvat niet alleen het kiezen van de juiste formaten, maar ook het strategisch laden ervan om hun impact op de waargenomen prestaties te minimaliseren.
1. Lettertype-subsetting
Veel lettertypefamilies bevatten een breed scala aan tekens, inclusief glyfen voor meerdere talen, wiskundige symbolen en speciale tekens. Als uw website zich voornamelijk richt op een publiek dat een specifiek schrift gebruikt (bijv. op Latijn gebaseerde alfabetten), heeft u waarschijnlijk niet al deze tekens nodig. Lettertype-subsetting houdt in dat u aangepaste lettertypebestanden maakt die alleen de glyfen bevatten die nodig zijn voor uw specifieke gebruik.
- Voordelen: Verkleint de bestandsgrootte van lettertypen aanzienlijk, wat leidt tot snellere downloadtijden.
- Tools: Online tools zoals Font Squirrel's Webfont Generator, Glyphhanger, of command-line tools zoals
glyphhangerkunnen u helpen lettertypen te subsetten. U kunt tekensets of Unicode-reeksen specificeren om op te nemen.
Wereldwijde overweging: Als uw website zich op meerdere taalgroepen richt, moet u mogelijk meerdere subsets maken voor verschillende tekensets. Houd rekening met de cumulatieve impact op het aantal gedownloade lettertypebestanden.
2. Variabele lettertypen
Variabele lettertypen zijn een innovatief lettertypeformaat dat het mogelijk maakt dat één lettertypebestand meerdere variaties van een lettertype bevat (bijv. verschillende diktes, breedtes en stijlen). In plaats van afzonderlijke bestanden te downloaden voor elke lettertypedikte (bijv. `regular.woff2`, `bold.woff2`, `italic.woff2`), downloadt u één enkel variabel lettertypebestand.
- Voordelen: Vermindert drastisch het aantal HTTP-verzoeken en de totale downloadgrootte. Biedt fijnmazige controle over typografische details.
- Implementatie: Zorg ervoor dat uw lettertypebestanden beschikbaar zijn in op OpenType-SVG of TrueType gebaseerde variabele lettertypeformaten. CSS-eigenschappen zoals
font-weight,font-stretchen aangepaste eigenschappen (bijv.--wght) worden gebruikt om specifieke variaties te selecteren. - Browserondersteuning: De ondersteuning voor variabele lettertypen is wijdverbreid in moderne browsers.
Voorbeeld:
/* Definieer een variabel lettertype */
@font-face {
font-family: 'MyVariableFont';
src: url('/fonts/myvariablefont.woff2') format('woff2');
font-weight: 100 900; /* Reeks van diktes */
font-stretch: 50% 150%; /* Reeks van breedtes */
}
body {
font-family: 'MyVariableFont', sans-serif;
font-weight: 700; /* De dikte instellen */
}
h1 {
font-weight: 900; /* Een dikkere variant */
}
.condensed-text {
font-stretch: 75%; /* Een smallere breedte */
}
3. Benutten van font-display
De CSS-eigenschap font-display is een game-changer voor het voorkomen van FOUT en FOIT. Het dicteert hoe een lettertype moet worden weergegeven terwijl de browser het downloadt.
auto: De browser gebruikt zijn standaardgedrag, wat vaak overeenkomt metblock.block: De browser creëert een korte blokkeerperiode (doorgaans tot 3 seconden). Gedurende deze tijd is de tekst onzichtbaar. Als het lettertype aan het einde van deze periode niet is geladen, wordt het terugvallettertype gebruikt.swap: De browser gebruikt onmiddellijk het terugvallettertype. Zodra het weblettertype is gedownload, wordt het ingewisseld. Dit is uitstekend om FOIT te voorkomen en ervoor te zorgen dat tekst snel zichtbaar is, hoewel het FOUT kan veroorzaken.fallback: De browser creëert een korte blokkeerperiode (bijv. 1 seconde) gevolgd door een korte wisselperiode (bijv. 3 seconden). Als het lettertype niet binnen de blokkeerperiode wordt geladen, wordt het terugvallettertype gebruikt. Als het lettertype tijdens de wisselperiode wordt gedownload, wordt het gebruikt; anders blijft het terugvallettertype.optional: Vergelijkbaar metfallback, maar met een zeer korte blokkeerperiode en geen wisselperiode. Als het lettertype niet wordt gedownload tijdens de initiële blokkeerperiode, zal de browser het terugvallettertype gebruiken en niet proberen het later in te wisselen. Dit is ideaal voor lettertypen die niet cruciaal zijn voor de initiële weergave van de content of voor gebruikers met trage verbindingen, omdat het onmiddellijke beschikbaarheid van content prioriteert.
Aanbevolen strategie:
- Voor kritieke lettertypen die de primaire uitstraling van uw merk bepalen (bijv. koppen, navigatie): gebruik
font-display: swap;offont-display: fallback;om ervoor te zorgen dat tekst snel leesbaar is. - Voor minder kritieke lettertypen (bijv. secundaire content, kleine decoratieve elementen): overweeg
font-display: optional;om te voorkomen dat kritieke weergavepaden worden beïnvloed.
Voorbeeld:
@font-face {
font-family: 'CriticalHeadingFont';
src: url('/fonts/criticalheadingfont.woff2') format('woff2');
font-display: swap;
}
@font-face {
font-family: 'OptionalBodyFont';
src: url('/fonts/optionalbodyfont.woff2') format('woff2');
font-display: optional;
}
4. Lettertypen vooraf laden (Preloading)
U kunt de browser instrueren om kritieke lettertypebestanden vroeg in het laadproces van de pagina te downloaden door gebruik te maken van resource hints, specifiek preload.
- Hoe het werkt: Door een
<link rel="preload" ...>-tag toe te voegen in de<head>van uw HTML, vertelt u de browser dat deze bron belangrijk is en met hoge prioriteit moet worden opgehaald. - Voordelen: Zorgt ervoor dat essentiële lettertypen eerder beschikbaar zijn, wat de kans op FOUT of FOIT verkleint.
- Beste praktijk: Laad alleen lettertypen vooraf die cruciaal zijn voor de initiële weergave van uw pagina. Te veel bronnen vooraf laden kan het tegenovergestelde effect hebben.
Voorbeeld:
<!-- In de <head> van uw HTML -->
<link rel="preload" href="/fonts/mycustomfont.woff2" as="font" type="font/woff2" crossorigin>
<link rel="preload" href="/fonts/myotherfont.woff2" as="font" type="font/woff2" crossorigin>
Belangrijke overwegingen voor Preload:
as="font": Dit is cruciaal. Het vertelt de browser wat voor type bron het is.type="font/woff2": Specificeer het MIME-type van het lettertypebestand.crossorigin: Voeg dit attribuut altijd toe bij het vooraf laden van lettertypen van een andere oorsprong (bijv. een CDN) of zelfs van dezelfde oorsprong als ze onderhevig kunnen zijn aan CORS-beleid. Voor lettertypen moet de waardeanonymouszijn of simpelwegcrossorigin.
5. Asynchroon laden van lettertypen
Hoewel preload effectief is, wilt u soms meer controle over wanneer lettertypen worden geladen, vooral als ze niet essentieel zijn voor de initiële viewport. Asynchrone laadtechnieken maken vaak gebruik van JavaScript.
- Web Font Loader (Typekit/Google Fonts): Bibliotheken zoals de Web Font Loader kunnen fijnmazige controle bieden over het laden van lettertypen en gebeurtenissen. U kunt specificeren wanneer lettertypen moeten worden geladen, wat te doen als het laden mislukt, en het wisselen van lettertypen beheren.
- Zelf-gehoste lettertypen met JavaScript: U kunt aangepaste JavaScript-logica implementeren om lettertypebestanden dynamisch te laden.
Voorbeeld met een hypothetisch script:
// Hypothetisch JavaScript voor asynchroon laden
WebFont.load({
google: {
families: ['Open Sans:400,700']
},
custom: {
families: ['MyCustomFont'],
urls: ['/fonts/mycustomfont.woff2']
},
active: function() {
// Lettertypen zijn geladen, pas stijlen toe of trigger gebeurtenissen
document.documentElement.classList.add('fonts-loaded');
}
});
Let op: Zwaar leunen op JavaScript voor het laden van lettertypen kan zijn eigen prestatieknelpunten introduceren als het niet zorgvuldig wordt beheerd. Zorg ervoor dat uw JavaScript is geoptimaliseerd en efficiënt wordt geladen.
6. Optimalisatie van lettertypebestanden
Naast het kiezen van de juiste formaten, zorg ervoor dat uw lettertypebestanden zelf zijn geoptimaliseerd:
- Compressie: WOFF2 biedt uitstekende compressie standaard.
- Caching: Configureer uw server om lettertypebestanden correct te cachen met lange cache-headers. Dit zorgt ervoor dat terugkerende bezoekers lettertypen niet opnieuw hoeven te downloaden.
- Gzip/Brotli Compressie: Zorg ervoor dat uw server is geconfigureerd om lettertypebestanden (en andere assets) te comprimeren met Gzip of Brotli voordat ze naar de client worden verzonden. Brotli biedt over het algemeen betere compressie dan Gzip.
7. Systeemlettertype-stacks
Voor bepaalde scenario's, met name bij kritieke content op verbindingen met zeer lage bandbreedte of om maximale initiële leesbaarheid te garanderen, is het gebruik van systeemlettertypen een haalbare strategie. U kunt een lettertype-stack definiëren die veelgebruikte systeemlettertypen bevat, wat zorgt voor een elegante terugval.
Voorbeeld:
body {
font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol";
}
Deze stack geeft prioriteit aan native systeemlettertypen op verschillende besturingssystemen, waardoor tekst onmiddellijk wordt weergegeven zonder downloadvertragingen. U kunt dit combineren met weblettertypen die later worden geladen voor een 'progressive enhancement'-aanpak.
FOUT en FOIT voorkomen: Een strategische aanpak
Het doel is om een balans te vinden tussen de waargenomen prestaties (hoe snel de pagina *voelt*) en de daadwerkelijke prestaties (hoe snel de pagina bruikbaar wordt). Hier is een strategische uiteenzetting:
1. Prioriteer kritieke lettertypen
Identificeer de lettertypen die essentieel zijn voor de initiële gebruikerservaring:
- Koppen
- Navigatie-elementen
- Belangrijke UI-elementen
Gebruik hiervoor:
font-display: swap;offont-display: fallback;<link rel="preload">voor de WOFF2-versies.
Dit zorgt ervoor dat tekst snel zichtbaar is, zelfs als dit een korte flits van het terugvallettertype betekent.
2. Beheer niet-kritieke lettertypen
Lettertypen die worden gebruikt voor lopende tekst of minder prominente elementen kunnen met minder urgentie worden behandeld:
- Gebruik
font-display: optional; - Vermijd het vooraf laden van deze lettertypen, tenzij absoluut noodzakelijk.
Deze strategie zorgt ervoor dat als deze lettertypen langzaam laden, ze de weergave van belangrijkere content niet blokkeren.
3. Houd rekening met de context van de gebruiker
Denk bij het ontwerpen van uw laadstrategie voor lettertypen aan uw wereldwijde publiek:
- Netwerksnelheden: Gebruikers in regio's met langzamere internetverbindingen zullen gevoeliger zijn voor grote lettertypebestanden. Geef prioriteit aan efficiënte formaten zoals WOFF2 en subsetting.
- Apparaatmogelijkheden: Mobiele apparaten hebben mogelijk minder verwerkingskracht en lagere downloadsnelheden dan desktopcomputers.
- Taal en tekensets: Als uw site meerdere talen ondersteunt, zorg er dan voor dat u alleen de benodigde tekensets voor elke taal laadt, of bied taalspecifieke lettertypekeuzes aan.
4. Testen en monitoren
De beste manier om te verzekeren dat uw optimalisaties effectief zijn, is door rigoureus te testen:
- Browser Developer Tools: Gebruik de tabbladen Netwerk en Prestaties in de ontwikkelaarstools van uw browser om de downloadtijden van lettertypen, het weergavegedrag en knelpunten te inspecteren. Simuleer verschillende netwerkomstandigheden (bijv. Snel 3G, Langzaam 3G).
- Tools voor prestatie-audits: Gebruik tools zoals Google PageSpeed Insights, GTmetrix en WebPageTest. Deze tools bieden gedetailleerde rapporten over de prestaties van uw site, inclusief aanbevelingen voor het laden van lettertypen.
- Real User Monitoring (RUM): Implementeer RUM-tools om prestatiegegevens te verzamelen van echte gebruikers op verschillende apparaten, browsers en locaties. Dit geeft het meest nauwkeurige beeld van de prestaties van uw site.
Geavanceerde technieken en overwegingen
1. HTTP/2 en HTTP/3
Moderne HTTP-protocollen (HTTP/2 en HTTP/3) bieden multiplexing, waardoor meerdere verzoeken en antwoorden via één enkele verbinding kunnen worden verzonden. Dit kan de overhead van het downloaden van veel kleine lettertypebestanden (bijv. verschillende diktes en stijlen) verminderen.
- Voordeel: Vermindert de 'straf' voor het aanvragen van meerdere lettertypevarianten, waardoor technieken zoals het gebruik van afzonderlijke bestanden voor verschillende diktes haalbaarder worden.
- Overweging: Zorg ervoor dat uw server is geconfigureerd om deze protocollen te gebruiken.
2. Critical CSS
Het concept van Critical CSS omvat het identificeren en inlinen van de CSS die nodig is om de content 'above the fold' van uw pagina weer te geven. Als uw aangepaste lettertypen in dit kritieke gebied worden gebruikt, kunt u hun @font-face-declaraties opnemen in de critical CSS.
- Voordeel: Zorgt ervoor dat lettertypedefinities zo vroeg mogelijk beschikbaar zijn, wat kan helpen bij een snellere weergave.
- Let op: Houd critical CSS beknopt om te voorkomen dat het initiële HTML-antwoord te groot wordt.
3. Font Loading API (Experimenteel)
De CSS Font Loading API biedt JavaScript-interfaces om de status van lettertypen op te vragen en het laden ervan te beheren. Hoewel het nog in ontwikkeling is en niet universeel wordt ondersteund, biedt het krachtige programmatische controle.
- Voorbeeld: Gebruik
document.fonts.readyom te weten wanneer alle lettertypen zijn geladen.
Conclusie: Het creëren van een superieure wereldwijde gebruikerservaring
Het beheersen van het laden van CSS-lettertypen is een essentiële vaardigheid voor elke webontwikkelaar die hoog presterende, gebruiksvriendelijke websites wil creëren. Door de nuances van lettertypeformaten te begrijpen, optimalisatietechnieken zoals subsetting en variabele lettertypen toe te passen, strategisch gebruik te maken van font-display en resource hints zoals preload te benutten, kunt u de laadsnelheid van uw site aanzienlijk verbeteren en storende visuele verschuivingen zoals FOUT en FOIT voorkomen.
Vergeet niet om altijd rekening te houden met uw wereldwijde publiek. Wat optimaal werkt voor gebruikers met snelle breedbandverbindingen, is mogelijk niet ideaal voor degenen met langzamere, meer intermittente verbindingen. Een doordachte benadering van het laden van lettertypen, gecombineerd met continu testen en monitoren, zorgt ervoor dat uw website een consistente, performante en visueel aantrekkelijke ervaring biedt aan elke gebruiker, overal.
Belangrijkste punten:
- Geef prioriteit aan WOFF2: Het is het meest efficiënte formaat.
- Gebruik
font-display: Beheer de weergave tijdens het laden van lettertypen (swapofoptionalzijn vaak het beste). preloadkritieke lettertypen: Haal essentiële lettertypen vroeg op.- Subset lettertypen: Verklein bestandsgroottes door alleen de benodigde glyfen op te nemen.
- Verken variabele lettertypen: Voor kleinere bestandsgroottes en meer typografische controle.
- Test grondig: Simuleer verschillende netwerkomstandigheden en apparaten.
Door deze strategieën te implementeren, bouwt u snellere, veerkrachtigere en toegankelijkere websites die tegemoetkomen aan de uiteenlopende behoeften van een wereldwijde gebruikersbasis.