Como Implementar Modo Dark e Light em HTML: Guia Completo

Por Mizael Xavier
Como Implementar Modo Dark e Light em HTML: Guia Completo

Dominando o Modo Dark e Light em HTML para uma Experiência de Usuário Aprimorada

A oferta de temas claro (light) e escuro (dark) tornou-se uma funcionalidade essencial no desenvolvimento web moderno. Além de uma questão estética, a implementação de um modo dark e light em HTML impacta diretamente a acessibilidade e o conforto visual dos usuários. Este guia detalhado explora as técnicas e melhores práticas para criar essa funcionalidade de forma eficaz e profissional.

Entendendo a Preferência do Usuário com prefers-color-scheme

A primeira linha de implementação inteligente de um modo dark e light reside em respeitar as configurações do sistema operacional do usuário. A media query do CSS prefers-color-scheme permite que o site detecte automaticamente se o usuário tem uma preferência por temas claros ou escuros definida em seu dispositivo. De acordo com a MDN Web Docs, essa funcionalidade CSS é usada para detectar se um usuário solicitou temas de cores claras ou escuras, com base nas configurações do sistema operacional ou do agente do usuário. Essa abordagem proporciona uma experiência inicial mais fluida e personalizada.

A sintaxe básica no CSS seria:


/* Estilos padrão (geralmente light) */
body {
  background-color: #fff;
  color: #000;
}

/* Estilos para o modo escuro */
@media (prefers-color-scheme: dark) {
  body {
    background-color: #121212;
    color: #eee;
  }
}

Conforme detalhado pela web.dev, o prefers-color-scheme já possui bom suporte nos navegadores modernos, tornando-o uma escolha confiável.

Como Fazer um Modo Dark e Light com Variáveis CSS (Custom Properties)

Para uma implementação mais organizada e de fácil manutenção, o uso de variáveis CSS (também conhecidas como custom properties) é altamente recomendado. Elas permitem definir cores e outros estilos em um local centralizado, facilitando a alternância entre temas. O DigitalOcean destaca que a força das custom properties reside na sua natureza dinâmica, permitindo que seus valores sejam alterados em resposta à interação do usuário.

Exemplo de definição de variáveis CSS:


:root {
  --cor-fundo: #fff;
  --cor-texto: #000;
  --cor-link: #007bff;
}

[data-theme="dark"] {
  --cor-fundo: #121212;
  --cor-texto: #eee;
  --cor-link: #639A67;
}

body {
  background-color: var(--cor-fundo);
  color: var(--cor-texto);
}

a {
  color: var(--cor-link);
}

Esta técnica é amplamente discutida em plataformas como The Odin Project e CSS-Tricks, que enfatizam a flexibilidade e a organização que as custom properties trazem para a criação de temas.

Implementando o Seletor de Tema com JavaScript e localStorage

Embora respeitar a preferência do sistema seja um ótimo ponto de partida, oferecer um controle manual para o usuário é fundamental. Isso geralmente é feito através de um botão ou seletor que permite alternar entre os modos claro e escuro. O JavaScript entra em cena para manipular a classe ou o atributo de dados no elemento <body> ou <html>, ativando os estilos correspondentes.

Para persistir a escolha do usuário entre as sessões de navegação, a API localStorage do JavaScript é a solução ideal. Ao selecionar um tema, essa preferência é salva no localStorage e, a cada carregamento da página, o script verifica se há uma preferência salva e aplica o tema correspondente. Diversos tutoriais, como os encontrados em CodyHouse e GitHub, demonstram implementações práticas dessa funcionalidade.

Um exemplo simplificado de JavaScript para alternar o tema e salvar a preferência:


const toggleButton = document.getElementById('theme-toggle');
const currentTheme = localStorage.getItem('theme');

if (currentTheme) {
    document.documentElement.setAttribute('data-theme', currentTheme);
  
    if (currentTheme === 'dark') {
        toggleButton.checked = true;
    }
}

function switchTheme(e) {
    if (e.target.checked) {
        document.documentElement.setAttribute('data-theme', 'dark');
        localStorage.setItem('theme', 'dark');
    } else {
        document.documentElement.setAttribute('data-theme', 'light');
        localStorage.setItem('theme', 'light');
    }
}

toggleButton.addEventListener('change', switchTheme, false);

É importante notar que a API `window.matchMedia()` pode ser usada em JavaScript para verificar a preferência de esquema de cores do sistema, complementando a lógica do seletor manual, como explicado pela DEV Community.

Como Fazer um Modo Dark e Light: Considerações de Acessibilidade

Ao implementar modos claro e escuro, a acessibilidade deve ser uma prioridade. Não se trata apenas de inverter cores. É crucial garantir um contraste adequado entre texto e fundo em ambos os modos para assegurar a legibilidade para todos os usuários, incluindo aqueles com deficiências visuais. O Web Accessibility Initiative (WAI) do W3C fornece diretrizes valiosas (WCAG) que devem ser seguidas. Plataformas como Smashing Magazine e DIO frequentemente publicam artigos sobre a importância do design inclusivo em modos escuros. Recomenda-se evitar o uso de preto puro (#000000) para o fundo e branco puro (#FFFFFF) para o texto no modo escuro, optando por tons ligeiramente mais suaves para reduzir o cansaço visual.

Como Fazer um Modo Dark e Light: Melhores Práticas e Dicas Adicionais

  • Teste Abrangente: Teste a aparência e a funcionalidade em diferentes navegadores e dispositivos para garantir uma experiência consistente. Ferramentas de desenvolvedor em navegadores como Chrome e Firefox oferecem opções para emular prefers-color-scheme.
  • Imagens e Ícones: Considere como imagens e ícones se comportarão em ambos os temas. Ícones SVG são ideais, pois suas cores podem ser alteradas via CSS. Para imagens rasterizadas, pode ser necessário fornecer versões diferentes ou aplicar filtros CSS para ajustar o brilho/contraste.
  • Transições Suaves: Utilize transições CSS para suavizar a mudança entre os temas, tornando a experiência do usuário mais agradável.
  • Manutenção Simplificada: O uso de pré-processadores CSS como Sass ou Less pode ajudar a organizar ainda mais os estilos dos temas, especialmente em projetos grandes.
  • Priorize o Conteúdo: O design do tema não deve comprometer a legibilidade e a usabilidade do conteúdo.
  • Considere o `color-scheme`: A propriedade CSS `color-scheme` pode ser usada no elemento raiz para indicar ao navegador os esquemas de cores que o documento suporta. Isso pode permitir que o navegador ajuste automaticamente certos elementos da interface do usuário, como barras de rolagem e controles de formulário, para corresponder ao esquema de cores atual.
  • Client Hints: Para otimizações de desempenho avançadas, o cabeçalho HTTP `Sec-CH-Prefers-Color-Scheme` pode ser usado para que o servidor envie CSS otimizado já na primeira requisição, como documentado pela MDN Web Docs.

Implementar um modo dark e light em HTML, CSS e JavaScript é mais do que uma tendência de design; é um passo importante para criar interfaces web mais acessíveis, confortáveis e personalizadas. Ao seguir as práticas recomendadas e utilizar as ferramentas adequadas, os desenvolvedores podem enriquecer significativamente a experiência do usuário.

Mizael Xavier

Mizael Xavier

Desenvolvedor e escritor técnico

Ver todos os posts

Compartilhar: