Lädt...

🔧 Implementando tema dark e light no Next.js com Tailwind


Nachrichtenbereich: 🔧 Programmierung
🔗 Quelle: dev.to

Primeiramente, por que precisamos implementar tema dark e light nos nossos projetos?

Ter esse recurso não é um requisito que fará seu projeto ter ou não mais acesso, porém ajuda muito na experiência de uso, pois existem pessoas com diferentes preferências. Entendido esse ponto, vamos ao que interessa! 😄

Entendendo o recurso no Tailwind

Para configurarmos esse recurso no Tailwind, precisamos apenas adicionar ou remover a classe dark no elemento <body> do HTML e usar o prefixo dark: nas classes dos elementos que desejamos ter estilos diferentes para cada tema.

Por exemplo:

<div class="bg-gray-800 dark:bg-gray-500"></div>

Nesse cenário, o fundo será bg-gray-800 como padrão (modo claro) e bg-gray-500 quando o tema escuro estiver ativo.

Como funciona no Next.js

No Next.js é um pouco diferente, pois é necessário o apoio de uma biblioteca chamada next-themes.
Importante: você não é obrigado a usá-la — é totalmente possível implementar o mesmo recurso manualmente — porém, ela facilita bastante o desenvolvimento.

Vamos ver exemplos usando e não usando a biblioteca.

Exemplo sem usar a biblioteca

Aqui, você será responsável por:

  • Gerenciar o valor do tema no localStorage;
  • Detectar qual tema o sistema do usuário está utilizando para proporcionar uma melhor experiência.
// hooks/useTheme.ts
import { useEffect, useState } from 'react';

type Theme = 'light' | 'dark';

export function useTheme() {
  const [theme, setTheme] = useState<Theme>('light');

  // Detecta preferências do sistema
  useEffect(() => {
    const savedTheme = localStorage.getItem('theme') as Theme | null;
    if (savedTheme) {
      setTheme(savedTheme);
    } else {
      const prefersDark = window.matchMedia('(prefers-color-scheme: dark)').matches;
      setTheme(prefersDark ? 'dark' : 'light');
    }
  }, []);

  // Atualiza a classe no <html> e salva no localStorage
  useEffect(() => {
    const root = document.documentElement;
    if (theme === 'dark') {
      root.classList.add('dark');
      root.classList.remove('light');
    } else {
      root.classList.add('light');
      root.classList.remove('dark');
    }
    localStorage.setItem('theme', theme);
  }, [theme]);

  return { theme, setTheme };
}

Exemplo usando a biblioteca next-themes

// provider/theme-provider.ts
'use client'

import { ThemeProvider as NextThemesProvider } from 'next-themes'
import * as React from 'react'

function ThemeProvider({ children, ...props }: React.ComponentProps<typeof NextThemesProvider>) {
  const [mounted, setMounted] = React.useState(false)

  React.useEffect(() => {
    setMounted(true)
  }, [])

  if (!mounted) {
    return <>{children}</>
  }

  return <NextThemesProvider {...props}>{children}</NextThemesProvider>
}

export { ThemeProvider }

Usando no layout raiz da aplicação:

async function RootLayout({ children }: { children: ReactNode }) {
  return (
    <html lang="pt-BR">
      <body>
        <ThemeProvider
          attribute="class"
          defaultTheme="system"
          enableSystem
          disableTransitionOnChange
        >
          {children}
        </ThemeProvider>
      </body>
    </html>
  )
}

Ao usar a lib next-themes, ela já traz muitos recursos prontos, como:

  • defaultTheme="system", que automaticamente respeita a preferência do sistema do usuário;
  • Controle do tema via classes (class) no HTML;
  • Entre outras configurações que você pode conferir na documentação oficial: 👉 next-themes no npm

Conclusão

Ter tema dark e light no seu sistema não é um ponto crucial, mas é muito importante para melhorar a usabilidade e a interação do usuário com o seu projeto.

...

🔧 Implementando tema dark e light no Next.js com Tailwind


📈 85.52 Punkte
🔧 Programmierung

🔧 Como deixar o Swagger com tema dark mode usando Swaggo e Golang


📈 38.53 Punkte
🔧 Programmierung

🔧 Como deixar o Swagger com tema dark mode usando NestJS


📈 38.53 Punkte
🔧 Programmierung

🔧 Personalizando o Swagger UI no Spring Boot: Como Aplicar um Tema Dark


📈 38.53 Punkte
🔧 Programmierung

🔧 Modifique qualquer tema no VSCode


📈 31.42 Punkte
🔧 Programmierung

🔧 How to Toggle Between Dark and Light Themes with Tailwind in React/NextJS application


📈 26.64 Punkte
🔧 Programmierung

🔧 How to Customize Tailwind CSS in Next.js 15 Without tailwind.config.js?


📈 25.98 Punkte
🔧 Programmierung

📰 Light Loop &amp; Dark Rock 5: be quiet!s neue AiO leuchtet maximal, der Dark Rock 5 nicht


📈 23.43 Punkte
📰 IT Nachrichten

🔧 🚀Setting Up (2025) Next.js 15 with ShadCN &amp; Tailwind CSS v4 (No Config Needed) + Dark Mode


📈 22.77 Punkte
🔧 Programmierung

🔧 Dark Portfolio: A Fully Responsive Next.js 15 + TypeScript + Tailwind CSS Project


📈 22.77 Punkte
🔧 Programmierung

🔧 Implementing Dark Mode and Theme Switching using Tailwind v4 and Next.js


📈 22.77 Punkte
🔧 Programmierung

🔧 How to add dark mode in next.js application using tailwind css ?


📈 22.77 Punkte
🔧 Programmierung

🔧 Implementando Abstract Factory


📈 22.11 Punkte
🔧 Programmierung

🔧 Implementando uma Solução MultiTenancy com o NHibernate.


📈 22.11 Punkte
🔧 Programmierung

🔧 Implementando uma Tabela Hash em PHP para Armazenar Dados de Artilheiros do Brasileirão


📈 22.11 Punkte
🔧 Programmierung

🔧 Implementando Arquitetura VIP em um App iOS com Swift


📈 22.11 Punkte
🔧 Programmierung

🔧 Implementando seu próprio link tree


📈 22.11 Punkte
🔧 Programmierung

🔧 Implementando uma Lambda com GitLab CI/CD e Terraform para Integração SFTP, S3 e Databricks em Go


📈 22.11 Punkte
🔧 Programmierung

🔧 📢 Implementando Eventos com Spring: Um Exemplo Prático 🚀


📈 22.11 Punkte
🔧 Programmierung

🔧 Implementando uma Estrutura de Dados de Fila com ReactJS


📈 22.11 Punkte
🔧 Programmierung

🔧 Autenticação com JWT no Frontend e Backend: Implementando com Node.js e ReactJS (em TypeScript)


📈 22.11 Punkte
🔧 Programmierung

🔧 Implementando o Strangler Pattern em C# para Migrar um Monólito para Microservices [PT-BR]


📈 22.11 Punkte
🔧 Programmierung

🔧 Guia Passo a Passo: Implementando Scroll Horizontal Snap no React Native


📈 22.11 Punkte
🔧 Programmierung

🔧 Implementando Despliegues Blue-Green con AWS Route 53


📈 22.11 Punkte
🔧 Programmierung

🔧 Implementando interfaces


📈 22.11 Punkte
🔧 Programmierung

🔧 Implementando MongoDB no Symfony


📈 22.11 Punkte
🔧 Programmierung

🔧 Implementando o padrão Specification no Node.js com TypeScript


📈 22.11 Punkte
🔧 Programmierung

🔧 Entendendo e Implementando Design Patterns em TypeScript


📈 22.11 Punkte
🔧 Programmierung

🔧 Implementando Blue-Green deployment com Deployment slots do Azure Web App


📈 22.11 Punkte
🔧 Programmierung

🔧 Full-Text Search: Implementando com Postgres e Django


📈 22.11 Punkte
🔧 Programmierung

🔧 Integrando SwiftUI em UIKit e implementando View com Coordinator


📈 22.11 Punkte
🔧 Programmierung

🔧 Orientação a Objetos em C? Implementando uma interface do zero.


📈 22.11 Punkte
🔧 Programmierung

🔧 Implementando Escalabilidad, Alta Disponibilidad y Monitorización en una Arquitectura de AWS


📈 22.11 Punkte
🔧 Programmierung