npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

element-plus-dark

v3.0.0

Published

Element Plus Dark Mode unoffical solution.

Downloads

12

Readme

element-plus-dark

起源

Element UI 和现在的 Element Plus 已经成为事实上的 Vue 项目首选骨架,也就是说,哪怕你只需要 Layout、Button、Input 寥寥几个组件,Element 也是首选。

同时,一些项目可能需要暗黑模式,而 Element Plus 目前还未提供官方解决方案,因此诞生了这个非官方项目:Element Plus Dark。

2022 年 2 月 7 日,Element Plus 正式版上线。

2022 年 2 月 17 日,非官方的暗黑模式解决方案 Element Plus Dark v1.0.0 上线。

DEMO

http://www.el-pp.com/dark-mode

更新日志

  • v3.0.0-2022.7.21:适应 Element Plus 2.2.0 以后版本,做了若干改进。

  • v2.0.2-2022.3.22:根据反馈,修改了 Button 组件的暗黑模式样式,变得更合理。

  • v2.0.1-2022.2.24:删除了一个本项目新增的变量--dark-bg-color-dark,合并到--el-disabled-bg-color。不妨碍使用。

  • v2.0.0-2022.2.23:将 CSS 变量声明的位置从:root改为.element-plus-dark,以便更容易实现一键关闭暗黑模式。你的项目需要做的对应调整是必须给body标签加上这个类名。如果你的项目打算局部使用暗黑模式,且绝对不使用有弹出层的组件,那么类名也可以放在更深层的元素上。

安装

yarn add element-plus-dark

使用方法

引入 SCSS

1. main.js

import ElementPlus from 'element-plus';
import 'element-plus/dist/index.css';
import App from './App.vue'; // 引入 App.vue 必须放在引入 Element Plus 之后,因为需要在 App.vue 中引入 element-plus-dark,覆盖 Element Plus 原有变量和样式

2. App.vue

// SCSS
$dark-bg-color-base: rgb(你的基本背景色); // 应写,不写即使用默认暗黑背景色 rgb(29, 59, 93)
$dark-mixed-color: rgb(一个接近于白色的色值,用于跟背景色混合成文本颜色和边框颜色); // 可以不写,不写默认使用 #ffffff
@import 'element-plus-dark/index.scss';

基础背景色的来源:

如果暗黑模式下用到了大背景图,这时候基础背景色应来自于大背景图,你可以使用图片取色工具(例如https://www.matools.com/image-color)来识别背景图的主背景色。没有背景图的话,就看设计师怎么设计,或者前端工程师怎么选色。

3. index.html

body标签加上class="element-plus-dark"即可。

进阶步骤

1. 使用官方的《自定义主题》

根据 Element Plus 官方提供的《自定义主题》功能,重定义primarysuccessdanger……的一个或几个色值,即可生成一套定制化更高的暗黑模式主题。

2. 实现一键换肤

详见《本项目文档》

3. 实现一键关闭黑暗模式

详见《本项目文档》

本方案优势

1. 使用足够简单

最简单情况下,你只需要确定“基本背景色”这一个色值,即可生成一套漂亮的暗黑模式主题。

最复杂情况下,你也只需要先确定基本背景色,再根据 Element Plus 官方提供的《自定义主题》功能,重定义primarysuccessdanger……的一个或几个色值,即可生成一套定制化更高的暗黑模式主题。

2. 有科学的变量设计理念和变量使用理念

设计理念在下文详细介绍。

变量设计理念

1. 单变量入口

只需要给 Sass 变量$dark-bg-color-base赋予合理的色值,作为主背景色,其他所有变量全部由这个变量计算而成,包括有一些 Element Plus 原本写死的色值,我方案都改成了计算值。

2. 其他变量依赖计算

使用者只需确定 3 类变量:背景色、文本色、边框色。当然,使用者可以自行修改它们的算法。

3. 尽量迁就 Element Plus 原有 CSS 变量,重新赋值

这样的变量例如--el-bg-color等。

4. 创造一些新的 CSS 变量

主要是 6 个背景色变量,可以说它们是我方案的核心变量。

5. 抛弃官方的某些原有变量

官方某些变量在我方案中必须抛弃使用,比如--el-color-white,这是官方欠考虑的一个变量,它的值是写死的#ffffff,可能官方的考虑是将来#ffffff可以改为灰白色或者深色,但是,这个变量有时用在文本上,有时用在背景上,在暗黑模式中,白色的字是常见的,往往可以继续沿用,但白色的背景是大忌讳,必须改为暗黑背景,一个变量不可能同时负责文本的白色和背景的深色,这是冲突的,所以我方案只能抛弃这个变量。

变量使用理念

1. 页面主内容区使用基本背景色

这毫无疑问。

2. 位于主内容区中的大型组件,使用基本背景色

比如 Calendar 应使用基本背景色。

3. 弹出层,分两种情况考虑:

  • 如果弹出层有半透明蒙版,这时候弹出层是作为当前内容区的,比如 Dialog 等,那么弹出层的背景色也使用基本背景色。

  • 如果弹出层没有半透明蒙版,比如 Cascader、Select 等,那么弹出层的背景色要使用--dark-bg-color-light-1,也就是比基本背景色亮一点,以示区分。如果弹出层之上继续弹出新层,那么使用--dark-bg-color-light-2

4. 输入框的背景色,使用--dark-bg-color-light-1

在暗黑模式中,输入框背景显然需要跟主背景相区分,要更亮一点,而且它应跟它的下拉层背景色一致,以表示下拉是输入框的延伸,是一个整体,当点击下拉的内容,内容就会跳到输入框中。上文说过,它的下拉弹出层应使用--dark-bg-color-light-1,恰好它自身也是用--dark-bg-color-light-1,可谓恰到好处。

5. 基本背景色上的高亮色,使用--dark-bg-color-light-1

这毫无疑问。

6. --dark-bg-color-light-1里面又需要高亮,使用--dark-bg-color-light-2

比如日期选择器的下拉弹出层,它本身是一级高亮,鼠标悬停在日期上的时候,又需要高亮,也就是高亮的高亮,那么使用二级高亮。

7. 二级高亮之上再高亮,使用--dark-bg-color-light-3

极少场合需要用到,在此不举例。

8. disabled 色、不可点击色,一律使用--el-disabled-bg-color

通常情况下,无论什么上下文,一律使用--el-disabled-bg-color,以表示统一。但是,如果 Element Plus 的某个组件的原本设计是不用 disabled 色,那么我方案也不用。

9. Loading 组件的蒙版背景色,重置为--dark-bg-color-base-alpha

在白色背景下,蒙版的背景色值无论基于rgb(0,0,0)还是基于rgb(255,255,255)做透明效果都可以接受,但是在暗黑模式下,这个蒙版的背景色值无论基于rgb(0,0,0)还是基于rgb(255,255,255)做透明效果都是不科学的,效果会非常突兀,就放佛一块膏药压在区域上方,因为暗黑背景下,背景色的差异会很明显,很突兀。所以我方案设定了这个变量,用于蒙版的背景色。

10. 不要有白色背景的交互组件

这里尤其强调 Button 组件,在不设定type属性的前提下,它的背景色是纯白色,在白色主题下,白色表示“低调、不显眼”,但是在暗黑模式下,白色表示“夜空中最亮的星”,所以尽量不要使用不带type属性的 Button。某些组件内嵌了不带type的 Button,我方案专门做了美化处理。