Suddividi il tuo CSS in file specifici per @media per migliorare notevolmente le prestazioni

Categorie: Core Web Vitals, CSS, HTML, Web, Web Performance
Save and Share:

Quando il CSS viene raggruppato in un unico file, anche dopo il tree-shaking, contiene inevitabilmente una grande quantità di codice CSS non utilizzato a causa dei diversi contesti @media (mobile, tablet, desktop, temi chiaro/scuro/altro, ecc.).

Questo è dannoso per i Core Web Vitals: First Input Delay (FID), Largest Contentful Paint (LCP), Cumulative Layout Shift (CLS), oltre che per altre metriche fondamentali di performance e usabilità come First Contentful Paint (FCP), Total Blocking Time (TBT), Time to Interactive (TTI) e l’evento DOMContentLoaded.

Esiste un modo per migliorare notevolmente il caricamento e il rendering del CSS: separare il CSS in file distinti, dove ciascun file contiene solo il codice necessario per uno specifico contesto.

Suddividi il tuo CSS in file distinti:

📄main.css        - contiene il CSS necessario per tutte le condizioni @media
📄screen.css      - contiene il CSS necessario solo per la condizione @media screen
📄print.css       - contiene il CSS necessario solo per la condizione @media print
📂breakpoints
    📄x-small.css - contiene il CSS necessario solo per il breakpoint X-Small
    📄sm.css      - contiene il CSS necessario solo per il breakpoint Small
    📄md.css      - contiene il CSS necessario solo per il breakpoint Medium
    📄lg.css      - contiene il CSS necessario solo per il breakpoint Large
    📄xl.css      - contiene il CSS necessario solo per il breakpoint Extra large
    📄xxl.css     - contiene il CSS necessario solo per il breakpoint Extra extra large
📂themes
    📄light.css   - contiene il CSS necessario solo per il tema chiaro
    📄dark.css    - contiene il CSS necessario solo per il tema scuro

Successivamente, includi i file CSS in questo modo:

<link rel="stylesheet" href="main.css" media="all">
<link rel="stylesheet" href="screen.css" media="screen">
<link rel="stylesheet" href="print.css" media="print">
<link rel="stylesheet" href="x-small.css" media="(max-width: 575px)">
<link rel="stylesheet" href="sm.css" media="(min-width: 576px)">
<link rel="stylesheet" href="md.css" media="(min-width: 768px)">
<link rel="stylesheet" href="lg.css" media="(min-width: 992px)">
<link rel="stylesheet" href="xl.css" media="(min-width: 1200px)">
<link rel="stylesheet" href="xxl.css" media="(min-width: 1400px)">
<link rel="stylesheet" href="light.css" media="(prefers-color-scheme: light)">
<link rel="stylesheet" href="dark.css" media="(prefers-color-scheme: dark)">

Grazie a questo approccio, i browser moderni danno priorità al caricamento del CSS relativo alle condizioni @media correnti, pertanto il rendering della pagina inizia molto più rapidamente perché gli utenti non devono attendere il caricamento della parte di CSS non utilizzata.
Al contrario, quando tutto il CSS è raggruppato in un unico file e non vengono specificate condizioni negli attributi ‘media’ dei tag ‘link’, il browser attende il caricamento completo del CSS prima di avviare il rendering, rallentando drasticamente il processo.

In questo esempio, i breakpoint sono basati su Bootstrap 5. Questo approccio diventerà ancora più rilevante per Bootstrap in futuro, considerando che aggiungeranno il supporto per temi chiari/scuri e altri.

Se desideri contribuire a rendere il web migliore e più veloce, ti preghiamo di:

  • condividi questo articolo,
  • invia questo articolo agli sviluppatori dei framework che utilizzi,
  • implementa questa suddivisione del CSS sui tuoi siti.

Condividi sui social media o salvalo per dopo:

Se desideri approfondire questa ottimizzazione e il comportamento del browser, consulta le seguenti risorse:

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *