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.
Principios fundamentales
Solo sintaxis de objeto - Usar notación de objeto para un fuerte soporte de TypeScript
Tema primero - Todos los valores provienen del tema UI2
No estilos en línea - Usar componentes styled para todo el estilado
Todo tipado - Aprovechar TypeScript para props y tema
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.
La sintaxis de template literal no está permitida. Siempre usar notación de objeto.
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
Regla: Los valores DEBEN siempre provenir del tema UI2. No se permiten códigos hexadecimales arbitrarios ni valores en píxeles.
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
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)dondenes un númeroLa 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: relativeinnecesario en los padresDocumentar 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
Revisar Componentes personalizados para pautas de creación de componentes
Ver Guía de migración para migraciones de UI1 a UI2
Comprobar Resumen del proceso para el flujo de trabajo completo
Última actualización