All Projects → crswll → tailwindcss-theme-swapper

crswll / tailwindcss-theme-swapper

Licence: other
A helper for getting tailwind values into css custom properties and switching them between media queries and classes. You can try it out here: https://play.tailwindcss.com/a16eJQSf4a

Programming Languages

javascript
184084 projects - #8 most used programming language

Projects that are alternatives of or similar to tailwindcss-theme-swapper

react-native-whirlwind
Whirlwind is a utility-first styling framework specifically designed for React Native. It is heavily inspired by Tachyons and Tailwind CSS and uses low-level building blocks for rapidly building custom designs.
Stars: ✭ 91 (-20.87%)
Mutual labels:  tailwindcss
jekyll-atlantic-theme
Jekyll Atlantic is a beautiful Tailwind CSS theme. It shows best practices for using Tailwind with Jekyll.
Stars: ✭ 40 (-65.22%)
Mutual labels:  tailwindcss
wave
Wave - The Software as a Service Starter Kit, designed to help you build the SAAS of your dreams 🚀 💰
Stars: ✭ 3,646 (+3070.43%)
Mutual labels:  tailwindcss
pingping
Building a real world SaaS with Laravel, TailwindCSS and VueJS
Stars: ✭ 97 (-15.65%)
Mutual labels:  tailwindcss
explorer
A Blockchain Explorer for ARK using Vue.js and Tailwind CSS.
Stars: ✭ 108 (-6.09%)
Mutual labels:  tailwindcss
laravel-mix-tailwindcss-purgecss
Minimal Boilerplate for building static pages based on Laravel Mix 6, TailwindCSS 3, PostCSS 8, and ES6 Vanilla JS components.
Stars: ✭ 15 (-86.96%)
Mutual labels:  tailwindcss
Limg
An image hosting service powered by Laravel
Stars: ✭ 41 (-64.35%)
Mutual labels:  tailwindcss
vite-ts-tailwind-starter
Opinionated Vite + Vue 3 + TypeScript + Tailwind CSS starter template w/ tests and CI.
Stars: ✭ 228 (+98.26%)
Mutual labels:  tailwindcss
stencil-tailwind-plugin
Plugin for using tailwindcss with StencilJS
Stars: ✭ 17 (-85.22%)
Mutual labels:  tailwindcss
variantwind
Most elegant way to work with TailwindCSS variants in Vue
Stars: ✭ 45 (-60.87%)
Mutual labels:  tailwindcss
react-storefront
An open-source storefront in React.js with Next.js. Built for Headless Commerce, using a modern stack with TypeScript, GraphQL, Apollo, and Tailwind CSS.
Stars: ✭ 265 (+130.43%)
Mutual labels:  tailwindcss
twin.examples
Packed with examples for different frameworks, this repo helps you get started with twin a whole lot faster.
Stars: ✭ 320 (+178.26%)
Mutual labels:  tailwindcss
Events-based-organizational-website
The official codebase for college-based (event managing) organizations. FOUR-LEVEL Authorization system and scalable.
Stars: ✭ 14 (-87.83%)
Mutual labels:  tailwindcss
react-datepicker
A Datepicker built using Tailwind and react-popper
Stars: ✭ 31 (-73.04%)
Mutual labels:  tailwindcss
tailwindcss-postcss-browsersync-boilerplate
Tailwind CSS + PostCSS + BrowserSync boilerplate
Stars: ✭ 28 (-75.65%)
Mutual labels:  tailwindcss
headlesscommerce.org
Headless Commerce resources
Stars: ✭ 25 (-78.26%)
Mutual labels:  tailwindcss
bento
A minimalist theme for Hugo, build with Tailwind CSS - https://bento-hugo-theme.netlify.app/
Stars: ✭ 58 (-49.57%)
Mutual labels:  tailwindcss
substrate-docs
Substrate Developer Hub. Substrate is powered by best in class cryptographic research and comes with peer to peer networking, consensus mechanisms, and much more.
Stars: ✭ 63 (-45.22%)
Mutual labels:  tailwindcss
angular-authentication
An Angular application that demonstrates best practices for user authentication & authorization flows.
Stars: ✭ 122 (+6.09%)
Mutual labels:  tailwindcss
starter-simba
Lion-based Design System
Stars: ✭ 18 (-84.35%)
Mutual labels:  tailwindcss

tailwindcss-theme-swapper

Extend your tailwind config with CSS Custom Properties and trigger the updating of them with any type of selector or media query.

Requirements

  • Tailwind 1.2

Browser Support

Just needs to support CSS Custom Properties. IE11 can kind of work but only the base theme with something like postcss-preset-env.

Installation

yarn add tailwindcss-theme-swapper
# or
npm install tailwindcss-theme-swapper --save-dev

Try It Out

Minimal

https://play.tailwindcss.com/a16eJQSf4a

Fancier (radix colors, multiple themes)

https://play.tailwindcss.com/jskI9McL20

Usage Example

In your tailwind.config.js:

const themeSwapper = require('tailwindcss-theme-swapper')

module.exports = {
  plugins: [
    themeSwapper({
      themes: [
        // The only required theme is `base`. Every property used in
        // other themes must exist in here.
        {
          name: 'base',
          selectors: [':root'],
          theme: {
            colors: {
              primary: '#f00',
            },
          },
        },
        {
          name: 'dark',
          selectors: ['.dark'],
          mediaQuery: '@media (prefers-color-scheme: dark)',
          theme: {
            colors: {
              primary: '#fff',
            },
          },
        },
        {
          name: 'matrix',
          selectors: ['.matrix'],
          theme: {
            colors: {
              primary: '#0f0',
            },
          },
        },
      ],
    }),
  ],
}

Theme Swapper Properties

{
  // The name of the theme. You only have to name `base`.
  name: 'dark',

  // Apply one of these selectors(?) to an element and all of its children to use that theme.
  // `<div class="dark">`, `<div data-theme="dark">`, `<div dark>`
  selectors: ['.dark', '[data-theme="dark"]', '[dark]', ],

  // If this media query matches the theme will apply to the entire page.
  mediaQuery: '@media (prefers-color-scheme: dark)',

  // This extends your tailwind theme.
  // Only keys/values defined here will be made into custom properties.
  theme: {
    colors: {
      // ...
    },
    spacing: {
      // ...
    },
    borderRadius: {
      // ...
    },
  },
}

Example I:O

Themes Input

const themes = [
  {
    name: 'base',
    selectors: [':root'],
    theme: {
      colors: {
        primary: '#222',
      },
    },
  },
  {
    name: 'dark',
    selectors: [
      '.dark',
      '[dark]',
      '[data-theme="dark"]'
    ],
    mediaQuery: '@media (prefers-color-scheme: dark)',
    theme: {
      colors: {
        primary: '#ddd',
      },
    },
  },
  {
    name: 'high-contrast',
    mediaQuery: '@media (prefers-contrast: high)',
    theme: {
      colors: {
        primary: '#ddd',
      },
    },
  },
]

CSS Output

:root {
  --colors-primary: 34 34 34
}

@media (prefers-color-scheme: dark) {
  :root {
    --colors-primary: 221 221 221
  }
}

.dark, [dark], [data-theme="dark"] {
  --colors-primary: 221 221 221
}

@media (prefers-contrast: high) {
  :root {
    --colors-primary: 255 255 255
  }
}

/* ... */

.text-primary {
  --tw-text-opacity: 1;
  color: rgb(var(--colors-primary) / var(--tw-text-opacity));
}

.bg-primary {
  --tw-bg-opacity: 1;
  background-color: rgb(var(--colors-primary) / var(--tw-bg-opacity));
}

.border-primary {
  --tw-border-opacity: 1;
  border-color: rgb(var(--colors-primary) / var(--tw-border-opacity));
}
Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].