admin管理员组文章数量:1416305
I have a button that changes the theme color on navBar and it's working. When I click the button, the background color changes faster then the text colors. The "Home", "Cadastros", "Dash", "Notas" changes first than the icons and whatever is rendered in Outlet inside the MainLayout Demonstration
Relevant codes
index.css
@tailwind base;
@tailwind components;
@tailwind utilities;
* {
@apply transition-all duration-300;
}
.lightTheme {
--background: 250, 250, 250;
--text: 0, 0, 0;
--title: 0, 0, 0;
--navBarShadow: 2, 6, 23, 0.1;
}
.darkTheme {
--background: 15, 23, 42;
--text: 250, 250, 250;
--title: 250, 250, 250;
--navBarShadow: 2, 6, 23, 0.2;
}
NavBar.jsx
import { Moon, Sun, User } from "lucide-react";
function NavBar({theme, onChangeThemeClick}) {
const themeIcon = theme === 'lightTheme' ? <Sun /> : <Moon />;
return (
<nav className={` ${theme} w-full h-15 absolute z-10 top-0 bg-background text-title p-4 shadow-navBarShadow shadow-lg `}>
<ul className="flex space-x-10 bg justify-end ">
<li ><a href="#" >Home</a></li>
<li><a href="#">Cadastros</a></li>
<li><a href="#">Dash</a></li>
<li><a href="#">Notas</a></li>
<li onClick={() => onChangeThemeClick()}><a href="#">
{themeIcon}
</a></li>
<li ><a href="#">
<User />
</a></li>
</ul>
</nav>
);
}
export default NavBar;
MainContainer.jsx
function MainContainer({theme, children}){
return(
<div className={`${theme} pt-20 z-0 w-full h-screen bg-background`}>
{children}
</div>
)
}
export default MainContainer;
RegistrationsTable.jsx
function RegistrationsTable() {
return(
<div className="w-1/2 h-max bg-background text-text border-text">
<table>
<tbody>
<tr>
<td>
<p>adad</p>
</td>
</tr>
</tbody>
</table>
</div>
)
}
export default RegistrationsTable;
RegistrationsPage.jsx
import RegistrationsTable from "../components/RegistrationsTable.jsx";
function RegistrationsPage() {
return (
<>
<RegistrationsTable />
</>
);
}
export default RegistrationsPage;
MainLayout.jsx
import { useState } from 'react'
import NavBar from '../components/NavBar.jsx'
import { Outlet } from 'react-router-dom'
import MainContainer from "../components/MainContainer.jsx";
function MainLayout() {
const [theme, setTheme] = useState('lightTheme')
function onChangeThemeClick() {
if (theme === 'lightTheme'){
setTheme('darkTheme')
} else if (theme === 'darkTheme'){
setTheme('lightTheme')
}
}
return (
<>
<NavBar theme={theme} onChangeThemeClick={onChangeThemeClick} />
<MainContainer theme={theme}>
<Outlet />
</MainContainer>
</>
)
}
export default MainLayout
tailwind.config.js
/** @type {import('tailwindcss').Config} */
export default {
content: ["./index.html", "./src/**/*.{html,js,jsx,ts,tsx}"],
theme: {
extend: {
colors: {
//Theme colors
background: "rgba(var(--background))",
text: "rgba(var(--text))",
title: "rgba(var(--title))",
navBarShadow: "rgba(var(--navBarShadow))",
},
},
},
plugins: [],
};
I tried to apply the transition duration to dark and light theme but doesn't work. Like this:
@tailwind base;
@tailwind components;
@tailwind utilities;
.lightTheme {
--background: 250, 250, 250;
--text: 0, 0, 0;
--title: 0, 0, 0;
--navBarShadow: 2, 6, 23, 0.1;
@apply transition-all duration-300;
}
.darkTheme {
--background: 15, 23, 42;
--text: 250, 250, 250;
--title: 250, 250, 250;
--navBarShadow: 2, 6, 23, 0.2;
@apply transition-all duration-300;
}
Tried to pass theme variable trough the Outlet to use it in ClassName, but doesn't work too
I have a button that changes the theme color on navBar and it's working. When I click the button, the background color changes faster then the text colors. The "Home", "Cadastros", "Dash", "Notas" changes first than the icons and whatever is rendered in Outlet inside the MainLayout Demonstration
Relevant codes
index.css
@tailwind base;
@tailwind components;
@tailwind utilities;
* {
@apply transition-all duration-300;
}
.lightTheme {
--background: 250, 250, 250;
--text: 0, 0, 0;
--title: 0, 0, 0;
--navBarShadow: 2, 6, 23, 0.1;
}
.darkTheme {
--background: 15, 23, 42;
--text: 250, 250, 250;
--title: 250, 250, 250;
--navBarShadow: 2, 6, 23, 0.2;
}
NavBar.jsx
import { Moon, Sun, User } from "lucide-react";
function NavBar({theme, onChangeThemeClick}) {
const themeIcon = theme === 'lightTheme' ? <Sun /> : <Moon />;
return (
<nav className={` ${theme} w-full h-15 absolute z-10 top-0 bg-background text-title p-4 shadow-navBarShadow shadow-lg `}>
<ul className="flex space-x-10 bg justify-end ">
<li ><a href="#" >Home</a></li>
<li><a href="#">Cadastros</a></li>
<li><a href="#">Dash</a></li>
<li><a href="#">Notas</a></li>
<li onClick={() => onChangeThemeClick()}><a href="#">
{themeIcon}
</a></li>
<li ><a href="#">
<User />
</a></li>
</ul>
</nav>
);
}
export default NavBar;
MainContainer.jsx
function MainContainer({theme, children}){
return(
<div className={`${theme} pt-20 z-0 w-full h-screen bg-background`}>
{children}
</div>
)
}
export default MainContainer;
RegistrationsTable.jsx
function RegistrationsTable() {
return(
<div className="w-1/2 h-max bg-background text-text border-text">
<table>
<tbody>
<tr>
<td>
<p>adad</p>
</td>
</tr>
</tbody>
</table>
</div>
)
}
export default RegistrationsTable;
RegistrationsPage.jsx
import RegistrationsTable from "../components/RegistrationsTable.jsx";
function RegistrationsPage() {
return (
<>
<RegistrationsTable />
</>
);
}
export default RegistrationsPage;
MainLayout.jsx
import { useState } from 'react'
import NavBar from '../components/NavBar.jsx'
import { Outlet } from 'react-router-dom'
import MainContainer from "../components/MainContainer.jsx";
function MainLayout() {
const [theme, setTheme] = useState('lightTheme')
function onChangeThemeClick() {
if (theme === 'lightTheme'){
setTheme('darkTheme')
} else if (theme === 'darkTheme'){
setTheme('lightTheme')
}
}
return (
<>
<NavBar theme={theme} onChangeThemeClick={onChangeThemeClick} />
<MainContainer theme={theme}>
<Outlet />
</MainContainer>
</>
)
}
export default MainLayout
tailwind.config.js
/** @type {import('tailwindcss').Config} */
export default {
content: ["./index.html", "./src/**/*.{html,js,jsx,ts,tsx}"],
theme: {
extend: {
colors: {
//Theme colors
background: "rgba(var(--background))",
text: "rgba(var(--text))",
title: "rgba(var(--title))",
navBarShadow: "rgba(var(--navBarShadow))",
},
},
},
plugins: [],
};
I tried to apply the transition duration to dark and light theme but doesn't work. Like this:
@tailwind base;
@tailwind components;
@tailwind utilities;
.lightTheme {
--background: 250, 250, 250;
--text: 0, 0, 0;
--title: 0, 0, 0;
--navBarShadow: 2, 6, 23, 0.1;
@apply transition-all duration-300;
}
.darkTheme {
--background: 15, 23, 42;
--text: 250, 250, 250;
--title: 250, 250, 250;
--navBarShadow: 2, 6, 23, 0.2;
@apply transition-all duration-300;
}
Tried to pass theme variable trough the Outlet to use it in ClassName, but doesn't work too
Share Improve this question asked Feb 2 at 22:35 LuckkksLuckkks 231 silver badge7 bronze badges1 Answer
Reset to default 1Elements that don't have an explicit color
set have inherit
as their effective value. This means that the element resolves its value from its parent:
<div style="color: blue">
I am blue.
<p>I am blue also because I inherit from parent.</p>
</div>
In Chromium-based browsers (and as per your screencast, Opera is based on Chromium), when a parent's color
value is switched, it seems like child elements with inherit
value get the new value after transitions happen, and then switch their own resolved value, playing their own transition, thus causing the cascading delay.
Thus, you could consider only applying the color
transition to element(s) that don't have inherit
as a value for color
. So:
- Change your
*
rule to only transition color properties that are notcolor
:* { transition: theme(transitionDuration.DEFAULT) theme(transitionTimingFunction.DEFAULT); transition-property: var(--transition-properties); --transition-properties: background-color, border-color; }
- Transition
color
for the top-level only:.lightTheme, .darkTheme { transition-property: color, var(--transition-properties); }
- And transition
color
for elements that have theircolor
property explicitly set:<div className="… text-text … transition-color">
tailwind.config = {
theme: {
extend: {
colors: {
//Theme colors
background: "rgba(var(--background))",
text: "rgba(var(--text))",
title: "rgba(var(--title))",
navBarShadow: "rgba(var(--navBarShadow))",
},
},
},
};
<script src="https://cdn.tailwindcss/3.4.15"></script>
<style type="text/tailwindcss">
* {
transition: theme(transitionDuration.DEFAULT) theme(transitionTimingFunction.DEFAULT);
transition-property: var(--transition-properties);
--transition-properties: background-color, border-color;
}
.lightTheme {
--background: 250, 250, 250;
--text: 0, 0, 0;
--title: 0, 0, 0;
--navBarShadow: 2, 6, 23, 0.1;
}
.darkTheme {
--background: 15, 23, 42;
--text: 250, 250, 250;
--title: 250, 250, 250;
--navBarShadow: 2, 6, 23, 0.2;
}
.lightTheme, .darkTheme {
transition-property: color, var(--transition-properties);
}
</style>
<div id="app"></div>
<script src="https://unpkg/@babel/[email protected]"></script>
<script type="text/babel" data-type="module">
import React from "https://esm.sh/[email protected]";
import client from "https://esm.sh/[email protected]/client";
import { Moon, Sun, User } from "https://esm.sh/[email protected]";
import { BrowserRouter, Routes, Route, Outlet } from "https://esm.sh/[email protected]";
function NavBar({ theme, onChangeThemeClick }) {
const themeIcon = theme === "lightTheme" ? <Sun /> : <Moon />;
return (
<nav
className={` ${theme} w-full h-15 absolute z-10 top-0 bg-background text-title p-4 shadow-navBarShadow shadow-lg `}
>
<ul className="flex space-x-10 bg justify-end ">
<li>
<a href="#">Home</a>
</li>
<li>
<a href="#">Cadastros</a>
</li>
<li>
<a href="#">Dash</a>
</li>
<li>
<a href="#">Notas</a>
</li>
<li onClick={() => onChangeThemeClick()}>
<a href="#">{themeIcon}</a>
</li>
<li>
<a href="#">
<User />
</a>
</li>
</ul>
</nav>
);
}
function MainContainer({ theme, children }) {
return (
<div className={`${theme} pt-20 z-0 w-full h-screen bg-background`}>
{children}
</div>
);
}
function RegistrationsTable() {
return (
<div className="w-1/2 h-max bg-background text-text border-text transition-color">
<table>
<tbody>
<tr>
<td>
<p>adad</p>
</td>
</tr>
</tbody>
</table>
</div>
);
}
function RegistrationsPage() {
return (
<>
<RegistrationsTable />
</>
);
}
const { useState } = React;
function MainLayout() {
const [theme, setTheme] = useState("lightTheme");
function onChangeThemeClick() {
if (theme === "lightTheme") {
setTheme("darkTheme");
} else if (theme === "darkTheme") {
setTheme("lightTheme");
}
}
return (
<>
<NavBar theme={theme} onChangeThemeClick={onChangeThemeClick} />
<MainContainer theme={theme}>
<Outlet />
</MainContainer>
</>
);
}
client.createRoot(document.getElementById('app')).render(
<BrowserRouter>
<Routes>
<Route path="/" element={<MainLayout />}>
<Route path="js" element={<RegistrationsPage />} />
</Route>
</Routes>
</BrowserRouter>
);
</script>
本文标签: cssthe transitioncolor aren39t working correctlyStack Overflow
版权声明:本文标题:css - the transition-color aren't working correctly - Stack Overflow 内容由网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://www.betaflare.com/web/1745254591a2650023.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论