使用变量 SASS 在 VueJs 中实现暗模式的正确方法是什么
what's the proper way to implement darkmode in VueJs with SASS using variables
如果我使用 sass 和 VueJS
,暗模式切换功能的最佳实现是什么
我有一个带有 sass 个颜色变量的项目。
/* variables */
/* ------------- */
$bg-main: #f8f8f8;
$btn-secondary-c: #f6f6f6;
$bg-items: #fff;
$text-c-1: #625f6e;
$text-c-2: #5e5873;
$color-main: #6e6b7b;
$shadow-c: rgba(34, 41, 47, 0.05);
/* ------- */
并且它有自己的文件并且全局作用于我的 vue 应用程序
src
--components
--assets
----_variables.scss
我的 Vue 组件是以 SFC(单文件组件)样式创建的,就像这样
<template>
<main>
<div class="content-wrapper">
<ProductsSection/>
</div>
</main>
</template>
<script>
import ProductsSection from "./ProductsSection.vue"
export default {
name: 'MainSection',
components: {
ProductsSection,
},
}
</script>
<style lang="scss" scoped>
.content-wrapper{
background-color: $bg-main;
}
</style>
我的问题是这种情况的最佳实施方式是什么?
我很喜欢修改html属性:
// index.html
<html lang="en" data-theme="dark">
...
</html>
// App.vue
<template>
<button @click="changeTheme('light')">light theme</button>
<button @click="changeTheme('dark')">dark theme</button>
</template>
<script>
methods: {
changeTheme(newTheme) {
document.documentElement.setAttribute('data-theme', newTheme)
}
}
</script>
<style lang="scss">
@import "./assets/style.scss";
</style>
// style.scss
[data-theme="dark"] {
--bg-color1: #121416;
--font-color: #f4f4f4;
}
[data-theme="light"] {
--bg-color1: #f4f4f4;
--font-color: #121416;
}
...
body {
background-color: var(--bg-color1);
color: var(--font-color);
}
我希望你明白了
如果我使用 sass 和 VueJS
,暗模式切换功能的最佳实现是什么
我有一个带有 sass 个颜色变量的项目。
/* variables */
/* ------------- */
$bg-main: #f8f8f8;
$btn-secondary-c: #f6f6f6;
$bg-items: #fff;
$text-c-1: #625f6e;
$text-c-2: #5e5873;
$color-main: #6e6b7b;
$shadow-c: rgba(34, 41, 47, 0.05);
/* ------- */
并且它有自己的文件并且全局作用于我的 vue 应用程序
src
--components
--assets
----_variables.scss
我的 Vue 组件是以 SFC(单文件组件)样式创建的,就像这样
<template>
<main>
<div class="content-wrapper">
<ProductsSection/>
</div>
</main>
</template>
<script>
import ProductsSection from "./ProductsSection.vue"
export default {
name: 'MainSection',
components: {
ProductsSection,
},
}
</script>
<style lang="scss" scoped>
.content-wrapper{
background-color: $bg-main;
}
</style>
我的问题是这种情况的最佳实施方式是什么?
我很喜欢修改html属性:
// index.html
<html lang="en" data-theme="dark">
...
</html>
// App.vue
<template>
<button @click="changeTheme('light')">light theme</button>
<button @click="changeTheme('dark')">dark theme</button>
</template>
<script>
methods: {
changeTheme(newTheme) {
document.documentElement.setAttribute('data-theme', newTheme)
}
}
</script>
<style lang="scss">
@import "./assets/style.scss";
</style>
// style.scss
[data-theme="dark"] {
--bg-color1: #121416;
--font-color: #f4f4f4;
}
[data-theme="light"] {
--bg-color1: #f4f4f4;
--font-color: #121416;
}
...
body {
background-color: var(--bg-color1);
color: var(--font-color);
}
我希望你明白了