简体中文 | English
element-theme-darkplus 是一套暗黑风格主题,基于 Element 最新版本v2.15.14
。
npm i element-theme-darkplus -S
// Webpack
import 'element-theme-darkplus/lib/index.css';
// CDN
<link rel="stylesheet" href="https://unpkg.com/element-theme-darkplus/lib/index.css">
// Webpack
import 'element-theme-darkplus/lib/input.css';
// CDN
<link rel="stylesheet" href="https://unpkg.com/element-theme-darkplus/lib/input.css">
如果你准备了一套白垩主题,一套暗黑主题,两种主题自由切换,那么以下最适合你。
import 'element-ui/lib/theme-chalk/index.css';
import 'element-theme-darkplus/lib/index.color.css';
其中官方白垩主题 theme-chalk 包含了组件基础样式和白垩颜色,暗黑主题 element-theme-darkplus 也包括了组件基础样式和暗黑颜色,两者同时引入将造成组件基础样式重复冗余,因此我们额外提供了一套仅包含暗黑颜色的主题包,引入方式非常简单,同名样式文件添加color
后缀即可。
import `element-theme-darkplus/lib/index.color.css`;
import `element-theme-darkplus/lib/input.color.css`;
评分组件 Rate 较为特殊,Element
内部与颜色相关props
均定义了默认值,且template
模板中都采用内联样式,导致外部主题样式无法覆盖。
Props |
默认值 |
---|---|
void-color |
#c6d1de |
disabled-void-color |
#eff2f7 |
text-color |
#1f2d3d |
可传空值重置相应props
值使主题生效。
<el-rate :value="3" show-text void-color="" text-color="" />
进度条组件 Progress 类似,仅线形进度条支持,环形和仪表盘形不支持。
Props |
默认值 |
---|---|
define-back-color |
#ebeef5 |
text-color |
#606266 |
<el-progress :percentage="20" define-back-color="" text-color="" />
虽然两组件可以传空值重置属性以支持暗黑主题,而对于不关心此功能的同学,却不清楚为什么会传入诸如text-color=""
这样的属性,这无疑在开发层面徒增了心智负担。
嗯...
样式么法解决Rate
和Progress
根本性问题了。
重新定义Rate
和Progress
组件可以吗?还不能破坏原组件的拓展性和唯一性,则采用继承原始组件并在javascript
里做了一个中间层,帮助用户初始置空相关颜色props
。
import ElementUI from 'element-ui'
import Darken from 'element-theme-darkplus/utils/darken'
Vue.use(ElementUI)
Vue.use(Darken(ElementUI))
import { Progress, Rate } from 'element-ui'
import Darken from 'element-theme-darkplus/utils/darken'
Vue.component(Progress.name, Darken(Progress))// or Vue.use(Darken(Progress))
Vue.component(Rate.name, Darken(Rate))
<script src="https://unpkg.com/element-theme-darkplus/utils/darken.js"></script>
预览页 中主题切换开关switch
添加了常见的暗黑主题功能,例如浏览器缓存永久保存用户常用主题状态、跟随操作系统预设动态切换主题风格、媒体查询式主题风格过渡等,可参考组件 ThemeToggle 和 示例。
原因在于页面已经加载,实例组件在 Vue 生命周期内才开始对DOM
根元素增加dark
类名,而在载入时间前,还是默认初始样式,此段时间将造成页面白屏。
解决方式非常简单,在html
内head
新增脚本,即在载入页面前,读取缓存或者操作系统主题关键字,并考虑是否对DOM
根元素增加dark
类名。
<script src="https://unpkg.com/element-theme-darkplus/utils/dark-mode.js"></script>
支持自定义浏览器缓存字的键名。
<script src="https://unpkg.com/element-theme-darkplus/utils/dark-mode.js" storage-key="custom-theme-appearance"></script>