Estilização e Temas

Esta página cobre padrões abrangentes de estilo para UIs web do Decentraland usando styled-components com a solução de estilo do Material UI.

circle-info

Todos os exemplos de código neste documento são ilustrativos. Eles não representam componentes de produção, mas demonstram padrões e normas.

Princípios Centrais

  1. Somente sintaxe de objeto - Use notação de objeto para forte suporte ao TypeScript

  2. Tema em primeiro lugar - Todos os valores vêm do tema UI2

  3. Sem estilos inline - Use componentes estilizados para todo o estilo

  4. Tudo tipado - Aproveite o TypeScript para props e tema

  5. Responsivo por padrão - Use breakpoints do tema


Padrão de Sintaxe de Objeto

Componentes UI2 DEVE usar a sintaxe de objeto. Isso garante forte suporte ao TypeScript, validação csstype e integração direta com o tema.

circle-exclamation

Exemplo Básico

// ✅ Bom: Sintaxe de objeto
const Button = styled('button')({
  color: 'turquoise',
  padding: '8px 16px',
});

// ❌ Ruim: Sintaxe de template literal
const Button = styled.button`
  color: turquoise;
  padding: 8px 16px;
`;

Com Tema e Props

triangle-exclamation

Sintaxe de Elemento

Ao estilizar elementos HTML nativos, sempre use a forma de chamada de função styled('tag').

Sintaxe Correta

Sintaxe Incorreta


Sem Estilos Inline

Estilos inline (style={...}) NÃO DEVEM ser usados em componentes UI2.

Por que não usar estilos inline?

  • Ignoram a tipagem do tema

  • Mais difícil de manter

  • Impedem reutilização

  • Não podem ser otimizados

  • Sem validação do TypeScript

A Maneira Correta


Breakpoints

Use theme.breakpoints helpers em vez de valores de pixel codificados.

Helpers de Breakpoint

Helper
Uso
Descrição

up(key)

theme.breakpoints.up('md')

Min-width e acima

down(key)

theme.breakpoints.down('md')

Max-width e abaixo

between(start, end)

theme.breakpoints.between('sm', 'lg')

Entre dois breakpoints

only(key)

theme.breakpoints.only('md')

Apenas neste breakpoint

Exemplos

Múltiplos Breakpoints


Escala de Espaçamento

Use theme.spacing exclusivamente para margens, paddings e gaps.

Convenção de Espaçamento

  • theme.spacing(n) onde n é um número

  • A unidade base é tipicamente 8px

  • spacing(1) = 8px, spacing(2) = 16px, etc.

  • Decimais permitidos: spacing(1.5) = 12px

Padrões Comuns de Espaçamento


Z-Index e Empilhamento

Siga a escala de z-index do tema. Nunca use valores arbitrários de z-index.

Valores de Z-Index do Tema

Uso Correto

Melhores Práticas de Contexto de Empilhamento

  • Esteja consciente ao criar novos contextos de empilhamento

  • Evite position: relative desnecessário em elementos pai

  • Documente por que um z-index é necessário

  • Se precisar de uma nova camada, adicione-a primeiro ao tema


Tokens de Cor

Sempre consuma cores de theme.palette e dclColors. Sem valores hex ad-hoc.

Estrutura da Paleta

Cores Decentraland

Exemplos


Estados Interativos

Todos os controles interativos DEVEM mostrar estados visíveis para hover, focus, active e disabled.

Componente Interativo Completo

Padrão Focus-Visible

Sempre use :focus-visible em vez de :focus para evitar mostrar anéis de foco em cliques do mouse:


Tipografia

Use variantes de tipografia do tema em vez de propriedades de fonte personalizadas.


Otimização de Performance

Não criar Styled Components na renderização

Memoizar Props Derivadas


Convenções de Nomeação

Nomes de Componentes

  • PascalCase para componentes

  • Nomes descritivos

Estrutura de Arquivos


Próximos Passos

Atualizado