tailwindcss-theming icon indicating copy to clipboard operation
tailwindcss-theming copied to clipboard

CSS-variables-based swappable themes for Tailwind CSS

Tailwind CSS Theming GitHub release NPM release Top Language

Note: Even though it should support Tailwind 2, I didn't thoroughly tested it. I plan to do it when I have time, and probably rewrite a bunch of stuff in order to improve quality of life and enable usage with Tailwind Play. The next version will probably be the actual v3, with breaking changes from the current beta. Knowing that, and although the plugin is perfectly fine, you may want to check out the alternatives. Thanks!

Table of contents

  • Introduction
  • Quick start
  • Plugin configuration
    • Changing the theme file
    • Changing the strategy
    • Using a preset
    • Using variants
  • Configuring your themes
    • Creating a theme
      • Colors
      • Variants
      • Extending Tailwind's configuration with CSS variables
      • Name and targetability
    • Exporting your themes
      • Default theme
      • Default dark theme
      • Default light theme
      • Additional themes
  • Presets
    • Nord
    • Nord Vanilla
    • Tailwind CSS Vanilla
  • Upgrade guide
  • Compatibility
  • Alternatives

Introduction

Note - This plugin works with Tailwind CSS v1.2 upwards.

tailwindcss-theming is a Tailwind CSS plugin made to solve the common need to have multiple themes in an application. It is also perfect for making dark themes.

It uses CSS Custom Properties in order to make your themes interchangeable on the client-side. Swapping themes is as simple as changing a class of your body element. See an example in CodeSandbox.

Moreoever, this plugin has full support for the prefers-color-scheme media query, so you can define a theme that will automatically be picked based on browser preferences.

Get started:

$ yarn add tailwindcss-theming@next --dev

Compatibility

This plugin is based on CSS Custom Properties, which are not compatible with IE11. You can have partial support for the browsers that do not support them by using a PostCSS plugin that add a fallback for CSS variables, such as postcss-css-variables or postcss-custom-properties.

Keep in mind that only your default theme will work with that method.

Alternatives

This plugin is feature-complete, but some alternatives exist. If you're looking for a simpler approach, a different kind of configuration, or just want to know the alternatives, here is a list that you may find useful:

A more complete comparison of the different theming plugins can be found here.