Relaciones
Cuando un semántico no es alias
La regla de DesignToken101 de que los semánticos son siempre alias, sus cuatro excepciones y por qué existe cada una, y cómo se controla una excepción para que no se convierta en un valor suelto.
Última revisión:
En DesignToken101, un semántico apunta siempre a un primitivo. Casi siempre: hay cuatro tokens semánticos con un valor propio. En esta lección verás cuáles son, por qué cada uno es una excepción y cómo se controla una excepción para que no acabe siendo un valor suelto con nombre de token.
En esta página
- La regla
- Las cuatro excepciones
- Sin escala a la que apuntar
- Un alias no cambia la opacidad
- Cómo se controla una excepción
- Lo que te llevas
La regla
Recomendación
En DesignToken101, los semánticos son siempre alias de un primitivo, nunca valores directos. Así, todo valor del sistema está en la colección de primitivos, y para saber de dónde sale un color o una medida basta con seguir el alias.
La regla es nuestra. DTCG permite que cualquier token tenga un valor propio o una referencia, sin distinguir capas (Format Module: Groups). Figma tampoco obliga a nada: una variable de cualquier colección puede tener un valor o un alias.
Las cuatro excepciones
| Token | Valor | Colección | Por qué no es alias |
|---|---|---|---|
size/content/max-width | 960 px | Semantic size | No hay escala de tamaños |
size/sidebar/width | 304 px | Semantic size | No hay escala de tamaños |
color/background/overlay | color/black al 50 % | Semantic color | Necesita una opacidad que el primitivo no tiene |
color/background/neutral/translucent | white al 96 % en Light, neutral/950 al 90 % en Dark | Semantic color | Igual que el anterior, y además cambia con el modo |
Sin escala a la que apuntar
Los dos tamaños de maquetación podrían ser alias si existiera una escala size/* de primitivos. No existe porque hay dos valores y ninguno se repite: crear una escala para ellos sería crear primitivos que usaría un único token cada uno.
Recomendación
Si aparecen más tamaños de maquetación y empiezan a compartir valores, se crea la escala y estos tokens pasan a ser alias. Mientras tanto, un valor directo con nombre semántico es más claro que una escala inventada para justificarlo.
Un alias no cambia la opacidad
La capa que oscurece la página al abrir el menú en móvil es negra, con un 50 % de opacidad. El primitivo color/black existe, pero es negro opaco.
- En Figma, un alias apunta a otra variable, y la ayuda no describe ninguna forma de modificar el valor de destino (Figma: Create and manage variables). No hay forma de decir "este primitivo, pero al 50 %".
- En DTCG, la sintaxis de llaves tampoco: apunta al valor completo de un token (Format Module: Curly brace syntax).
Así que el token lleva el color completo, con su opacidad, como valor propio. DesignToken101 no tiene tokens de opacidad: la transparencia va dentro del color, en su propiedad alpha (Tipos simples).
Nota
DTCG 2025.10 tiene una segunda sintaxis, $ref, que apunta a una parte de un valor. Su propio ejemplo construye un color tomando dos componentes de otro token y escribiendo el tercero a mano (Format Module: JSON Pointer syntax). Con ella, un color podría reutilizar los componentes de color/black y fijar su propio alpha.
Lo probamos con la herramienta que genera el CSS de esta web, Terrazzo 2.7.1. Resuelve $ref: el overlay sale como #00000080, y si color/black cambia, el overlay cambia con él. Pero sus páginas sobre los tokens no mencionan $ref dentro de un valor (Terrazzo: DTCG Tokens, Token Types), y el CSS lleva el valor ya calculado, no una referencia a color/black.
Recomendación
DesignToken101 mantiene estos colores como valores directos. Figma no exporta $ref, así que habría que escribirlos a mano fuera de Figma; la herramienta lo admite sin documentarlo, y el CSS final sería el mismo.
El fondo de la cabecera añade una dificultad: es blanco al 96 % en Light y neutral/950 al 90 % en Dark. Un valor directo distinto por modo, y también con una opacidad distinta: la de Light se subió al 96 % para que el anillo de foco contraste lo suficiente sobre la cabecera (Contraste de lo que no es texto). En Figma es una variable de la colección Semantic color con un valor propio en cada columna, Light y Dark. Cómo se unen los modos en código lo verás en el módulo De Figma al código.
Cómo se controla una excepción
Una excepción sin control acaba siendo un valor suelto con nombre de token. En DesignToken101, cada valor directo cumple tres condiciones:
- Tiene un motivo registrado. Cada una está en el registro de decisiones del proyecto, con la fecha y el porqué.
- Lo dice su descripción. La descripción del token explica que es un valor directo y por qué, para quien lo encuentre en Figma o en el JSON.
- Tiene una salida prevista. Los tamaños pasarán a ser alias si aparece una escala; los colores, si una herramienta permite derivar la opacidad.
Así exporta Figma el overlay en DTCG (comprobado en la exportación de esta web, tokens/figma/semantic-color/). El $value es un color completo: la opacidad va en alpha, y el hex tiene seis cifras, sin ella. La $description explica la excepción:
color/background/overlay en la exportación de Figma (abreviado)
"overlay": {
"$type": "color",
"$value": {
"colorSpace": "srgb",
"components": [0, 0, 0],
"alpha": 0.5,
"hex": "#000000"
},
"$description": "… color/black al 50 %, igual en Light y Dark. Valor directo: un alias de Figma no puede cambiar la opacidad."
}En el CSS generado sale como #00000080: el hex de ocho cifras lleva la opacidad en las dos últimas.
El fondo de la cabecera en Dark muestra un detalle de la exportación. Figma escribe la opacidad como un número de coma flotante de 32 bits, y el 90 % no es exacto en ese formato: llega como "alpha": 0.8999999761581421. Convertido tal cual, daría #050c09e5 (89,8 %) en vez de #050c09e6 (90 %). El paso que prepara la exportación para el CSS de esta web recupera el valor escrito en Figma, 0.9. Lo verás en el módulo De Figma al código.
Lo que te llevas
- La regla: un semántico es siempre un alias de un primitivo.
- Las excepciones son tamaños sin escala y colores con opacidad, porque un alias de Figma no cambia la opacidad.
- Cada excepción lleva su motivo registrado, lo dice en su descripción y tiene una salida prevista.