几周前我做了完全相同的项目。
这是我的代码
切换组件
<template>
<div class="toggle-wrapper">
<label class="switch">
<input
type="checkbox"
:checked="mode === 'dark' ? 'checked' : false"
id="togBtn"
@change="$emit('toggle')"
/>
<div class="slider round"></div>
</label>
</div>
</template>
<script>
export default {
props: ["mode"],
};
</script>
<style>
.toggle-wrapper {
display: flex;
align-items: center;
position: absolute;
height: 60px;
width: 70px;
margin-left: 0.5em;
}
.switch {
position: absolute;
display: inline-block;
width: 70px;
height: 34px;
}
.switch input {
display: none;
}
.slider {
position: absolute;
cursor: pointer;
top: 0;
left: 0;
right: 0;
bottom: 0;
background-color: #41b883;
-webkit-transition: 1s;
transition: 1s;
border-radius: 34px;
}
.slider:before {
position: absolute;
content: "";
height: 26px;
width: 26px;
left: 4px;
bottom: 4px;
background-color: white;
-webkit-transition: 1s;
transition: 1s;
border-radius: 50%;
}
input:checked + .slider {
background-color: #35495e;
}
input:checked + .slider:before {
background-color: #19222c;
}
input:checked + .slider:before {
-webkit-transform: translateX(26px);
-ms-transform: translateX(26px);
transform: translateX(36px);
}
/*------ ADDED CSS ---------*/
.slider:after {
content: "LIGHT";
color: white;
display: block;
position: absolute;
transform: translate(-50%, -50%);
top: 18px;
left: 4.75em;
font-size: 10px;
transition: 1s;
}
input:checked + .slider:after {
content: "DARK";
left: 2.3em;
transition: 1s;
}
</style>
应用组件
你想要在你的应用组件中做的就是将主题声明为一个类,例如:
<template>
<div class="app" :class="mode">
<Header :mode="mode" @toggle="toggle" />
</div>
</template>
<script>
import Header from "@/components/Header";
export default {
name: "app",
data() {
return {
mode: "light",
};
},
components: {
Header,
},
methods: {
toggle() {
if (this.mode === "dark") {
this.mode = "light";
} else {
this.mode = "dark";
}
},
},
};
</script>
Header 组件
如您所见,我的切换组件在标题组件内,这是标题:
<template>
<header>
<Toggle :mode="mode" @toggle="$emit('toggle')" />
<nav>
<router-link :to="{ name: 'Home' }" class="nav-link">Home</router-link>
<router-link :to="{ name: 'About' }" class="nav-link">About</router-link>
<router-link :to="{ name: 'Library' }" class="nav-link"
>Library</router-link
>
<router-link :to="{ name: 'Create' }" class="nav-link"
>Create</router-link
>
<router-link :to="{ name: 'Code Editor' }" class="nav-link"
>Code Editor</router-link
>
</nav>
<router-view />
</header>
</template>
<script>
import Toggle from "@/components/Toggle";
export default {
props: ["mode"],
components: {
Toggle,
},
};
</script>
总结
现在你的类是暗色或亮色,你可以开始造型了。
例如:
// Dark Mode
.dark {
background: #15202b;
color: #e8e8e8;
}
// Light Mode
.light {
background: white;
color: #15202b;
}
哦,是的,顺便说一句,是西班牙语或俄语,甚至可能是意大利语。告诉我!
希望我能帮到你一点,结果会很精彩!