Saltar al contenido

Relaciones

Semánticos de color

Cómo pasar de la lista de usos a tokens semánticos de color, los de DesignToken101 con su primitivo en Light y en Dark, por qué varios semánticos pueden apuntar al mismo primitivo y cuándo se añade uno nuevo.

Última revisión:

El color es la capa semántica más grande de DesignToken101 y la que mejor muestra para qué sirven los alias. En esta lección verás cómo se pasa de una lista de usos a tokens semánticos, cuáles tiene esta web y a qué primitivo apunta cada uno, y qué decide ese primitivo.

En esta página

Del uso al token

En el ejercicio del módulo 2 anotaste qué primitivo usa cada elemento de tu diseño. Esa lista es el punto de partida. Así sería un fragmento de la de DesignToken101:

Dónde aparecePrimitivo
Fondo de la páginacolor/white
Fondo de los bloques de códigocolor/neutral/50
Fondo de las tarjetascolor/neutral/50
Texto del cuerpocolor/neutral/900
Texto de los enlacescolor/emerald/700

Un token semántico no nombra un elemento, sino una función. Los bloques de código y las tarjetas comparten función (una superficie un poco distinta del fondo de la página), así que comparten token: color/background/neutral/subtle. Si dos usos tienen el mismo primitivo y la misma función, son un solo token. Si tienen el mismo primitivo y funciones distintas, son dos tokens: lo verás en Varios semánticos, un primitivo.

Nota

En esta lección usamos los nombres de DesignToken101 sin explicar cómo se construyen. Por qué empiezan por la propiedad y qué significa cada nivel lo verás en el módulo Nombrar, en Dos escuelas y La convención de DesignToken101.

Fondo, texto y borde

Cada semántico de color dice a qué propiedad se aplica: background (fondo), text (texto) o border (borde). Los iconos usan los tokens de texto de su contexto; no hay propiedad icon.

Separar la propiedad tiene dos consecuencias prácticas:

  • En Figma, cada propiedad tiene su scope. Un token de texto aparece al elegir el color de un texto o de una forma, y no al elegir el relleno de un marco. Lo verás en Las colecciones semánticas.
  • El contraste se comprueba por pares. Un texto se mide contra el fondo sobre el que va. Con la propiedad en el nombre, cada par se lee directamente: text/neutral/default sobre background/neutral/default.

Light y Dark, lo justo

La colección de los semánticos de color tiene dos modos, Light y Dark. Cada modo puede apuntar a un primitivo distinto:

TokenLightDark
color/text/neutral/defaultneutral/900neutral/50

El nombre que aplicas al diseño es el mismo en los dos modos. Lo que cambia es el destino del alias. Es la razón de ser de la capa semántica: sin ella, cambiar de tema sería cambiar cada elemento del diseño. Cómo se crean y se aplican los modos lo verás en el módulo Modos y temas, en Crear los modos en Figma y Aplicar los modos al diseño. En este módulo, basta con leer las dos columnas de las tablas.

Los semánticos de color de DesignToken101

Son 33 tokens en la colección Semantic color de Figma. En esta lección están los de base. Los de estado (hover, active, seleccionado y foco) los verás en Estados, y dos tokens con transparencia, en Cuando un semántico no es alias.

Neutros: la estructura de la página.

TokenLightDarkUso
color/background/neutral/defaultwhiteneutral/950Fondo de la página
color/background/neutral/subtleneutral/50neutral/900Tarjetas, bloques de código, Callout pendiente
color/background/neutral/strongneutral/100neutral/800Superficies con más énfasis, como el grupo del selector de tema de la cabecera
color/text/neutral/defaultneutral/900neutral/50Texto principal
color/text/neutral/subtleneutral/600neutral/400Texto secundario
color/border/neutral/defaultneutral/200neutral/800Separadores y bordes decorativos
color/border/neutral/strongneutral/500neutral/500Bordes que identifican algo y necesitan contraste

Acento: el color de la marca.

TokenLightDarkUso
color/text/accent/defaultemerald/700emerald/400Enlaces; icono y etiqueta del Callout de recomendación
color/background/accent/subtleemerald/50emerald/950Fondo tintado: Callout de recomendación, pasos de los gráficos
color/background/accent/strong/defaultemerald/500emerald/500Botón principal
color/text/on-accentneutral/950neutral/950Texto sobre el botón principal
color/border/accent/defaultemerald/300emerald/700Borde del Callout de recomendación (decorativo)

Mensajes: información, éxito, aviso y error. Los cuatro roles siguen el mismo patrón de tres tokens (fondo, borde y texto):

TokenLightDarkUso
color/background/info/subtleblue/50blue/950Fondo del Callout de nota
color/border/info/defaultblue/300blue/700Borde del Callout de nota
color/text/info/defaultblue/700blue/300Icono y etiqueta del Callout de nota
color/background/success/subtleemerald/50emerald/950Sin uso todavía
color/border/success/defaultemerald/300emerald/700Sin uso todavía
color/text/success/defaultemerald/700emerald/300Mensaje "Copiado" del bloque de código
color/background/warning/subtleamber/50amber/950Fondo del Callout de aviso
color/border/warning/defaultamber/300amber/700Borde del Callout de aviso
color/text/warning/defaultamber/700amber/300Icono y etiqueta del Callout de aviso
color/background/danger/subtlered/50red/950Sin uso todavía
color/border/danger/defaultred/300red/700Sin uso todavía
color/text/danger/defaultred/700red/300Sin uso todavía

El rol de error se llama danger, como en el SDS de Figma (SDS: theme.css) y en Atlassian (Atlassian: Design tokens). El éxito usa la escala emerald, la de la marca; viste por qué en Escalas de estado.

Nota

Los valores completos, con su hex, están en la especificación del sistema, que es la fuente de esta tabla. Las tres decisiones más visibles (el tratamiento del botón principal, el fondo de Light y el de Dark) se cerraron al ver el diseño, y se pueden reabrir cambiando un alias y volviendo a comprobar el contraste.

El contraste decide el paso

En el módulo 2 viste qué pasos de cada escala sirven para texto (Lo que la escala dice sobre su uso). La capa semántica es donde se toma la decisión. Un ejemplo, el texto de los enlaces:

  1. 50, #F2FCF7
  2. 100, #E1F9EE
  3. 200, #C4F3DD
  4. 300, #93EAC5
  5. 400, #4FD7A6
  6. 500, #33CC99
  7. 600, #0EA075
  8. 700, #1A7D5C, text/accent/default en Light
  9. 800, #1F624A
  10. 900, #1F503E
  11. 950, #0D2C20
Escala emerald: en Light, el texto de los enlaces apunta al paso 700, no al color de marca.
  • El color de marca, emerald/500, no sirve para texto sobre blanco: 2,05:1. WCAG 2.2 pide 4,5:1 para el texto normal (Understanding 1.4.3).
  • emerald/700 sí: 5,08:1 sobre blanco. Por eso color/text/accent/default apunta a él en Light.
  • En Dark se invierte: sobre neutral/950 el 700 se queda en 3,89:1, y el 400 llega a 10,92:1. Por eso Dark apunta al 400.

El botón principal hace lo contrario: mantiene el color de marca de fondo y cambia el texto. Con texto blanco no llegaría a 4,5:1; con color/text/on-accent (neutral/950), llega a 9,63:1. Los tokens on- existen para eso: nombran el texto que va sobre un fondo de color fuerte, y cada par se comprueba junto.

Recomendación

En DesignToken101, cada alias de texto se elige comprobando su contraste con el fondo con el que se usa, en Light y en Dark. Si cambias un alias, vuelves a comprobar el par. Es una regla nuestra; los umbrales son de WCAG 2.2. Cómo se comprueba con detalle lo verás en el módulo Accesibilidad (Contraste de texto).

Varios semánticos, un primitivo

emerald/700 aparece en cuatro tokens:

PrimitivoTokenModo
emerald/700color/text/accent/defaultLight
emerald/700color/text/success/defaultLight
emerald/700color/border/accent/defaultDark
emerald/700color/border/success/defaultDark

No es una repetición: son cuatro decisiones que hoy coinciden. Si mañana el éxito necesita otro verde, cambias los alias de success y el acento no se mueve. Si los fundieras en un solo token, separarlos después obligaría a revisar cada elemento del diseño que lo usa.

La regla de la primera sección, en una frase: un token por función, aunque el valor coincida.

Un token nuevo cuando hace falta

Los semánticos de color no salieron todos a la vez. color/border/accent/default se añadió al diseñar el Callout de recomendación: los demás Callout tenían borde de su color, y este no tenía token. Se creó cuando el componente lo pidió, no antes.

Hay una excepción, decidida a sabiendas. Hoy, los tokens de danger y el fondo y el borde de success no tienen ningún uso en la web: se crearon con el resto de la tabla, como un juego completo de mensajes. Se mantienen porque la web los usará más adelante. Es una excepción al criterio, y está registrada como tal.

Recomendación

Crea un semántico cuando un uso real lo necesita, como viste con el espaciado en el módulo 2 (un sistema tan grande como lo que resuelve). Una matriz completa (todas las propiedades por todos los roles y todos los énfasis) da tokens que nadie usa y que alguien tiene que mantener.

En Figma

En DesignToken101, los semánticos de color están en su propia colección, Semantic color, con los modos Light y Dark. Cada variable se crea así (Figma: Create and manage variables):

  1. Crea una variable Color con el nombre completo, por ejemplo color/text/accent/default.
  2. En la columna Light, haz clic derecho sobre el valor, elige Create alias y busca color/emerald/700.
  3. Repite en la columna Dark con color/emerald/400.
  4. Escribe en la descripción para qué se usa. En DesignToken101, "Enlaces y texto de acento". La descripción llega a la exportación como $description.

El scope y la visibilidad de estas variables los verás en Las colecciones semánticas. Las crearás para tu sistema en el módulo Nombrar, ya con su nombre definitivo (Crear las variables en Figma).

Lo que te llevas

  • Un semántico nombra una función, no un elemento: un token por función, aunque el valor coincida.
  • Cada modo puede apuntar a un primitivo distinto; el nombre que aplicas no cambia.
  • El contraste decide a qué paso apunta cada texto.

Fuentes