Middle
Šta je Flash of Unstyled Content (FOUC)?
sobes.tech АИ
Одговор од АИ
Bljesak neformatiranog sadržaja (FOUC) je kratkotrajno prikazivanje sadržaja veb stranice u pretraživaču pre nego što se primene CSS stilovi. To se dešava zbog sekvencijalnog učitavanja i obrade resursa. Pretraživač prvo parsira HTML i počinje da ga prikazuje, a zatim učitava i primenjuje stilove iz spoljašnjih CSS fajlova ili <style> taga. Tokom ovog perioda, korisnik vidi "goji" HTML bez formatiranja.
Razlozi FOUC:
- Niska brzina mreže: Sporo povezivanje produžava vreme učitavanja CSS.
- Velika veličina CSS: Što je veća veličina stilova, to duže traje njihovo učitavanje i parsiranje.
- Blokirajući stilovi: Ako su stilovi povezani nakon HTML-a, pretraživač može početi renderovanje pre njihovog potpunog učitavanja.
- JavaScript koji modifikuje CSS: Skripte koje dinamički dodaju ili menjaju stilove mogu izazvati FOUC.
Tipični scenariji FOUC:
- Tekst se prikazuje standardnim fontom pretraživača, a zatim naglo menja na zadati u CSS-u.
- Elementi gube svoje pozicioniranje ili vidljivost.
- Mreža rasporeda "puca" i zatim se ponovo sastavlja.
Načini za sprečavanje FOUC:
- Povezivanje CSS u
<head>: Ovo je najučinkovitiji način. Pretraživači zaustavljaju renderovanje dok se svi stilovi ne učitaju u<head>, posebno ako su blokirajući (podrazumevano za<link rel="stylesheet">).<!-- Ispravno: CSS u head-u --> <head> <link rel="stylesheet" href="styles.css"> <title>Moj Sajt</title> </head> <body> <!-- Sadržaj --> </body><!-- Pogrešno: CSS u body-ju (može izazvati FOUC) --> <head> <title>Moj Sajt</title> </head> <body> <link rel="stylesheet" href="styles.css"> <!-- Sadržaj --> </body> - Inline kritični stilovi: Direktno umetanje osnovnih stilova u
<style>u<head>omogućava brzo primenjivanje osnovnog izgleda pre učitavanja eksternih stilskih listova.<head> <style> body { font-family: sans-serif; } /* Kritični stilovi */ </style> <link rel="stylesheet" href="styles.css"> <title>Moj Sajt</title> </head> <body> <!-- Sadržaj --> </body> - Korišćenje
font-display: swap: Za fontove, kako bi se izbegao flash of unstyled text (FOUT), prikazuje se sistemski font dok se ne učita prilagođeni.@font-face { font-family: 'MyCustomFont'; src: url('mycustomfont.woff2') format('woff2'); font-display: swap; } - Skrivanje sadržaja do učitavanja stilova: Može se koristiti JavaScript za skrivanje glavnog sadržaja dok se svi stilovi ne učitaju (manje poželjna metoda zbog zavisnosti od JS i mogućeg usporavanja).
<style> .hidden { display: none; } </style> <body class="hidden"> <!-- Sadržaj --> <script> // Primer: prikaz body nakon učitavanja stilova // U stvarnim uslovima potrebno je složenije praćenje učitavanja CSS document.addEventListener('DOMContentLoaded', function() { document.body.classList.remove('hidden'); }); </script> </body>
FOUC negativno utiče na korisničko iskustvo i percepciju sajta kao "slomljenog" ili sporog, stoga je njegovo smanjenje važno za frontend optimizaciju.