一、浅析

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-saladMolunerfinn

Element-ui Theme浅析的更多相关文章

  1. 使用element ui 日期选择器获取值后的格式问题

    一般情况下,我们需要给后台的时间格式是: "yyyy-MM-dd" 但是使用Element ui日期选择器获取的值是这样的: Fri Sep :: GMT+ (中国标准时间) 在官 ...

  2. element ui 1.4 升级到 2.0.11

    公司的框架 选取的是 花裤衩大神开源的 基于 element ui + Vue 的后台管理项目, 项目源码就不公开了,记录 分享下 步骤 1. 卸载 element ui 1.4的依赖包 2. 卸载完 ...

  3. [坑况]饿了么你是这样的前端——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/ ...

  4. Vue + Element UI项目初始化

    1.安装相关组件 1.1安装Node 检查本地是否安装node node -v 如果没有安装,从Node官网下载 1.2安装npm npm -v 如果没有安装:使用该指令安装: npm install ...

  5. Element UI——本地引入iconfont不显示

    前言 前面因为本地引入Element UI导致了iconfont不显示,所以只好再去Element UI官网去扒下iconfot 步骤 进入官网 组件 | Element UI F12进入控制台,找到 ...

  6. Html | Vue | Element UI——引入使用

    前言 做个项目,需要一个效果刚好Element UI有,就想配合Vue和Element UI,放在tp5.1下使用,但是引入在线的地址各种报错,本地引入就完美的解决了问题! 代码 __STATIC_J ...

  7. 分享一个自搭的框架,使用Spring boot+Vue+Element UI

    废弃,新的:https://www.cnblogs.com/hackyo/p/10453243.html 特点:前后端分离,可遵循restful 框架:后端使用Spring boot,整合了aop.a ...

  8. 上传图片组件封装 element ui

    // element ui 文档地址: http://element.eleme.io/#/zh-CN <template> <div> <div class=" ...

  9. vue项目使用element ui的Checkbox

    最近使用到element ui的下拉多选框Checkbox Checkbox用法可参考与于 http://element.eleme.io/#/zh-CN/component/checkbox Che ...

  10. vue的$nextTick使用总结,this.$refs为undefined的解决办法,element Ui的树形控件setCheckedKeys方法无法使用

    其实这3个讲的是一个问题,先说下问题,我在watch里设置一个监听,当弹窗打开时,自动添加树形的默认选中项, 但奇怪的是this.$refs为undefined,自然setCheckedKeys无法使 ...

随机推荐

  1. JavaScript中事件

    JS中的事件 一.事件分类: 鼠标事件:鼠标单击.鼠标双击.鼠标指上等... HTML事件:文档加载.焦点.表单提交等... 键盘事件:键盘按下(keydown).键盘按下并松开瞬间(keypress ...

  2. java 比较几种常见循环方式的优劣

    详见:http://blog.yemou.net/article/query/info/tytfjhfascvhzxcyt224 我们常用for循环,foeach,while等作为循环list或者数组 ...

  3. 在Android上仿百度贴吧客户端Loading图标小球

    封面 前言 使用百度贴吧客户端的时候发发现加载的小动画挺有意思的,于是自己动手写写看.想学习自定义View以及自定义动画的小伙伴一定不要错过哦. 读者朋友需要有最基本的canvas绘图功底,比如画笔P ...

  4. asp.net mvc 4 项目升级到 asp.net mvc5

    一.开始 1.打开或新建asp.net mvc 4项目 2.修改 global.asax文件 原: WebApiConfig.Register(GlobalConfiguration.Configur ...

  5. hdu 2066 最短路水题

    题意:给出多个可选择的起始点和终点,求最短路 思路:执行起始点次的spfa即可 代码: #include<iostream> #include<cstdio> #include ...

  6. JavaScript封装一个MyAlert弹出框

    平时我们想要显示一些提示信息时会用到alert方法,alert是全局的一个方法,会短暂的中断程序,我们主要用来显示提示客户信息.但是这个方法有一定的局限性,而且本身样式也不够美观.于是我封装了一个实用 ...

  7. 【★】RSA-什么是不对称加密算法?

    不对称加密算法RSA浅析 本文主要介绍不对称加密算法中最精炼的RSA算法.我们先说结论,也就是RSA算法怎么算,然后再讲为什么. 随便选取两个不同的大素数p和q,N=p*q,r=(p-1)*(q-1) ...

  8. 全面解析for循环

    牛刀小试: for(var i = 0 ; i < 100; i++) {console.log(i);} var i = 0;//第一个代码段 i < 100; //第二个代码段 i++ ...

  9. 【Alpha阶段汇总】成果展示与体验总结

    一.燃尽图 二.软件截图 三.代码与图片.音乐素材仓库 git仓库 四.问题与总结 1.git提交问题 之前创建的仓库地址是http://git.oschina.net/8265559926/grou ...

  10. 201521123109《java程序设计》第五周学习总结

    1. 本周学习总结 1.1 尝试使用思维导图总结有关多态与接口的知识点. 1.2 可选:使用常规方法总结其他上课内容. 2. 书面作业 作业参考文件下载 1.代码阅读:Child压缩包内源代码 1.1 ...