Vue中使用TailwindCSS实现深色模式(跟随系统和手动控制)

该博客介绍了如何在Vue项目中使用TailwindCSS设置深色模式,包括手动切换和跟随系统模式。首先,创建Vue项目并初始化TailwindCSS,接着配置tailwind.config.cjs以支持深色模式。在CSS中引入Tailwind样式,并在main.js中导入。然后在App.vue组件中通过事件切换深色模式。最后,展示了如何根据系统设置自动切换深色模式。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

源码下载

点击跳转:https://github.com/weijianpeng18421/csdn_tailwindcss.git

先贴一下手动控制的成品效果

正常模式(通过以下两个按钮点击切换):
正常模式
深色模式:
深色模式

创建VUE工程

如果您还没有建立一个新的 Vue+Vite 项目,请先创建一个新的项目。

npm init vite my-project
cd my-project

接下来,使用 npm 安装 Vite 的前端依赖关系

npm install

初始化 Tailwind CSS

Tailwind CSS 需要 Node.js 12.13.0 或更高版本。‎

安装 Tailwind 以及其它依赖项

npm install -D tailwindcss@latest postcss@latest autoprefixer@latest

创建配置文件

接下来,生成您的 tailwind.config.js 和 postcss.config.js 文件:

npx tailwindcss init -p

这将会在您的项目根目录创建一个最小化的 tailwind.config.js 文件(注意html文件的位置):

// tailwind.config.js

/** @type {import('tailwindcss').Config} */
module.exports = {
  content: [
    "./index.html",
    "./src/**/*.{vue,js,ts,jsx,tsx}",
  ],
  // media:跟随系统(win10在个性化-颜色-选择默认应用模式  中修改)   class:手动通过事件改变
  darkMode: 'class', // or 'media' or 'class'
  theme: {
    extend: {},
  },
  plugins: [],
  variants: {
    extend: {}
  },
}

在 CSS 中引入 Tailwind

创建 ./src/assets/css/tailwind.css文件 并使用 @tailwind 指令来包含 Tailwind的 base、 components 和 utilities 样式,来替换掉原来的文件内容。

/* ./src/tailwind.css */
@tailwind base;
@tailwind components;
@tailwind utilities;

将CSS 文件被导入到 ./src/main.js 文件中

// src/main.js
import { createApp } from 'vue'
import './style.css'
import App from './App.vue'

import './assets/css/tailwind.css'

createApp(App).mount('#app')

在app.vue中手动设置深色模式页面及逻辑(切记tailwind.config.cjs中的darkMode为’class’)

<template>
  <div class="h-full bg-white dark:bg-slate-800 px-6 py-8 ring-1 ring-slate-900/5 shadow-xl">
    <div>
      <div class="flex items-stretch justify-center">
        <div class="px-16 py-4 bg-cyan-400 dark:bg-indigo-500 shadow-lg shadow-cyan-500/50 text-white rounded-md m-1">
          Flex01
        </div>
        <div
            class="self-auto bg-cyan-400 dark:bg-indigo-500 shadow-lg shadow-cyan-500/50 px-16 py-4 text-white rounded-md m-1">
          Flex02
        </div>
        <div class="px-16 py-4 bg-cyan-400 dark:bg-indigo-500 shadow-lg shadow-cyan-500/50 text-white m-1 rounded-md">
          Flex03
        </div>
      </div>
      <div class="my-20">
        <button class="text-white px-2.5 py-1.5 mx-10 bg-cyan-500 shadow-lg shadow-cyan-500/50 rounded-md"
                @click="lightMode">普通模式
        </button>
        <button class="text-white px-2.5 py-1.5 mx-10 bg-blue-500 shadow-lg shadow-blue-500/50 rounded-md"
                @click="darkMode">暗黑模式
        </button>
      </div>
    </div>
  </div>
</template>

<script setup>
const darkMode = () => {
  //这个条件用于判断当前系统应用模式是否开启了“暗”模式(win10在   个性化-颜色-选择默认应用模式  中修改)
  // if (localStorage.theme === 'dark' || (!('theme' in localStorage) && window.matchMedia('(prefers-color-scheme: dark)').matches)) {
  if (localStorage.theme === 'dark' || (!('theme' in localStorage))) {
    document.documentElement.classList.add('dark')
  } else {
    document.documentElement.classList.remove('dark')
  }

  localStorage.theme = 'light'

  localStorage.theme = 'dark'

  localStorage.removeItem('theme')
}
const lightMode = () => {
  document.documentElement.classList.remove('dark')
}
</script>

跟随系统变化

跟随系统变化只需在引入TailwindCSS后设置tailwind.config.cjs中的darkMode为’media’,然后在“个性化”中切换“颜色”中的“选择默认应用模式”即可看到效果。

/** @type {import('tailwindcss').Config} */
module.exports = {
  content: [
    "./index.html",
    "./src/**/*.{vue,js,ts,jsx,tsx}",
  ],
  // media:跟随系统(win10在个性化-颜色-选择默认应用模式  中修改)   class:手动通过事件改变
  darkMode: 'media', // or 'media' or 'class'
  theme: {
    extend: {},
  },
  plugins: [],
  variants: {
    extend: {}
  },
}

win10设置深色模式

Vue中使用TailwindCSS实现深色模式

出现这个错误的原因是在导入seaborn包时,无法从typing模块中导入名为'Protocol'的对象。 解决这个问题的方法有以下几种: 1. 检查你的Python版本是否符合seaborn包的要求,如果不符合,尝试更新Python版本。 2. 检查你的环境中是否安装了typing_extensions包,如果没有安装,可以使用以下命令安装:pip install typing_extensions。 3. 如果你使用的是Python 3.8版本以下的版本,你可以尝试使用typing_extensions包来代替typing模块来解决该问题。 4. 检查你的代码是否正确导入了seaborn包,并且没有其他导入错误。 5. 如果以上方法都无法解决问题,可以尝试在你的代码中使用其他的可替代包或者更新seaborn包的版本来解决该问题。 总结: 出现ImportError: cannot import name 'Protocol' from 'typing'错误的原因可能是由于Python版本不兼容、缺少typing_extensions包或者导入错误等原因造成的。可以根据具体情况尝试上述方法来解决该问题。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [ImportError: cannot import name ‘Literal‘ from ‘typing‘ (D:\Anaconda\envs\tensorflow\lib\typing....](https://blog.youkuaiyun.com/yuhaix/article/details/124528628)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值