unocss-preset-colors-rgb v1.0.0
unocss-preset-colors-rgb
This UnoCSS preset converts your theme colors to RGB CSS variables for increased flexibility and control over your styles.
Installation
npm i -D unocss-preset-colors-rgb
yarn i -D unocss-preset-colors-rgb
pnpm i -D unocss-preset-colors-rgbWhy
If you have multiple themes controlled by CSS variables and you want to use the default color preset of UnoCSS, you might encounter issues with opacity modifier syntax.
:root {
  --theme-content: theme('colors.black');
}
.dark {
  --theme-content: theme('colors.white');
}You can use something like text-$theme-content successfully, but you cannot use an opacity modifier syntax like text-$theme-content/50. To resolve this issue, you should declare it inside theme.color first.
// Warning: this is incorrect code.
defineConfig({
  theme: {
    colors: {
      content: 'rgba(var(--theme-content), <alpha-value>)'
    }
  }
})However, this won't work because you can only use RGB values (e.g., 255, 255, 255) for the --theme-content CSS variable.
Usage
This preset must work with theme() from the default UnoCSS transformerDirectives transformer.
import { defineConfig, transformerDirectives } from 'unocss'
import presetColorsRGB from 'unocss-preset-colors-rgb'
export default defineConfig({
  presets: [
    presetColorsRGB(),
  ],
  transformers: [
    transformerDirectives(),
  ]
})This preset helps you convert all of the theme colors (including all default preset colors) into RGB values (theme.rgbs). So, you can declare the CSS variable as theme('rgbs.<color>') to make it work.
/* style.css */
:root {
  --theme-base: theme('rgbs.blue.100');
  --theme-content: theme('rgbs.black');
}
.dark {
  --theme-base: theme('rgbs.blue.900');
  --theme-content: theme('rgbs.white');
}// uno.config.ts
defineConfig({
  theme: {
    colors: {
      base: 'rgba(var(--theme-base), <alpha-value>)',
      content: 'rgba(var(--theme-content), <alpha-value>)'
    }
  }
})<div class="bg-base/75 text-content">
  Hello <span class="bg-base text-content/50">World</span>
</div>License
MIT License