Skip to content

ewgenius/tailwindcss-variable-themes

Repository files navigation

tailwindcss-variable-themes

TailwindCSS plugin for setting up multiple themes based on css variables

CleanShot 2023-01-27 at 00 09 22@2x

Examples

https://tailwindcss-variable-themes.vercel.app/custom (code)

https://tailwindcss-variable-themes.vercel.app/radix-colors (code)

https://tailwindcss-variable-themes.vercel.app/radix-semantic (code)

https://tailwindcss-variable-themes.vercel.app/tailwind-colors (code)

Installation

Install the plugin from npm:

npm install -D tailwindcss-variable-themes

Then add the plugin to your tailwind.config.js file:

const tailwindThemePlugin = require("tailwindcss-variable-themes");

module.exports = {
  theme: {
    // ...
  },
  plugins: [
    tailwindThemePlugin({
      themes: {
        light: {
          primary: {
            foreground: "#000",
            background: "#fff",
            // ...
          },
          accent: {
            // ...
          },
        },

        dark: {
          // ...
        },
      },
    }),
  ],
};

Add theme class to the root of your application:

<body class="theme-light">
  <!-- ... -->
</body>

Configuration

themes: object (required)

Dictionary with theme declarations

themes: {
  // light theme
  light: {
    // primary palette
    primary: {
      // primary palette colors
      foreground: "#000",
      background: "#fff",
      // ...
    },
    // accent palette
    accent: {
      // ...
    },
  },

  dark: {
    primary: {
      foreground: "#fff",
      background: "#000",
      // ...
    }
    // ...
  },
},

utilityPrefix: string (optional, default = "theme")

Prefix for generated utility classes

Theme, from previous example will generate following tailwind classes for setting up theme:

.theme-light {
  --primary-foreground: #000;
  --primary-background: #fff;
  /* ... */
}

.theme-dark {
  --primary-foreground: #fff;
  --primary-background: #000;
  /* ... */
}

varNameMapper: (key: string, i?: number) => string (optional, default = (key) => key)

You can specify custom mapper, in case if you need more control over generated variable names

About

TailwindCSS plugin for defining themes based on css variables

Resources

License

Stars

Watchers

Forks

Packages

No packages published