Element-ui Theme浅析
一、浅析
1.采用BEM方式管理类名
- B:block,模块,一个块是一个独立的实体,块可以包含其它块,名字单词间用-连接;如一个搜索块;
- E:element,元素,一个元素是块的一部分,具有某种功能,以__与block连接。如搜索块里的input或button
- M:modifier,修饰符。修饰符作为一个块或者一个元素的属性,代表这个块或者是元素在外观或是行为上的改变。以--与block连接
2.没有选用Less或Sass之类的预处理器,而是选用更接近未来标准的CSS4风格的语法,用PostCSS和整合了postcss-bem和postcss-cssnext等插件的postcss-salad开发
显著特征:
- 声明变量
- 在sass中通过$声明一个变量,在CSS4中是这样声明的:通过前缀--来声明一个变量,如果变量放在:root中,代表此变量为全局变量,如果放在某个CSS代码中则代表局部变量。使用时借助var()函数来调用已声明的变量,在var()函数中可接受两个参数。第一参数代表变量名,第二个参数指变量的默认值。如下所示:
:root {
--primary-color:skyblue;
}
nav.primary{
background: var(--primary-color);
color: var(--my-var, red);
}
- 支持@import引入外部css
- 支持层级嵌套书写
- 支持一些独特的语法,具体源码可以看node_modules/element-theme/lib/config.js
- @b 后面跟着的class会渲染为el-class。如@b alert{...}会被渲染为el-alert{...}
- @modifier或者@m 后面跟着的class会被渲染为--class。如
@b alert{
@modifier info{...}
@m warning{...}
}
会被渲染为
el-alert--info{...}
el-alert--warning{...}
- @e后面跟着的class会被渲染为__class。如
@b alert{
@e content{...}
}
会被渲染为
el-alert__content{...}
- @when后面跟着的class会被渲染为.is-class。如
@b alert{
@e title{
@when bold {...}
}
}
会被渲染为
el-alert__title.is-bold{...}
- @mixin button-size后面跟着四个值,分别代表padding上下、padding左右、font-size、border-radius。如
@b button{
@mixin button-size 10px 20px 30px 40px;
}
会被渲染为
.el-button{
padding: 10px 20px;
font-size: 30px;
border-radius: 40px;
}
- @mixin button-variant后面跟着3个值,分别代表color、background-color、border-color。同时还会渲染一系列的hover\active\focus等颜色的深浅变化。如
@b button{
@mixin button-variant white blue black;
}
会被渲染为
.el-button{
color: white;
background-color: blue;
border-color: black;
}
.el-button:hover,
.el-button:focus{...}
- tint()和shade()函数,分别用来使颜色提升亮度、颜色降低亮度用的。接受两个参数,第一个是颜色值,第二个是明暗百分比。如
.foo{
color: tint(#BADA55, 42%);
}
.bar{
background-color: shade(#663399, 42%);
}
会被渲染为:
.foo{
color: #e2efb7;
}
.bar{
background-color: #2a1540;
}
3.为降低用户自定义主题的上手成本,提供了命令行工具指导用户快速自定义一套主题
4.源码
- 在node_modules/element-theme/bin/element-theme中定义了一些命令行工具的命令,如et -i,et -w等等;
- node_modules/element-theme/lib/config.js主要记载了些样式的配置信息,将element-theme-default及element-theme结合,element-them-default文件中主要存放了各个模块的样式及变量文件如element-variables.css;
- config.js配置信息将要在node_modules/element-theme/lib/gen-vars.js中使用,gen-vars.js中主要记录了读取配置文件的逻辑;
- node_modules/element-theme/lib/task.js主要使用gulp对postCss样式文件、字体等进行一些操作及输出使浏览器支持。
二、使用方法
1.安装工具 npm i element-theme -g
安装默认主题(在自己项目中)npm i https://github.com/Molunerfinn/theme-default.git -D
初始化变量文件 et -i
运行此命令后会在根目录生成一个element-variables.css文件。内部包含了主题所用到的所有变量
修改变量,修改element-variables.css里的变量即可改变整体风格(修改后保存后重新编译运行)
修改源码,node_modules/element-theme-default/src
编译主题,保存文件后,到命令行里执行 et 编译主题,如果你想启用 watch 模式,实时编译主题,增加 -w 参数。命令:et -w
参考:
Element-ui、大漠、post-salad、Molunerfinn
Element-ui Theme浅析的更多相关文章
- 使用element ui 日期选择器获取值后的格式问题
一般情况下,我们需要给后台的时间格式是: "yyyy-MM-dd" 但是使用Element ui日期选择器获取的值是这样的: Fri Sep :: GMT+ (中国标准时间) 在官 ...
- element ui 1.4 升级到 2.0.11
公司的框架 选取的是 花裤衩大神开源的 基于 element ui + Vue 的后台管理项目, 项目源码就不公开了,记录 分享下 步骤 1. 卸载 element ui 1.4的依赖包 2. 卸载完 ...
- [坑况]饿了么你是这样的前端——vue+element ui 【this dependency was not found:'element-ui/lib/theme-chalk/index.css'】
element ui 坑况:今日pull代码,潇洒npm run dev ,被告知:this dependency was not found:'element-ui/lib/theme-chalk/ ...
- Vue + Element UI项目初始化
1.安装相关组件 1.1安装Node 检查本地是否安装node node -v 如果没有安装,从Node官网下载 1.2安装npm npm -v 如果没有安装:使用该指令安装: npm install ...
- Element UI——本地引入iconfont不显示
前言 前面因为本地引入Element UI导致了iconfont不显示,所以只好再去Element UI官网去扒下iconfot 步骤 进入官网 组件 | Element UI F12进入控制台,找到 ...
- Html | Vue | Element UI——引入使用
前言 做个项目,需要一个效果刚好Element UI有,就想配合Vue和Element UI,放在tp5.1下使用,但是引入在线的地址各种报错,本地引入就完美的解决了问题! 代码 __STATIC_J ...
- 分享一个自搭的框架,使用Spring boot+Vue+Element UI
废弃,新的:https://www.cnblogs.com/hackyo/p/10453243.html 特点:前后端分离,可遵循restful 框架:后端使用Spring boot,整合了aop.a ...
- 上传图片组件封装 element ui
// element ui 文档地址: http://element.eleme.io/#/zh-CN <template> <div> <div class=" ...
- vue项目使用element ui的Checkbox
最近使用到element ui的下拉多选框Checkbox Checkbox用法可参考与于 http://element.eleme.io/#/zh-CN/component/checkbox Che ...
- vue的$nextTick使用总结,this.$refs为undefined的解决办法,element Ui的树形控件setCheckedKeys方法无法使用
其实这3个讲的是一个问题,先说下问题,我在watch里设置一个监听,当弹窗打开时,自动添加树形的默认选中项, 但奇怪的是this.$refs为undefined,自然setCheckedKeys无法使 ...
随机推荐
- ubuntu 14.04中安装phpmyadmin即mysql图形管理界面
由于学习的需要,我将网站开发环境从windows转移到了ubuntu,ubuntu下之前并没有发现什么难的地方,只要百度一般都有解决方案.但是总所周知ubuntu是一系列开源软件的集合,由于版本的问题 ...
- vue-router的两种模式的区别
众所周知,vue-router有两种模式,hash模式和history模式,这里来谈谈两者的区别. ### hash模式 hash模式背后的原理是`onhashchange`事件,可以在`window ...
- ireport导出中英文pdf
准备: 报表开发工具:ireport 5.6.0 报表框架: jasperreport5.6.0 1.中文格式设置pdf fontname.isembedded.pdfencoding pdf fon ...
- java 8 总结 之lambda
lambda表达式 目的:行为参数化 Lambda表达式是简洁地表示可传递的匿名函数的一种方式:它没有名称,但它有参数列表.函数主体.返回类型,可能还有一个可以抛出的异常列表. Lambda的基本语法 ...
- 通过createObjectURL实现图片预览
实现原理:通过createObjectURL 创建一个临时指向某地址的二进制对象. 过程:点击触发隐藏的 input file 的点击事件,使用createObjectURL读取 file,创建 ...
- Beta冲刺前准备
一.介绍小组新成员,Ta担任的角色. 201421123121 栗海辉 来自Sugar Free 风格:低调中的高调,给你不一样的视觉 擅长的技术:C语言/JAVA 在曾经的团队里面担任主要编程人员, ...
- 201521123086《java程序设计》第7周
本章学习总结 书面作业 1.ArrayList代码分析 1.1 解释ArrayList的contains源代码 以下是ArrayList的contains源代码: public boolean con ...
- 201521123101 《Java程序设计》第6周学习总结
1. 本周学习总结 1.面向对象学习暂告一段落,请使用思维导图,以封装.继承.多态为核心概念画一张思维导图,对面向对象思想进行一个总结. 2. 书面作业 1.clone方法 1.1 Object对象中 ...
- 201521123056《Java程序设计》 第2周学习总结
1. 本周学习总结 String类: 不可变字符串型: 粗略介绍了枚举类型: 完全限定类名: 泛型数组列表的应用: 2. 书面作业 Q1.使用Eclipse关联jdk源代码,并查看String对象的源 ...
- 201521123039 《java程序设计》第九周学习总结
1. 本周学习总结 2. 书面作业 本次PTA作业题集异常 常用异常 题目5-1 1.1 截图你的提交结果(出现学号) 1.2 自己以前编写的代码中经常出现什么异常.需要捕获吗(为什么)?应如何避免? ...