Menține CLS sub 0,1 rezervând spațiu pentru conținutul încărcat târziu

Subiect din roadmap-ul Bune practici: performanța frontend · parte din „Core Web Vitals”

Cumululative Layout Shift (CLS) măsoară stabilitatea vizuală a paginii tale, cuantificând cât de mult se mută elementele pe ecran în timp ce utilizatorul interacționează cu site-ul. Un scor sub 0,1 indică o experiență stabilă, în timp ce valori mai mari sugerează salturi bruște ale conținutului, frustrând utilizatorii și crescând rata de respingere. Ignorarea acestei practici poate duce la clicuri accidentale pe butoane sau link-uri care s-au mutat, afectând negativ conversiile și percepția generală asupra calității aplicației.

Cum o aplici

  1. Stabilește dimensiuni explicite: Asigură-te că toate imaginile, video-urile și embed-urile au atribute width și height definite în HTML sau CSS. Acest lucru permite browserului să aloce spațiul necesar înainte ca resursa să se încarce complet.
  2. Rezervă spațiu pentru conținut dinamic: Pentru elemente care apar tardiv (publicitate, bannere, widget-uri sociale), definește un container cu dimensiuni fixe sau minime în CSS. Folosește min-height pentru a preveni colapsarea layout-ului.
  3. Evită inserțiile în fluxul principal: Dacă trebuie să adaugi conținut nou (ex: notificări), folosește position: absolute sau fixed pentru a-l scoate din fluxul normal al documentului, astfel încât să nu împingă restul conținutului.
  4. Antrenează fonturile: Folosește font-display: swap în CSS pentru a evita „saltul” textului când fontul personalizat se încarcă după cel de sistem.

Exemplu

Varianta greșită, unde imaginea se încarcă lent și deformează layout-ul:

<!-- Lipsesc dimensiunile -->
<img src="banner.jpg">
<p>Text care se va muta brusc.</p>

Varianta corectă, cu spațiu rezervat:

<!-- Dimensiuni explicite pentru rezervarea spațiului -->
<div style="width: 300px; height: 200px; background-color: #ddd;">
  <img src="banner.jpg" width="300" height="200" style="object-fit: cover;">
</div>
<p>Text stabil, nu se va muta.</p>

Cum verifici

Utilizează Lighthouse din Chrome DevTools (tab-ul "Performance") pentru a genera un raport detaliat. Verifică secțiunea "Layout Shifts" pentru a identifica elementele specifice care cauzează instabilitatea. Alternativ, poți folosi Chrome User Experience Report sau plugin-ul Web Vitals pentru a monitoriza scorul CLS în timp real în producție.

Greșeli frecvente

  • Ignorarea aspect-ratio: Setarea doar a lățimii fără înălțimea corespunzătoare (sau invers) poate cauza deformări dacă proporția imaginii nu este respectată exact.
  • Animații neoptimizate: Aplicarea unor tranziții CSS complexe pe elemente care modifică dimensiunea sau poziția altor noduri poate declanșa recalculări costisitoare și salturi vizuale.
  • Conținut generat client-side fără placeholder: Inserarea rapidă a componentelor React/Vue fără a avea un schelet (skeleton) sau dimensiuni alocate anterior duce la salturi majore la randarea inițială.

Resurse gratuite

Alte subiecte din „Core Web Vitals”