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

2023-11-17

源码下载

点击跳转: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实现深色模式

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

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

  • React js Stripe 结账不起作用

    我正在尝试在 React js 应用程序中呈现条带结账默认表单
  • 从数据 URI 解码 QR 码

    我尝试从数据 uri 中解码二维码 var dataUri data image gif base64 R0lGODdh9gD2AIAAAAAAAP ywAAAAA9gD2AAAC decodeQrCode dataUri cb 我已经尝试
  • 每 3 秒重复一次动画

    我正在使用 WOW js 和 animate css 现在我正在将 CSS 运行到 Infinite 我想知道如何让我的课程运行 3 秒停止并再次开始到无限 My html img src images fork png class for
  • 不和谐机器人 |不和谐.js |类型错误:无法读取未定义的属性“长度”

    我正在制作一个 Discord 机器人 并且正在使用 CodeLyon 的视频作为参考 该错误位于我的 message js 文件中 该文件包含以下内容 require dotenv config create cooldowns map
  • 如何重定向到 instagram://user?username={username}

    我的 html 页面上有这个链接 可以在特定用户上打开 Instagram 应用程序 a href Link to Instagram Profile a 我一直在寻找自动运行 url instagram user username USE
  • 使用 useReducers 调度函数发送多个操作?

    使用时是否可以通过调度函数发送多个动作useReducer挂钩反应 我尝试向它传递一组操作 但这会引发未处理的运行时异常 明确地说 通常会有一个初始状态对象和一个减速器 如下所示 const initialState message1 nu
  • jQuery AJAX 调用 Java 方法

    使用 jQuery AJAX 我们可以调用特定的 JAVA 方法 例如从 Action 类 该 Java 方法返回的数据将用于填充一些 HTML 代码 请告诉我是否可以使用 jQuery 轻松完成此操作 就像在 DWR 中一样 此外 对于
  • 检查 JavaScript 字符串是否为 URL

    JavaScript 有没有办法检查字符串是否是 URL 正则表达式被排除在外 因为 URL 很可能是这样写的stackoverflow 也就是说它可能没有 com www or http 如果你想检查一个字符串是否是有效的 HTTP UR
  • 音频 blob 的 URL.createObjectURL 在 Firefox 中给出 TypeError

    我正在尝试从创建的音频 blob 创建对象 URLgetUserMedia 该代码在 Chrome 中可以运行 但在 Firefox 中存在问题 错误 当我打电话时stopAudioRecorder 它停在audio player src
  • 在requestAnimationFrame中使用clearRect不显示动画

    我正在尝试在 HTML5 画布上做一个简单的 javascript 动画 现在我的画布是分层的 这样当我收到鼠标事件时 背景层不会改变 但带有头像的顶层会移动 如果我使用 requestAnimationFrame 并且不清除屏幕 我会看到
  • 提交表单并重定向页面

    我在 SO 上看到了很多与此相关的其他问题 但没有一个对我有用 我正在尝试提交POST表单 然后将用户重定向到另一个页面 但我无法同时实现这两种情况 我可以获取重定向或帖子 但不能同时获取两者 这是我现在所拥有的
  • 为 illustrator 导出脚本以保存为 web jpg

    任何人都可以帮我为 illustrator CC2017 编写一个脚本 将文件以 JPG 格式导出到网络 旧版 然后保存文件并关闭 我有 700 个文件 每个文件有 2 个画板 单击 文件 gt 导出 gt 另存为 Web 旧版 然后右键文
  • 为什么在 Internet Explorer 中访问 localStorage 对象会引发错误?

    我正在解决一个客户端问题 Modernizr 意外地没有检测到对localStorageInternet Explorer 9 中的对象 我的页面正确使用 HTML 5 文档类型 并且开发人员工具报告该页面具有 IE9 的浏览器模式和 IE
  • 有没有办法阻止 prettier / prettier-now 将函数参数分解为新行

    当使用 prettier prettier now 在保存时进行格式化时 当一个函数包装另一个函数时 它会中断到一个新行 我想知道是否有办法阻止这种行为 例如 期望的输出 app get campgrounds id catchAsync
  • 在 vue.js 中访问数组对象属性

    给定以下数组vue js packageMaps Object packageMap 0 Object Id 16 PackageType flag list ProductCode F BannerBase packageMap 1 Ob
  • 条件在反应本机生产中失败,但在开发中有效

    我创建了一个反应本机应用程序 我需要通过它进行比较 如果属实 就会执行死刑 问题是 该条件适用于 React Native 开发模式 而不适用于 React Native 生产版本 我使用 firebase 作为数据库 也使用 redux
  • 如何更改此 jquery 插件的时区/时间戳?

    我正在使用这个名为 timeago 的插件 在这里找到 timeago yarp com 它工作得很好 只是它在似乎不同的时区运行 我住在美国东部 费城时区 当我将准确的 EST 时间放入 timeago 插件时 比如 2011 05 28
  • JQuery 图像上传不适用于未来的活动

    我希望我的用户可以通过帖子上传图像 因此 每个回复表单都有一个上传表单 用户可以通过单击上传按钮上传图像 然后单击提交来提交帖子 现在我的上传表单可以上传第一个回复的图像 但第二个回复的上传不起作用 我的提交过程 Ajax 在 php 提交
  • 如何获取浏览器视口中当前显示的内容

    如何获取当前正在显示长文档的哪一部分的指示 例如 如果我的 html 包含 1 000 行 1 2 3 9991000 并且用户位于显示第 500 行的中间附近 那么我想得到 500 n501 n502 或类似的内容 显然 大多数场景都会比
  • 使用 Ajax 请求作为源数据的 Jquery 自动完成搜索

    我想做的事 我想使用 jquery 自动完成函数创建一个输入文本字段 该函数从跨域curl 请求获取源数据 结果应该与此示例完全相同 CSS 在这里并不重要 http abload de img jquerydblf5 png http a

随机推荐

  • STM32F1各个工作状态下的工作电流

    低功耗操作实验 文章非原创 从其他网站上摘录 如果侵犯到到 麻烦联系删除 实验目的 测量 STM32 在各种状态下的功耗 包括在不同时钟频率下 32M 8M 1M 100K 10K 不同振荡器 内部 外部 不同模式 活动 睡眠 停机 待机
  • 经纬度查询_查询经纬度并自动转换格式(升级版)附带下载

    链接 https pan baidu com s 1Ysjwdu9griOXzw50RvfF1A 提取码 iwvv 链接 https share weiyun com 8ECyYM8g 密码 bwqmk8 1 史上最齐全的CAD下载资源 2
  • 二进制方式部署kubernetes集群

    二进制方式部署kubernetes集群 1 部署k8s常见的几种方式 1 1 kubeadm Kubeadm 是一个 k8s 部署工具 提供 kubeadm init 和 kubeadm join 用于快速部署 Kubernetes 集群
  • [python]多线程socket端口探测(包含top50-1000)

    这个脚本是基于tcp的 以下链接是基于tcp udp的自动切换的脚本 比这个脚本方便多了 实现UDP TCP的多线程端口探测 包含TOP 50 1000 sGanYu的博客 CSDN博客 多线程扫描工具 import optparse im
  • 数学建模常用的四大模型

    目录 1 评价模型 2 优化模型 3 分类模型 4 预测模型 本文主要介绍数学建模的四大模型分类 分别是评价模型 优化模型 分类模型 预测模型 关注公众号 数模乐园 回复 买 获得更多数模教程 1 评价模型 评价模型可以处理难于完全定量分析
  • ftp服务器查看所有文件夹,查看ftp服务器所有文件夹

    查看ftp服务器所有文件夹 内容精选 换一换 对于本文档的应用示例 查看 HOME tools projects Custom Engine main cpp中所需输入数据如下所示 ASIC场景 以root用户登录Host侧服务器 在 ho
  • R大数定律(Python切比雪夫不等式验证大数定律)模拟圆周率

    大数定律 在概率论中 大数定律 LLN 是描述大量执行相同实验的结果的定理 根据规律 大量试验所得结果的平均值应接近预期值 并随着试验次数的增加而趋于接近预期值 LLN 很重要 因为它保证了一些随机事件的平均值的长期稳定结果 例如 虽然赌场
  • 【Hive】Hive分区表

    分区作为一种提高数据操作灵活性的手段 被广泛应用于关系型数据库中 在Hive中我们同样可以采用分区的方式来提高数据操作效率 不同于关系型数据库 如Oracle Hive的分区表既可以是内部表 也可以是外部表 本篇文章主要介绍如何在Hive中
  • ValueError:optimizer got an empty parameter list 的一个可能错误

    ValueError optimizer got an empty parameter list基本都跟 init 及其里面的代码有关 比如下划线打错了 init拼错了 没有super 没在 init 函数内定义网络等 本次具体如下 今天有
  • 计数排序基础思路

    所谓计数排序 也可以称为散列表 也是一种简单的哈希桶 今天 小编带大家来了解计数排序的基本思路 一 基本思路 以升序为例 计数排序通俗来讲 分为三个步骤 首先制作包含所有要排序的数的桶 相同的数制作一个桶即可 以2 3 6 1 4 1 2
  • eclipse如何配置Maven

    Maven 翻译为 专家 内行 是 Apache 下的一个纯 Java 开发的开源项目 基于项目对象模型 缩写 POM 概念 Maven利用一个中央信息片断能管理一个项目的构建 报告和文档等步骤 Maven 是一个项目管理工具 可以对 Ja
  • C++:unique_ptr

    Code C program to illustrate the use of unique ptr include
  • Go_一文入门网络编程:常见协议、通信过程、Socket、CS/BS、TCP/UDP

    网络编程三要素 ip地址 端口 协议 在网络通信协议下 不同计算机上运行的程序 可以进行数据传输 IP地址 IP地址是一种在互联网协议中用于识别和定位设备的32位或128位数字地址 它是一个设备在网络上的唯一标识符 用于在互联网上定位和识别
  • 【房价网房价信息爬虫】整站40万条房价数据并行抓取,可更换抓取城市

    写在前面 学习数据采集 先转载下来 之后在学习 这次的爬虫是关于房价信息的抓取 目的在于练习10万以上的数据处理及整站式抓取 数据量的提升最直观的感觉便是对函数逻辑要求的提高 针对Python的特性 谨慎的选择数据结构 以往小数据量的抓取
  • git fetch merge rebase squash

    合并分类 在合并分支的时候 默认是有三种选项的 分别是 普通的 merge squash merge rebase merge 区分 merge 和 rebase 更多参考GIT使用rebase和merge的正确姿势 准备 假设我们有如下图
  • Java异常 (throwable)

    异常主要是error和exception两种 throwable的两个子类 1 Error类及其子类 代表的是Error类及其子类 代表的是jvm本身的错误 错误不能被程序通过代码处理 2 Exception类及其子类 一般都是程序写错了
  • 韦东山和正点原子IMX6ULL开发版的区别

    网卡驱动复位引脚硬件区别 网卡 复位脚 厂家 io 网卡0 SNVS TAMPER9 100ask gpio5 IO9 网卡1 SNVS TAMPER6 100ask gpio5 IO6 网卡0 SNVS TAMPER7 正点原子 gpio
  • 平头哥(T-Head )开源RISCV处理器OpenC906 RTL仿真

    在过去的几年里 阿里集团平头哥陆续推出了几款RISCV处理器 有些处理器已经在产业界得到了应用 比如在某志的D1处理器中 就嵌入了平头哥的玄铁C906内核为 芯 RISCV虽然是一个开放标准 并且网络上也不乏一些开源核的RTL实现 但是商用
  • 布局-ConstrainLayout

    Relative positioning 相对位置 layout constraintLeft toLeftOf 将所需视图的左边与另一个视图的左边对齐 layout constraintLeft toRightOf 将所需视图的左边与另一
  • Vue中使用TailwindCSS实现深色模式(跟随系统和手动控制)

    Vue中使用TailwindCSS实现深色模式 跟随系统和手动控制 源码下载 先贴一下手动控制的成品效果 创建VUE工程 初始化 Tailwind CSS 安装 Tailwind 以及其它依赖项 创建配置文件 在 CSS 中引入 Tailw