Divida seu CSS em arquivos relacionados a @media para melhorar significativamente o desempenho

Categorizado como Core Web Vitals, CSS, HTML, Web, Web Performance
Save and Share:

Quando o CSS é agrupado em um único arquivo, mesmo após o tree-shaking, ele ainda contém muito CSS não utilizado devido aos diferentes contextos de @media (mobile, tablet, desktop, temas claro/escuro/outros, etc.).

Isso é ruim para as Core Web Vitals: First Input Delay (FID), Largest Contentful Paint (LCP), Cumulative Layout Shift (CLS), bem como outras métricas vitais de desempenho e usabilidade: First Contentful Paint (FCP), Total Blocking Time (TBT), Time to Interactive (TTI) e evento DOMContentLoaded.

Há uma forma de melhorar consideravelmente o carregamento e a renderização de CSS ao dividir o CSS em arquivos distintos, cada um contendo apenas o código pertinente ao contexto.

Separe seu CSS em arquivos diferentes:

📄main.css        - contém CSS necessário para todas as condições @media
📄screen.css      - contém CSS necessário apenas para a condição @media screen
📄print.css       - contém CSS necessário apenas para a condição @media print
📂breakpoints
    📄x-small.css - contém CSS necessário apenas para o breakpoint X-Small
    📄sm.css      - contém CSS necessário apenas para o breakpoint Small
    📄md.css      - contém CSS necessário apenas para o breakpoint Medium
    📄lg.css      - contém CSS necessário apenas para o breakpoint Large
    📄xl.css      - contém CSS necessário apenas para o breakpoint Extra large
    📄xxl.css     - contém CSS necessário apenas para o breakpoint Extra extra large
📂themes
    📄light.css   - contém CSS necessário apenas para o tema claro
    📄dark.css    - contém CSS necessário apenas para o tema escuro

Em seguida, inclua os arquivos CSS assim:

<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)">

Com essa abordagem, os navegadores modernos priorizam o carregamento do CSS para as condições de @media atuais, então a renderização da página começa muito mais rápido porque os usuários não precisam esperar pelo carregamento da parte não utilizada do CSS.
Em casos em que você tem todo o CSS agrupado em um único arquivo e não especifica condições nos atributos de mídia das tags link, o navegador espera que todo o conjunto de CSS seja carregado antes de iniciar a renderização da página. O que desacelera drasticamente a renderização da página.

Os breakpoints neste exemplo são baseados no Bootstrap 5. Essa abordagem se tornará ainda mais importante para o Bootstrap em breve, visto que eles adicionarão suporte para temas claro/escuro/outros.

Se você quer tornar a web melhor e mais rápida, por favor:

  • compartilhe este artigo,
  • envie este artigo para os desenvolvedores dos frameworks que você usa,
  • implemente essa separação de CSS em seus sites.

Compartilhe nas redes sociais ou salve para depois:

Se você quiser ler mais sobre essa otimização e o comportamento do navegador, por favor, veja o seguinte:

Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *