14 pontos por GN⁺ 2025-08-30 | Ainda não há comentários. | Compartilhar no WhatsApp
  • As principais causas recentes da queda de desempenho em sites são o uso excessivo de JavaScript e scripts de rastreamento, e em muitos casos isso pode ser substituído suficientemente apenas com HTML/CSS
  • Recursos adicionados recentemente, como aninhamento em CSS, cores relativas e novas unidades de viewport (lvh, svh, dvh), permitem resolver de forma simples tarefas que antes dependiam de JS ou preprocessadores
  • CSS não é apenas uma ferramenta de estilo, mas uma linguagem poderosa capaz de implementar animações, validação de entrada, temas em modo escuro e menus sanfona
  • Também em termos de desempenho, o CSS usa aceleração por GPU e roda em uma thread separada, sendo mais suave e eficiente que JS em animações e transições
  • O autor destaca o CSS não apenas como uma ferramenta prática, mas como um meio de expressão e arte, e recomenda que desenvolvedores aproveitem mais o potencial do CSS moderno

Introdução: a complexidade da web e uma nova tentativa

  • Muitos sites sofrem com queda de desempenho e complexidade por causa do uso excessivo de frameworks JavaScript
    • Apps em React levam vários segundos para carregar, e o NextJS provoca erros de hidratação
    • A pasta node_modules ocupa vários gigabytes
  • Mesmo sem JavaScript, é possível implementar recursos poderosos apenas com HTML e CSS
    • Fora carrinhos de compra complexos de sites de e-commerce ou dashboards, JavaScript pode não ser essencial
  • Este texto apresenta os recursos mais recentes do CSS e incentiva desenvolvedores a explorarem várias possibilidades sem depender apenas de JavaScript

Equívocos e percepção sobre CSS

CSS é mesmo difícil e desconfortável?

  • A percepção negativa sobre CSS vem da falta de aprendizado básico
    • Muitos desenvolvedores pulam os fundamentos de CSS e focam em JavaScript ou TypeScript
    • CSS não é uma simples ferramenta de estilização, mas uma linguagem específica de domínio com recursos poderosos
  • CSS permite criar layouts complexos com facilidade usando ferramentas como flexbox
    • Exemplo: centralizar uma div com display: flex e justify-content: center é simples
    • As ferramentas de desenvolvedor do navegador oferecem widgets para ajustar visualmente propriedades de flexbox
  • Se você se aprofunda só em um lado (por exemplo, JS) e negligencia CSS, é natural que a dificuldade aumente

A dor de escrever CSS, e o que mudou

  • Antigamente CSS realmente não era tão confortável, por isso surgiram ferramentas como Sass e Tailwind
    • Ex.: era preciso gerenciar cadeias longas de seletores como .post > .buttons .like:hover
  • Recentemente foram adicionados recursos de melhoria de qualidade (como aninhamento), tornando o desenvolvimento agradável mesmo só com CSS puro
    • O aninhamento em CSS reúne estilos relacionados em um só lugar e melhora a legibilidade
      • Ex.: .post { & > .buttons { .like { &:hover { ... } } } }
      • A relação entre pai e filho fica clara, permitindo nomes de classe mais curtos e simples
  • Cores relativas facilitam o ajuste de cores
    • É possível ajustar a luminosidade com hsl(from #123456 h s calc(l + 10))
    • color-mix() mistura duas cores para gerar cores dinâmicas
  • A sintaxe de intervalo em media queries permite condições intuitivas como (width <= 768px)
  • A unidade lh permite estilização alinhada à altura da linha
  • A propriedade scrollbar-gutter resolve problemas de deslocamento de layout causados pela barra de rolagem
  • O Baseline garante compatibilidade de recursos entre os principais navegadores
    • newly available funciona em navegadores recentes
    • widely available é compatível até com navegadores de 2,5 anos atrás
    • Ex.: aninhamento em CSS é suportado por todos os navegadores desde dezembro de 2023

Por que desenvolver só com CSS/HTML?

  • Alguns usuários desativam o JavaScript por padrão (por motivos de segurança, privacidade etc.)
  • Ao oferecer um site apenas com CSS/HTML puro, aumenta a chance de esses usuários conseguirem usá-lo
  • Do ponto de vista de desenvolvimento e da experiência do usuário, usar apenas CSS/HTML traz vantagens em velocidade, acessibilidade e uso de CPU/bateria
    • Animações em CSS rodam na thread do compositor, reduzindo a carga na CPU
    • JavaScript roda via event loop e pode introduzir um pequeno atraso
  • Há melhora em acessibilidade e facilidade de uso
    • Efeitos de hover em botões, animações de toast e validação de entrada podem ser implementados facilmente com CSS

Exemplos práticos e principais recursos de CSS

Criando animações de entrada naturais com @starting-style

  • Antes, implementar animações de entrada de elementos exigia estruturas complexas com keyframes, gatilhos em JS etc.
  • Com a introdução de @starting-style, ficou simples definir o estado inicial. É fácil implementar a animação do estado inicial do elemento (por exemplo, fade-in)
    • Configuração com transition: opacity 1s; @starting-style { opacity: 0; }
    • Funciona sem @keyframes separado nem JavaScript
  • Basta declarar o estado inicial junto com a transition para que a animação seja aplicada naturalmente
    • Ex.: tratar suavemente a transição de opacidade e posição de uma mensagem toast

Configuração fácil de tema claro/escuro

  • color-scheme: light dark alterna o tema automaticamente conforme a preferência do usuário
  • A função light-dark(#000, #FFF) define cores apropriadas para modo claro/escuro
  • Botões de rádio e o seletor :has permitem que o usuário escolha o tema
    • É possível trocar de tema só com CSS, sem JavaScript
    • Opcionalmente, JavaScript pode ser adicionado para salvar/carregar o tema

Criando UI customizada com rádio/checkbox e :has, :checked etc.

  • Interações complexas como abas, sanfonas e toggles também podem ser implementadas sem JavaScript
  • Botões de rádio podem receber estilo customizado com :checked e :has
    • Ex.: label:has(input:checked) define o estilo do botão selecionado
    • O elemento de entrada pode ser ocultado com opacity: 0, mantendo a acessibilidade para leitores de tela
  • O elemento details é ideal para implementar menus sanfona como os de FAQ
    • O atributo name permite controlar um único item aberto por vez
    • Também é possível adicionar animações conforme o estado [open]

Validação de entrada e reflexão de estado

  • A combinação de atributos HTML como pattern e required com pseudoclasses CSS (:valid, :invalid, :user-valid etc.) oferece validação em tempo real e feedback visual
  • Melhorias na experiência do usuário, como mudar o estilo de outline/border dos campos de entrada
  • O atributo pattern do HTML permite validar campos de entrada
    • Ex.: \w{3,16} permite letras, números e underscore com 3 a 16 caracteres
  • :valid e :invalid do CSS permitem estilização conforme a validade
    • :user-valid e :user-invalid só aplicam estilo depois que o usuário interage
  • O seletor :has permite estilizar outros elementos de acordo com o estado do input
  • Em alguns casos (por exemplo, condições de entrada complexas), JS é necessário, mas na maioria CSS/HTML é suficiente

Como usar corretamente unidades de viewport

  • As unidades vw/vh têm problemas de precisão no mobile por causa do aparecimento/desaparecimento da barra de endereço (navegação)
  • Recomenda-se usar as novas unidades de viewport, como lvh/svh/dvh (largest/smallest/dynamic viewport height)
    • lvh: para tela cheia (ex.: plano de fundo de tela inteira)
    • svh: para botões, links e outros elementos que sempre precisam permanecer visíveis na tela
    • dvh: para alocar tamanho de forma dinâmica conforme mudanças como rolagem
  • Sobreposição do teclado pode ser tratada com a propriedade interactive-widget ou com a VirtualKeyboard API
    • <meta name="viewport" content="width=device-width, interactive-widget=resizes-content">
    • Em navegadores baseados em Chromium: navigator.virtualKeyboard.overlaysContent = true

Wishlist de CSS (o que faz falta ou seria desejável)

  • Blocos reutilizáveis: aplicar outra classe dentro de uma classe (ex.: @apply border)
  • Seletores combinados com media query: combinar @media e seletor de classe
  • Variável de nth-child: span { --nth: nth-child(); } para estilização dinâmica
  • Seletor nth-letter: estilizar uma letra específica (ex.: p::nth-letter(2))
  • Remoção de unidade: gerar valor sem unidade com calc(100vw / 1px)
  • Função image(): suporte a cor alternativa e fragmentos de imagem
  • Tag style dentro do body: suporte oficial no padrão para aliviar problemas de FOUC

Encerramento: CSS e a dimensão artística da web

  • CSS não é apenas uma ferramenta, mas um meio de expressão criativa
  • Ferramentas de IA ou cadeias de build (linters, minificadores) podem limitar a criatividade
  • CSS atende ao mesmo tempo desempenho, acessibilidade e expressão artística
  • Este texto foi escrito com cerca de 49 kB de HTML/CSS sem JavaScript
    • Todos os widgets interativos e elementos visuais foram implementados manualmente
    • Ex.: CSS Click Game prova o potencial do CSS como linguagem de programação

Ainda não há comentários.

Ainda não há comentários.