项目地址

vite.config.ts 插件和vite配置

import { defineConfig } from "vite";
import vue from "@vitejs/plugin-vue";
import path from "path";
import vueJsx from "@vitejs/plugin-vue-jsx";
import AutoImport from "unplugin-auto-import/vite";
import Pages from "vite-plugin-pages";
import Components from "unplugin-vue-components/vite";
import { ElementPlusResolver } from "unplugin-vue-components/resolvers";
import ElementPlus from "unplugin-element-plus/vite";
import Inspect from "vite-plugin-inspect"; // https://vitejs.dev/config/
export default defineConfig({
plugins: [
vue(),
vueJsx({
// options are passed on to @vue/babel-plugin-jsx
}),
AutoImport({
imports: ["vue", "vue-router"],
dts: "./auto-imports.d.ts",
eslintrc: {
enabled: true, // Default `false`
filepath: "./.eslintrc-auto-import.json", // Default `./.eslintrc-auto-import.json`
globalsPropValue: true, // Default `true`, (true | false | 'readonly' | 'readable' | 'writable' | 'writeable')
},
resolvers: [ElementPlusResolver({ importStyle: "sass" })],
}),
Components({
resolvers: [ElementPlusResolver({ importStyle: "sass" })],
dts: true,
include: [/\.vue$/, /\.vue\?vue/, /\.tsx$/],
//默认自动导入src/components下的组件
}),
Pages({
...
}),
ElementPlus({
useSource: true,
}),
Inspect(),
],
resolve: {
alias: {
"@": "/src",
"~/": `${path.resolve(__dirname, "src")}/`,
},
},
css: {
preprocessorOptions: {
scss: {
additionalData: `@use "~/styles/element/index.scss" as *;`,
},
},
},
});

styles/element/index.scss 修改变量的文件

/** @format */

@use "sass:map";
$--colors: (
"primary": (
"base": #93040b,
),
);
@forward "element-plus/theme-chalk/src/common/var.scss" with (
$colors: $--colors,
$carousel: (
"indicator-width": 6px,
"indicator-height": 6px,
"indicator-padding-horizontal": 4px,
"indicator-padding-vertical": 12px,
"indicator-out-color": map.get($--colors, "primary", "base"),
)
);

vite-env.d.ts

/// <reference types="vite/client" />
/// <reference types="vite-plugin-pages/client" />

+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

配合媒体查询,检测用户是否设置了系统主题,重写:root下的css变量

:root {
  color-scheme: light dark;
}
/* 监听操作系统主题模式 */
@media (prefers-color-scheme: dark) {
  body {
    background-color: var(--color-background);
  }
}

@media (prefers-color-scheme: light) {
  body {
    background-color: var(--white-color-background);
  }
}

使用媒体查询,可以查看当前是否是暗色主题:

window.matchMedia("(prefers-color-scheme: dark)");

以下是一个跟随系统色/改变系统色/自定义主题色的简单例子

<style>
* {
margin: 0;
padding: 0;
text-align: center;
} :root {
color-scheme: dark light;
} @media (prefers-color-scheme: dark) {
:root {
color-scheme: dark;
--bg-color: #414141;
--border-color: #000000;
--hightlight-color: green;
/*
修改:checked 的选中颜色
默认是 `auto`,系统高亮色     
注释掉此行,选中时的颜色就是你定义的系统高亮色
*/
accent-color: var(--hightlight-color);
}
        
:focus {
outline: auto 2px green;
}
} @media (prefers-color-scheme: light) {
:root {
--bg-color: #ffffff;
}
} body.beauty {
--bg-color: #cf23ff;
}
</style>
</head> <body class="" style="height:100vh;background-color: var(--bg-color);">
<input type="radio" name="" id="">
<input type="checkbox" name="" id="">
<input type="text" name="" id="">
</body>

在element-plus项目中,需要覆盖变量

@media (prefers-color-scheme: dark) {
html:root {
color-scheme: dark;
--el-text-color-primary: #ffffff;
}
}
@media (prefers-color-scheme: light) {
html:root {
color-scheme: light;
--el-color-black: #333333;
}
}

element-plus官网给的方案是在html上添加dark类名,在项目中创建个响应变量去修改css变量,可以添加很多种配色方案吧。

document.querySelector(':root').computedStyleMap().get("--el-text-color-primary")

补充element-plus网站的代码

 (() => {
const e = localStorage.getItem("el-theme-appearance");
(e === "auto"
? window.matchMedia("(prefers-color-scheme: dark)").matches
: e === "dark") && document.documentElement.classList.add("dark");
})();

zhangxinyu推荐的网站换肤的最佳实现

利用link标签 rel属性。特点就是,预加载了其他主题,实现无缝切换。

vite实现element-plus按需配置,自定义主题和读取/修改系统主题色的更多相关文章

  1. 1.5.4、CDH 搭建Hadoop在安装之前(定制安装解决方案---配置自定义Java主目录位置)

    配置自定义Java主目录位置 注意: Cloudera强烈建议安装JDK/ usr / java / jdk-version,允许Cloudera Manager自动检测并使用正确的JDK版本.如果在 ...

  2. .NET 跨平台RPC框架DotNettyRPC Web后台快速开发框架(.NET Core) EasyWcf------无需配置,无需引用,动态绑定,轻松使用 C# .NET 0配置使用Wcf(半成品) C# .NET Socket 简单实用框架 C# .NET 0命令行安装Windows服务程序

    .NET 跨平台RPC框架DotNettyRPC   DotNettyRPC 1.简介 DotNettyRPC是一个基于DotNetty的跨平台RPC框架,支持.NET45以及.NET Standar ...

  3. Web API配置自定义路由

    默认访问Web API时,是无需指定method名.它会按照默认的路由来访问.如果你的Web API中出现有方法重载时,也许得配置自定义路由: 标记1为自定义路由,标记2为默认路由,需要把自定义路由排 ...

  4. 阿里云容器服务--配置自定义路由服务应对DDOS攻击

    阿里云容器服务--配置自定义路由服务应对DDOS攻击 摘要: 容器服务中,除了slb之外,自定义路由服务(基于HAProxy)也可以作为DDOS攻击的一道防线,本文阐述了几种方法来应对普通规模的DDO ...

  5. ThinkPHP框架配置自定义的模板变量(十)

    原文:ThinkPHP框架配置自定义的模板变量(十) 模板替换(手册有详细介绍对应的目录) __PUBLIC__:会被替换成当前网站的公共目录 通常是 /Public/ __ROOT__: 会替换成当 ...

  6. IK-Analyzer(5.3.1)动态配置自定义词典

    参考文献:http://blog.csdn.net/fatpanda/article/details/37911079 jar包: IK-Analyzer-extra-5.3.1.jar IKAnal ...

  7. springboot2.0 JPA配置自定义repository,并作为基类BaseRepository使用

    springboot2.0 JPA配置自定义repository,并作为基类BaseRepository使用 原文链接:https://www.cnblogs.com/blog5277/p/10661 ...

  8. 使用PHPStorm 配置自定义的Apache与PHP环境

    使用PHPStorm 配置自定义的Apache与PHP环境之一   关于phpstorm配置php开发环境,大多数资料都是直接推荐安装wapmserver.而对于如何配置自定义的PHP环境和Apach ...

  9. SpringBoot2.x过滤器Filter和使用Servlet3.0配置自定义Filter实战

    补充:SpringBoot启动日志 1.深入SpringBoot2.x过滤器Filter和使用Servlet3.0配置自定义Filter实战(核心知识) 简介:讲解SpringBoot里面Filter ...

  10. 【转】SonarQube配置自定义的CheckStyle代码规则

    原文地址:https://www.jianshu.com/p/ff1d800885ce 惯例第一步肯定是SonarQube的安装与运行配置了,但这部分不在本文主题内,网上一搜一大把,这里就不讲了,大家 ...

随机推荐

  1. 华为云发布分布式编译构建系统CodeArts Build

    摘要:2月14日,华为云发布分布式编译构建系统CodeArts Build,旨在支撑企业实现高效的软件开发,缩短产品上市周期,帮助企业的软件产品快速形成关键竞争力. 本文分享自华为云社区<唯快不 ...

  2. 微信小程序项目中使用icon图标

    效果: 步骤: 1.先让ui负责人把你的账号加入到项目中,加入到项目中后就可以在icon图标库中看到该项目 2.在小程序中使用 新建一个view,在上面加一个class,复制icon名字上去即可,注意 ...

  3. flask服务器 + 协程 + 爬虫 + ui自动化

    公司有个爬取的需求,要求持续性爬取,需要永久性地挂载到目标网站上,每天爬一次里面的数据.数据有下载表格的,我通过ui自动化点击拿到数据:还有一部分数据是几乎所有的图片信息,信息量近百万,这部分用scr ...

  4. CF1418D Trash Problem

    题目传送门 思路 这题其实非常的简单,完全到不了 \(\mathcal *2100\). 发现这个题目描述有点诈骗,但是翻译的挺不错,实质上问题就是给你 \(n\) 个点,让你动态维护相邻两个点的差值 ...

  5. 9.【go-kit教程】go-kit集成Prometheus

    在 Go kit 中集成 Prometheus 进行 API 监控可以帮助开发人员更好地了解系统的性能和行为,提高系统的可观察性和可靠性.下面是一个简单的示例,演示如何在 Go kit 中集成 Pro ...

  6. CF884F - Anti-Palindromize

    我们发现这个题的数据范围."字符和位置匹配"再加上一条奇怪的限制,长得就很网络流,那么就考虑如何用网络流做. 考虑重新解释一下这个题面,其实就是:给定一个字符集和 \(n\) 个位 ...

  7. Solon2 的应用生命周期

    Solon 框架的应用生命周期包括:一个初始化函数时机点 + 六个事件时机点 + 两个插件生命时机点 + 两个容器生命时机点(v2.2.0 版本的状态): 提醒: 启动过程完成后,项目才能正常运行(启 ...

  8. JavaScript表单form

    form表单实例 1 <!DOCTYPE html> 2 <html> 3 <head> 4 <meta charset="utf-8"& ...

  9. 制造业常用KPI

    1.  质量KPI CA (Capability of Accuracy): 平均值距离期望中心值的距离,值越大,说明平均值越接近期望中心值. Ca=(X-U)/(T/2) CP (Capabilit ...

  10. reportviewer的简单使用

    以下通过VS提供的工具来绑定数据源,没有一句自己写的代码. 1.新建web窗体,拖入ScriptManager控件,ReportViewer控件. 2.添加报表,新建数据集.在报表设计页面上拖入控件设 ...