vue3+TS 整合element-plus+tailwindcss
vue3TS 整合element-plus和tailwindcss1. 安装依赖npminstallelement-plus element-plus/icons-vue vueuse/corenpminstall-Dtailwindcss tailwindcss/vite sass2. Vite 配置vite.config.tsimport{defineConfig}fromviteimportvuefromvitejs/plugin-vueimporttailwindcssfromtailwindcss/viteexportdefaultdefineConfig({plugins:[vue(),tailwindcss(),],})3. 全局样式文件src/style.css/* 使用 tailwindcss/vite 方式导入 */importtailwindcss;/* 配置暗色模式 */custom-variantdark(:where(.dark,.dark *));/* 全局过渡动画 */*{transition:background-color 0.3s ease,color 0.3s ease,border-color 0.3s ease;}/* 滚动条样式 */::-webkit-scrollbar{width:8px;height:8px;}::-webkit-scrollbar-track{background:#f1f1f1;}.dark ::-webkit-scrollbar-track{background:#2a2a2a;}::-webkit-scrollbar-thumb{background:#888;border-radius:4px;}.dark ::-webkit-scrollbar-thumb{background:#555;}::-webkit-scrollbar-thumb:hover{background:#555;}.dark ::-webkit-scrollbar-thumb:hover{background:#666;}4. 主题 Composablesrc/composables/useTheme.tsimport{useDark,useToggle,usePreferredDark}fromvueuse/coreimport{computed,watch,typeRef}fromvuetypeThemeModelight|dark|autointerfaceUseThemeReturn{isDark:RefbooleanthemeMode:RefThemeModetoggleTheme:()voidsetThemeMode:(mode:ThemeMode)void}exportfunctionuseTheme():UseThemeReturn{constpreferredDarkusePreferredDark()constisDarkuseDark({storageKey:theme-mode,valueDark:dark,valueLight:light,})constthemeModecomputedThemeMode({get:(){constsavedlocalStorage.getItem(theme-mode)asThemeMode|nullif(savedlight||saveddark){returnsaved}returnauto},set:(mode:ThemeMode){if(modeauto){localStorage.removeItem(theme-mode)isDark.valuepreferredDark.value}else{localStorage.setItem(theme-mode,mode)isDark.valuemodedark}}})consttoggleThemeuseToggle(isDark)constsetThemeMode(mode:ThemeMode):void{themeMode.valuemode}watch(preferredDark,(newVal){if(themeMode.valueauto){isDark.valuenewVal}})return{isDark,themeMode,toggleTheme,setThemeMode,}}5. Element Plus 暗色主题配置src/styles/element-dark.scss// Element Plus 暗色主题自定义 html.dark { --el-bg-color: #1a1a1a; --el-bg-color-overlay: #1d1d1d; --el-text-color-primary: #e5e5e5; --el-text-color-regular: #cfcfcf; --el-border-color: #4c4d4f; --el-fill-color: #2a2a2a; --el-fill-color-light: #333333; --el-fill-color-lighter: #3a3a3a; --el-fill-color-extra-light: #404040; --el-box-shadow: 0 2px 12px 0 rgba(0, 0, 0, 0.3); }6. 主题切换组件src/components/ThemeToggle.vuetemplate el-switch v-modelisDark :active-iconMoon :inactive-iconSunny changetoggleTheme classtheme-switch / /template script setup langts import { computed } from vue import { Moon, Sunny } from element-plus/icons-vue import { useTheme } from /composables/useTheme const { isDark, toggleTheme } useTheme() /script style scoped .theme-switch { --el-switch-off-color: #409eff; --el-switch-on-color: #303030; } /style7. 主题选择器组件下拉菜单src/components/ThemeSelector.vuetemplate el-dropdown commandhandleCommand div classflex items-center cursor-pointer p-2 hover:bg-gray-200 dark:hover:bg-gray-700 rounded-lg el-icon :size20 component :iscurrentIcon / /el-icon span classml-2 text-sm hidden sm:inline {{ currentTheme dark ? 暗色 : 亮色 }} /span /div template #dropdown el-dropdown-menu el-dropdown-item commandlight el-iconSunny //el-icon span classml-2亮色/span /el-dropdown-item el-dropdown-item commanddark el-iconMoon //el-icon span classml-2暗色/span /el-dropdown-item el-dropdown-item commandauto el-iconMonitor //el-icon span classml-2跟随系统/span /el-dropdown-item /el-dropdown-menu /template /el-dropdown /template script setup langts import { computed } from vue import { Sunny, Moon, Monitor } from element-plus/icons-vue import { useTheme } from /composables/useTheme const { isDark, themeMode, setThemeMode } useTheme() const currentIcon computed(() { if (themeMode.value auto) return Monitor return isDark.value ? Moon : Sunny }) const currentTheme computed(() { if (themeMode.value auto) return auto return isDark.value ? dark : light }) const handleCommand (command: light | dark | auto): void { setThemeMode(command) } /script8. 主应用文件src/App.vuetemplate div classmin-h-screen bg-white dark:bg-gray-900 transition-colors duration-300 !-- 顶部导航栏 -- header classbg-gray-100 dark:bg-gray-800 shadow-md p-4 transition-colors duration-300 div classcontainer mx-auto flex justify-between items-center h1 classtext-2xl font-bold text-gray-800 dark:text-white Vue3 Element Plus Tailwind /h1 div classflex items-center gap-4 ThemeSelector / ThemeToggle / /div /div /header !-- 主内容 -- main classcontainer mx-auto p-6 el-card classmb-4 template #header span classtext-gray-800 dark:text-whiteElement Plus 组件示例/span /template div classspace-y-4 el-button typeprimary主要按钮/el-button el-button typesuccess成功按钮/el-button el-button typewarning警告按钮/el-button el-button typedanger危险按钮/el-button el-button typeinfo信息按钮/el-button /div /el-card !-- 使用 Tailwind 的暗色样式 -- div classgrid grid-cols-1 md:grid-cols-3 gap-4 div v-fori in 3 :keyi classp-6 bg-white dark:bg-gray-800 rounded-lg shadow-md border border-gray-200 dark:border-gray-700 text-gray-800 dark:text-white transition-colors duration-300 h3 classtext-lg font-semibold mb-2卡片 {{ i }}/h3 p classtext-gray-600 dark:text-gray-300 这是一个使用 Tailwind CSS 实现的暗色模式卡片 /p /div /div /main /div /template script setup langts import ThemeToggle from ./components/ThemeToggle.vue import ThemeSelector from ./components/ThemeSelector.vue /script9. 主入口文件src/main.tsimport{createApp}fromvueimportElementPlusfromelement-plusimportelement-plus/dist/index.cssimportelement-plus/theme-chalk/dark/css-vars.cssimport./styles/element-dark.scssimport./style.cssimportAppfrom./App.vueconstappcreateApp(App)app.use(ElementPlus)app.mount(#app)10. 最终效果亮色暗色

相关新闻

Mind+图形化编程集成ollama本地大模型:从部署到AI扩展库实战

Mind+图形化编程集成ollama本地大模型:从部署到AI扩展库实战

1. 项目缘起:当图形化编程遇上本地大语言模型 最近在折腾一个给小朋友做的互动项目,想在里面加点智能对话的功能。一开始想图省事,直接调个在线API,但转念一想,这玩意儿要是以后想离线用,或者网络不好&…

2026/10/28 8:53:12 阅读更多 →
EKF+BP混合算法在状态估计中的优化实践

EKF+BP混合算法在状态估计中的优化实践

1. 项目概述:状态估计与智能滤波的融合探索在工业控制、自动驾驶和机器人导航等领域,状态估计始终是核心问题之一。传统滤波算法如扩展卡尔曼滤波(EKF)和粒子滤波(PF)虽然成熟,但在非线性系统中…

2026/10/28 8:53:22 阅读更多 →
Arduino Nano实现3D线框渲染:从定点数运算到OLED显示优化

Arduino Nano实现3D线框渲染:从定点数运算到OLED显示优化

1. 项目概述:当3D渲染遇上微控制器最近在整理工作室的物料,翻出来几块闲置的Arduino Nano和0.96寸的OLED12864屏幕。看着这些硬件,一个念头冒了出来:能不能用这点“寒酸”的配置,跑一个最简单的3D线框渲染引擎&#xf…

2026/10/26 13:48:01 阅读更多 →

最新新闻

Electron桌面应用开发实战:从环境搭建到打包发布全流程

Electron桌面应用开发实战:从环境搭建到打包发布全流程

做前端这些年,我大部分时间都在跟浏览器标签页打交道,直到第一次把桌面应用跑起来,才发现原来自己一直被限制在地址栏和刷新按钮围起来的框框里。Electron这个词,最开始是在某段时间频繁出现在同事的讨论里,一个用HTML…

2026/10/27 17:33:32 阅读更多 →
滑盖智能锁T109深度解析:结构原理、安装调试与故障排查

滑盖智能锁T109深度解析:结构原理、安装调试与故障排查

简介:亚太天能T109滑盖智能锁产品说明书是一份PDF格式的官方技术文档,主要面向智能锁安装人员、终端用户及售后维护者,帮助快速掌握产品安装、配置与常见故障处理。全包仅1个PDF文件,大小4.37MB,内容结构清晰&#xff…

2026/10/28 7:28:00 阅读更多 →
PMSM弱磁控制原理与Simulink建模:高速AGV驱动系统设计指南

PMSM弱磁控制原理与Simulink建模:高速AGV驱动系统设计指南

上个月我在调试一台高速AGV的驱动系统,整车要求空载跑到8m/s,电机转速已经拉到额定点,驱动器的输出电压也顶到了母线电压极限附近。再往上踩速度指令,转速纹丝不动,三相电流反而开始震荡。那会儿我的第一反应就是&…

2026/10/27 7:21:53 阅读更多 →
C++核心知识点:从内存管理到STL的实战指南

C++核心知识点:从内存管理到STL的实战指南

C 这门语言我前前后后折腾了十几年,用它写过嵌入式驱动、做过游戏服务端,也搭过基础组件库。每次看到新人一头扎进"C 核心知识点"这个搜索词,我其实挺感慨的——这门语言的难点从来不是语法多,而是知识点之间的耦合太深…

2026/10/27 18:20:50 阅读更多 →
T109滑盖智能锁怎么装?安装调试与故障排查全攻略

T109滑盖智能锁怎么装?安装调试与故障排查全攻略

简介:亚太天能T109滑盖智能锁产品说明书以PDF格式发布,适合智能锁用户、安装人员与售后维修人员阅读。内容围绕T109系列指纹密码刷卡锁展开,先介绍前面板、后面板、锁体、机械钥匙、电池盒盖等部件名称与功能,再给出完整安装步骤&…

2026/10/27 6:20:47 阅读更多 →
LLM知识降熵:从信息垄断到理解权下放

LLM知识降熵:从信息垄断到理解权下放

你有没有过这种经历:翻开源码注释、论文摘要或者一份专业报告,每个字都认识,连在一起却像天书。想找人聊聊,身边要么没人懂,要么懂的懒得跟你解释。后来我试着把同一段内容丢给一个大语言模型,几秒钟之后&a…

2026/10/28 7:29:02 阅读更多 →

日新闻

周新闻

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/27 13:55:19 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/27 7:21:50 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/27 19:19:37 阅读更多 →