Middle
Co je to Flash of Unstyled Content (FOUC)?
sobes.tech AI
Odpověď od AI
Rozsvícení neformátovaného obsahu (FOUC) je krátkodobé zobrazení obsahu webové stránky v prohlížeči před tím, než jsou aplikovány styly CSS. K tomu dochází kvůli sekvenčnímu načítání a zpracování zdrojů. Prohlížeč nejprve analyzuje HTML a začne jej zobrazovat, poté načítá a aplikuje styly z externích CSS souborů nebo <style> tagu. Během této doby uživatel vidí "holý" HTML bez formátování.
Příčiny FOUC:
- Nízká rychlost sítě: Pomalejší spojení prodlužuje dobu načítání CSS.
- Velké množství CSS: Čím větší je velikost stylů, tím déle trvá jejich načtení a analýza.
- Blokující styly: Pokud jsou styly připojeny po HTML, může prohlížeč začít renderovat dříve, než jsou plně načteny.
- JavaScript, který modifikuje CSS: Skripty, které dynamicky přidávají nebo mění styly, mohou způsobit FOUC.
Typické scénáře FOUC:
- Text se zobrazuje standardním písmem prohlížeče a poté náhle změní na nastavené v CSS.
- Elementy ztrácejí své pozicování nebo viditelnost.
- Mřížka rozvržení "rozpadá" a poté se znovu skládá.
Způsoby prevence FOUC:
- Připojení CSS v
<head>: To je nejúčinnější způsob. Prohlížeče pozastavují vykreslování, dokud se nenačtou všechna stylová pravidla v<head>, pokud jsou označena jako blokující (výchozí pro<link rel="stylesheet">).<!-- Správně: CSS v head --> <head> <link rel="stylesheet" href="styles.css"> <title>Moje stránka</title> </head> <body> <!-- Obsah --> </body><!-- Nesprávně: CSS v těle (může způsobit FOUC) --> <head> <title>Moje stránka</title> </head> <body> <link rel="stylesheet" href="styles.css"> <!-- Obsah --> </body> - In-line kritické styly: Přímé vložení základních stylů do
<style>v<head>umožňuje rychle aplikovat základní vzhled před načtením externích stylových listů.<head> <style> body { font-family: sans-serif; } /* Kritické styly */ </style> <link rel="stylesheet" href="styles.css"> <title>Moje stránka</title> </head> <body> <!-- Obsah --> </body> - Použití
font-display: swap: U písem, aby se předešlo záblesku neformátovaného textu (FOUT), se zobrazí systémové písmo, dokud se nenačte vlastní.@font-face { font-family: 'MyCustomFont'; src: url('mycustomfont.woff2') format('woff2'); font-display: swap; } - Skrytí obsahu do načtení stylů: Může být použito JavaScriptu k skrytí hlavního obsahu do doby, než se načtou všechny styly (méně preferovaná metoda kvůli závislosti na JS a možnému zpomalení).
<style> .hidden { display: none; } </style> <body class="hidden"> <!-- Obsah --> <script> // Příklad: zobrazení těla po načtení stylů // V reálném prostředí je třeba složitější sledovat načítání CSS document.addEventListener('DOMContentLoaded', function() { document.body.classList.remove('hidden'); }); </script> </body>
FOUC negativně ovlivňuje uživatelskou zkušenost a vnímání stránky jako "rozbité" nebo pomalé, proto je jeho minimalizace důležitou součástí front-end optimalizace.