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.
Princípios Centrais
Somente sintaxe de objeto - Use notação de objeto para forte suporte ao TypeScript
Tema em primeiro lugar - Todos os valores vêm do tema UI2
Sem estilos inline - Use componentes estilizados para todo o estilo
Tudo tipado - Aproveite o TypeScript para props e tema
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.
A sintaxe de template literal é não permitida. Sempre use notação de objeto.
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
Regra: Os valores DEVEM sempre vir do tema UI2. Códigos hexadecimais arbitrários ou valores em pixels não são permitidos.
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
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)ondené um númeroA 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: relativedesnecessário em elementos paiDocumente 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
Rever Componentes Personalizados para diretrizes de criação de componentes
Veja Guia de Migração para migrações de UI1 para UI2
Verificar Visão Geral do Processo para o fluxo de trabalho completo
Atualizado