Dos variables CSS para el mismo color en React MUI

Estaba revisando un PR y frené en estas dos líneas de un componente de React:

border-top: 2px solid var(--mui-palette-error-main);
background-color: rgb(var(--mui-palette-error-mainChannel) / 0.2);

, mismo color. Dos variables distintas. La primera, --mui-palette-error-main, devuelve un hex: #E81010. La segunda, mainChannel, devuelve solo los canales: 232 16 16.

Me pareció redundante. Probé a cambiar mainChannel por main. En el borde funcionaba. En el fondo, no. no puedes meter un hex dentro de rgb(var(...) / 0.2) y esperar que el navegador le calcule la opacidad. El formato no encaja.

Ahí está el truco. Con cssVariables: true, MUI genera las dos versiones a propósito. main para el color sólido. mainChannel para cuando necesitas el mismo tono pero más transparente — borde al 100%, fondo al 20%, en el ejemplo.

Lo bueno es que si cambias el theme o pasas a dark mode, las dos siguen sincronizadas. Nada de hardcodear hex ni tirar de alpha() en JS.

Hoy ya lo miro y me parece obvio. Ayer me costó cinco minutos y un paseo por DevTools.


Comparte