【发布时间】:2021-11-01 04:21:00
【问题描述】:
在选中 ::before{} 伪元素复选框时应用附加样式表的解决方案是什么?一旦我提供了 checked={checked} 属性,附加的样式表就可以工作了
export const ThemeSwithcer: FC = () => {
const [checked, setChecked] = useState(false);
useEffect(() => {
if (localStorage.getItem('theme') === 'theme-dark') {
setTheme('theme-dark');
setChecked(false);
} else {
setTheme('theme-light');
setChecked(true);
}
}, [checked]);
const setTheme = (themeName: string) => {
localStorage.setItem('theme', themeName);
document.documentElement.className = themeName;
}
const themeChangeHandler = (e: React.ChangeEvent<HTMLInputElement>) => {
if (localStorage.getItem('theme') === 'theme-dark') {
setTheme('theme-light');
} else {
setTheme('theme-dark');
}
}
return (
<label className="Theme-Switcher">
<input className="Theme-Switcher-Util" type="checkbox" onChange={themeChangeHandler} checked={checked} />
<span className="Theme-Switcher-Slider round"></span>
</label>
);
}
&:checked + .Theme-Switcher-Slider:before {
-webkit-transform: translateX(24px);
-ms-transform: translateX(24px);
transform: translateX(24px);
background: white url('https://i.ibb.co/7JfqXxB/sunny.png');
background-repeat: no-repeat;
background-position: center;
}
【问题讨论】:
标签: reactjs typescript sass stylesheet