Middle
Ce este Flash of Unstyled Content (FOUC)?
sobes.tech AI
Răspuns de la AI
Strălucirea conținutului fără stil (FOUC) este afișarea temporară a conținutului unei pagini web în browser înainte ca stilurile CSS să fie aplicate. Acest lucru se întâmplă din cauza încărcării și procesării secvențiale a resurselor. Browserul analizează mai întâi HTML-ul și începe să îl afișeze, apoi încarcă și aplică stilurile din fișiere CSS externe sau din eticheta <style>. În această perioadă, utilizatorul vede HTML "gol".
Cauzele FOUC:
- Viteză scăzută a rețelei: O conexiune lentă crește timpul de încărcare al CSS-ului.
- Volum mare de CSS: Cu cât dimensiunea stilurilor este mai mare, cu atât mai mult durează încărcarea și analizarea.
- Stiluri blocante: Dacă stilurile sunt conectate după HTML, browserul poate începe randarea înainte ca acestea să fie complet încărcate.
- JavaScript care modifică CSS: Scripturile care adaugă sau schimbă stilurile dinamic pot cauza FOUC.
Scenarii tipice FOUC:
- Textul este afișat cu fontul implicit al browserului și apoi se schimbă brusc la cel definit în CSS.
- Elementele își resetează poziționarea sau vizibilitatea.
- Grila de aspect "se destramă" și apoi se reconstruiește.
Modalități de prevenire a FOUC:
- Conectarea CSS în
<head>: Este cea mai eficientă metodă. Browserele opresc randarea până când toate stilurile definite în<head>sunt încărcate, dacă sunt marcate ca blocante (implicit pentru<link rel="stylesheet">).<!-- Corect: CSS în head --> <head> <link rel="stylesheet" href="styles.css"> <title>Pagina Mea</title> </head> <body> <!-- Conținut --> </body><!-- Greșit: CSS în body (poate cauza FOUC) --> <head> <title>Pagina Mea</title> </head> <body> <link rel="stylesheet" href="styles.css"> <!-- Conținut --> </body> - Stiluri critice inline: Inserarea stilurilor principale direct în eticheta
<style>din<head>permite aplicarea rapidă a aspectului de bază înainte de încărcarea foilor de stil externe.<head> <style> body { font-family: sans-serif; } /* Stiluri critice */ </style> <link rel="stylesheet" href="styles.css"> <title>Pagina Mea</title> </head> <body> <!-- Conținut --> </body> - Utilizarea
font-display: swap: Pentru fonturi, pentru a evita flicker-ul textului fără stil (FOUT), se afișează fontul sistemului până când se încarcă fontul personalizat.@font-face { font-family: 'MyCustomFont'; src: url('mycustomfont.woff2') format('woff2'); font-display: swap; } - Ascunderea conținutului până la încărcarea stilurilor: Se poate folosi JavaScript pentru a ascunde conținutul principal până când toate stilurile sunt încărcate (mai puțin recomandat din cauza dependenței de JS și a posibilei încetiniri).
<style> .hidden { display: none; } </style> <body class="hidden"> <!-- Conținut --> <script> // Exemplu: afișează body după încărcarea stilurilor // În condiții reale, trebuie monitorizat mai atent încărcarea CSS document.addEventListener('DOMContentLoaded', function() { document.body.classList.remove('hidden'); }); </script> </body>
FOUC afectează negativ experiența utilizatorului și percepția site-ului ca fiind "stricat" sau lent, așa că minimizarea sa este o parte importantă a optimizării frontend.