Mérei Tamás webdesigner

Helló!Mérei Tamás vagyok, webdesigner

20 éve foglalkozom weboldalak, felhasználói felületek tervezésével, kódolásával és WordPress sablonok készítésével. Dolgozom magánszemélyeknek, fejlesztő cégeknek, multiknak, állami szervezeteknek és reklámügynökségeknek is.

FOIT, FOUT és a font-display property

Webfontok használata esetén gyakori jelenség a FOUT (Flash of Unstyled Text) és FOIT (Flash of Invisible Text). Nem komoly problémáról van szó, szerintem a webfejlesztők 99%-a egyáltalán nem foglalkozik vele. Ha valaki azonban abszolút 100%-os performance-ra törekszik, érdemes egy kicsit elmerülni a font-display témában.

FOUT-ról akkor beszélünk amikor a böngésző még nem töltötte le a webfontot, de ennek ellenére megjeleníti a szöveget. Ilyenkor egy fallback betűtípust tölt be amit mi határozhatunk meg a font stack-ben. Ha nincs ilyen, akkor a default rendszer betűtípust tölti be. Abban a pillanatban ahogy a webfont letöltődik, a szöveg betűtípusa hirtelen megváltozik, amit egy villanásnak észlelünk, innen a jelenség neve.

A FOUT elkerülése érdekében a böngészők eltérő módszereket alkalmaznak. Általános megoldás, hogy 3 másodpercet várnak a webfont betöltésére és addig semmilyen szöveget nem jelenítenek meg. Ha ennyi idő alatt sem tölt be a webfont, akkor a szöveg a fallback betűtípussal jelenik meg. Ezzel ugyan elkerülhető a FOUT, viszont, a semmiből hirtelen előtűnő szöveg miatt FOIT jelenségről beszélünk.

Font-display property

A böngészők alapértelmezett font renderelési metódusát korábban csak JavaScript segítségével tudtuk módosítani. Ennek kiváltására vezették be a font-display CSS property-t, melyhez hat különböző érték tartozik:

  • auto Ez az alapértelmezett, a böngészőre bízzuk a dolgot.
  • swap A szöveget azonnal rendereli a fallback betűtípussal amíg a webfont nem tölt be. Akkor célszerű használni, ha a dizájn kevésbé fontos és szövegnek azonnal látszódnia kell az oldalon. Hátránya, hogy FOUT jelenség előfordulhat.
  • block A szöveg egész addig láthatatlan marad, amíg a webfont nem tölt be. Akkor érdemes használni, ha a szöveges tartalom valamilyen oknál fogva kizárólag a webfonttal olvasható. FOIT jelenség előfordulhat, és akár az is, hogy egyáltalán nem jelenik meg szöveg az oldalon, ha a webfont valamiért nem töltődik be.
  • fallback A block és a swap közötti arany középút. A FOIT elkerülése érdekében csak nagyon kevés ideig nem jeleníti meg a szöveget (100 ms). Ha ennyi idő alatt nem tölti be a webfontot, akkor utána már nem változtatja meg az oldal betűtípusát. Ezzel a módszerrel elkerülhető a FOIT és FOUT is, viszont előfordulhat, hogy az oldalt a fallback betűtípussal tölti be és úgy is marad. Ha ezt meglátja az oldalt tervező grafikus, valószínűleg égnek áll a haja 🙂
  • optional Hasonló a fallback-hez, azzal a különbséggel, hogy itt a böngészőre van bízva a dolog. Ha a nagyon rövid (100 ms) block period alatt nem tölti be a webfontot, akkor a böngésző dönti el a továbbiakat. Ha a letöltési probléma a user alacsony sávszélességének köszönhető, felesleges tovább erőltetni a webfont letöltését a háttérben, ergo marad a fallback font.

Jelenlegi támogatottsága

A font-display jelenleg Firefox, Chrome, Safari és Opera alatt működik. A leírtak alapján azt hiszem kijelenthető, hogy ha a webfont betöltési ideje 100 ms alatt van, akkor nem kell ezzel a problémával foglalkozni. Ezért (is) fontos, hogy csak azokat a fontokat töltsük be, amiket valóban használunk az oldalon.