DEV Community

Cover image for Criando seu próprio tema com styled-components
Felipe Austriaco
Felipe Austriaco

Posted on • Edited on

3 2

Criando seu próprio tema com styled-components

O que é tema

Tema são as cores, tamanhos de fontes, espaçamento entre elementos da aplicação e o que mais você quiser.

Porquê perder tempo com isso, não posso só aplicar tudo isso pelo css?

Pode sim, o problema é que pode virar uma bola de neve. A cada componente novo você usa medidas diferentes para margins e paddings, cores mais claras ou escuras e tamanhos de fontes divergentes, fazendo com que a aplicação não tenha nenhum padrão de estilização.

Quais os pontos positivos ao usar um tema?

  • A aplicação seguirá um padrão de cores, tamanhos e medidas.
  • Menos CSS redundante, mantendo um código mais limpo.
  • Alterações como cores, tamanho de fontes e etc são triviais, já que toda aplicação busca informações do tema.

Certo, então como crio um Tema?

Bom, vamos lá então. Nesse artigo estamos usando styled-components e irei supor que você está usando Typescript (por favor, esteja :D) para ter o type-checking do nosso tema.

Criação do tema em si

Podemos criar um arquivo chamado theme.ts para definir nosso tema:

export const theme = {
  colors: {
    primary: '#000000',
    secondary: '#FFFFFF',
  }
}
Enter fullscreen mode Exit fullscreen mode

No mesmo arquivo exportaremos também um type do nosso tema para ter o type-checking:

export type ITheme = typeof theme;
Enter fullscreen mode Exit fullscreen mode

Type-checking do tema para o styled-components

De acordo com a documentação do styled-components, devemos extender a interface de Tema original com o nosso type, para isso precisaremos de um arquivo .d.ts, no qual irá se chamar styled.d.ts

import 'styled-components';
import { ITheme } from './theme';

declare module 'styled-components' {
  export interface DefaultTheme extends ITheme {}
}
Enter fullscreen mode Exit fullscreen mode

ThemeProvider, a parte mais fácil!

Agora que já temos nosso tema criado e com typechecking, só precisamos fazer nossa aplicação inteira conhecer ele. o styled-components faz isso através do componente <ThemeProvider /> utilizando Context API por debaixo dos panos.
No nosso App.tsx:

import { ThemeProvider} from 'styled-components';
import { theme } from '../theme.ts';

export default function App() {
 <ThemeProvider theme={theme}>
  ...resto da aplicação
 </ThemeProvider>
}
Enter fullscreen mode Exit fullscreen mode

Utilizando o tema

Com o nosso tema configurado, conseguimos usá-lo em qualquer componente styled-components, exemplo:

 import styled from 'styled-components';

export const Container = styled.main`
  background: ${({ theme }) => theme.colors.primary} // aqui vai ter typechecking!!
`;
Enter fullscreen mode Exit fullscreen mode

AWS GenAI LIVE image

Real challenges. Real solutions. Real talk.

From technical discussions to philosophical debates, AWS and AWS Partners examine the impact and evolution of gen AI.

Learn more

Top comments (0)

Billboard image

Create up to 10 Postgres Databases on Neon's free plan.

If you're starting a new project, Neon has got your databases covered. No credit cards. No trials. No getting in your way.

Try Neon for Free →