-
-
Notifications
You must be signed in to change notification settings - Fork 188
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Set color-scheme: dark with Tailwind and custom themes #221
Comments
@sspenst I made a theme called
I don't know if that's what you're looking for but it did the job for my use-case. |
@CSpencerND your comment gave me some inspiration to try this again and I finally got it working. The difficulty for my case is that I want two classes:
next-themes allows mapping custom themes to different class names, but in my case I need to map each class to multiple class names. I think my implementation could be a lot simpler if this was a feature: <ThemeProvider
attribute='class'
themes={Object.values(Theme)}
value={{
[Theme.Modern]: ['dark', 'theme-modern'],
[Theme.Light]: ['light', 'theme-light'],
...
}}
> What I ended up doing was creating a new attribute darkMode: [
'class',
'[data-theme-dark="true"]',
], I then used the idea from #77 (comment) to update the color-scheme: [data-theme-dark="true"] {
color-scheme: dark;
} Finally, for dark mode to work instantly I had to add the following script: <script dangerouslySetInnerHTML={{
__html: `
!function() {
const theme = localStorage.getItem('theme');
// set data-theme-dark for Tailwind dark classes
document.documentElement.setAttribute('data-theme-dark', theme === 'theme-light' ? 'false' : 'true');
// check for an invalid theme and default to theme-modern
// ThemeProvider doesn't handle this case with defaultTheme so we have to do it manually here
if (!${JSON.stringify(Object.values(Theme))}.includes(theme)) {
localStorage.setItem('theme', 'theme-modern');
}
}();
`,
}} /> It would be great if there was a simple way to do this with next-themes, but for now this seems to get the job done. |
Hi. Here's something more generic for this part if anyone sees this: html[data-theme$="dark"] { // $= to indicate that the theme name ends with "dark"
color-scheme: dark;
}
html[data-theme^="dark"] // ^= for starts with
html[data-theme*="dark"] // *= for contains More on here. Basically any dark theme. |
This is not related to the library. |
I have a bunch of themes on my site and I'd like to get it so I can use
dark:
Tailwind classes with specific themes. In the snippet below I would liketheme-modern
to be a dark mode theme:I saw your post here so I've been trying the following with no luck yet:
Wondering if Tailwind is supported for this use case or if I'm missing a step somewhere. Thanks!
The text was updated successfully, but these errors were encountered: