Estilos y tematización

Esta página cubre estándares completos de estilos para las UIs web de Decentraland usando styled-components con la solución de estilos de Material UI.

circle-info

Todos los ejemplos de código en este documento son ilustrativos. No representan componentes de producción, sino que demuestran patrones y estándares.

Principios fundamentales

  1. Solo sintaxis de objeto - Usar notación de objeto para un fuerte soporte de TypeScript

  2. Tema primero - Todos los valores provienen del tema UI2

  3. No estilos en línea - Usar componentes styled para todo el estilado

  4. Todo tipado - Aprovechar TypeScript para props y tema

  5. Responsivo por defecto - Usar los breakpoints del tema


Estándar de sintaxis de objeto

Componentes UI2 DEBEN usar la sintaxis de objeto. Esto garantiza un fuerte soporte de TypeScript, validación de csstype e integración directa con el tema.

circle-exclamation

Ejemplo básico

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

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

Con tema y props

triangle-exclamation

Sintaxis de elemento

Al estilizar elementos HTML nativos, siempre usar la forma de llamada de función styled('tag').

Sintaxis correcta

Sintaxis incorrecta


No estilos en línea

Los estilos en línea (style={...}) NO DEBEN usarse en componentes UI2.

¿Por qué no estilos en línea?

  • Evitan el tipado del tema

  • Más difícil de mantener

  • Previenen la reutilización

  • No pueden ser optimizados

  • Sin validación de TypeScript

La forma correcta


Breakpoints

Usa theme.breakpoints helpers en lugar de valores de píxel codificados.

Helpers de breakpoint

Helper
Uso
Descripción

up(key)

theme.breakpoints.up('md')

Ancho mínimo y hacia arriba

down(key)

theme.breakpoints.down('md')

Ancho máximo y hacia abajo

between(start, end)

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

Entre dos breakpoints

only(key)

theme.breakpoints.only('md')

Solo en este breakpoint

Ejemplos

Múltiples breakpoints


Escala de espaciado

Usa theme.spacing exclusivamente para márgenes, paddings y gaps.

Convención de espaciado

  • theme.spacing(n) donde n es un número

  • La unidad base es típicamente 8px

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

  • Se permiten decimales: spacing(1.5) = 12px

Patrones comunes de espaciado


Z-Index y apilamiento

Seguir la escala de z-index del tema. Nunca usar valores de z-index arbitrarios.

Valores de z-index del tema

Uso correcto

Buenas prácticas de contexto de apilamiento

  • Ser consciente de crear nuevos contextos de apilamiento

  • Evitar position: relative innecesario en los padres

  • Documentar por qué se necesita un z-index

  • Si necesitas una nueva capa, agrégala primero al tema


Tokens de color

Siempre consumir colores desde theme.palette y dclColors. No valores hex ad-hoc.

Estructura de la paleta

Colores de Decentraland

Ejemplos


Estados interactivos

Todos los controles interactivos DEBEN mostrar estados visibles para hover, focus, active y disabled.

Componente interactivo completo

Patrón Focus-Visible

Siempre usar :focus-visible en lugar de :focus para evitar mostrar anillos de foco en clics con el mouse:


Tipografía

Usar las variantes tipográficas del tema en lugar de propiedades de fuente personalizadas.


Optimización de rendimiento

No crear componentes styled en el render

Memoizar props derivadas


Convenciones de nombres

Nombres de componentes

  • PascalCase para componentes

  • Nombres descriptivos

Estructura de archivos


Siguientes pasos

Última actualización