Skip to content

TailwindCSS Integration

vue-multiple-themes provides dedicated plugins for both TailwindCSS v3 and v4 with full opacity modifier support.

Why a Dedicated Plugin?

Tailwind's opacity modifiers (bg-primary/50) require CSS variables in RGB channel format (59 130 246), not regular color values. vue-multiple-themes automatically generates both formats:

css
/* Generated automatically */
:root[data-theme="light"] {
  --vmt-primary: 59 130 246;           /* RGB channels for Tailwind */
  --vmt-primary-color: rgb(59 130 246); /* Full color for direct CSS use */
}

Tailwind v3

1. Configure the plugin

js
// tailwind.config.js
const vmtPlugin = require('vue-multiple-themes/tailwind')

module.exports = {
  plugins: [
    vmtPlugin({
      themes: require('./src/themes').default,
      cssVarPrefix: '--vmt-',
    }),
  ],
}

2. Use in templates

html
<div class="bg-vmt-background text-vmt-text">
  <button class="bg-vmt-primary/90 hover:bg-vmt-primary text-vmt-text-inverse">
    Click me
  </button>
  <p class="text-vmt-text-muted border-vmt-border/50">
    Muted text with semi-transparent border
  </p>
</div>

Tailwind v4

js
// tailwind.config.js (v4)
import vmtPlugin from 'vue-multiple-themes/tailwind-v4'

export default {
  plugins: [
    vmtPlugin({
      themes: myThemes,
      cssVarPrefix: '--vmt-',
    }),
  ],
}

Available Utility Classes

All semantic tokens are available as Tailwind utilities:

CSS VariableTailwind ClassWith Opacity
--vmt-primarybg-vmt-primarybg-vmt-primary/50
--vmt-backgroundbg-vmt-backgroundbg-vmt-background/80
--vmt-texttext-vmt-texttext-vmt-text/70
--vmt-borderborder-vmt-borderborder-vmt-border/30
--vmt-surfacebg-vmt-surfacebg-vmt-surface/90
--vmt-ringring-vmt-ringring-vmt-ring/50

Custom tokens in your themes are also automatically available.

Released under the MIT License.