elementui css,elementUI——主题及自定义

本文介绍了Element UI主题的构建过程,包括组件的scss文件结构、动态生成入口文件、gulp构建流程以及字体和样式的处理。同时,讨论了如何进行主题的定制,包括按需引入、后编译引入和全量引入时的样式覆盖方法,提供了覆盖全局变量的策略。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

说明:本文基于element-ui@2.13.0,源码详见element。

一、主题相关代码结构:

9690b876ba68799fd42ab5f1ccfa030b.png

78491d0c5eea78f5206a94932e860bf2.png

可以看出两点:

a. 每个element ui组件基本都对应有单独的scss文件;

b. 单独的组件scss文件,支持了组件按需引入时,样式部分也能按需引入的诉求;

c.theme-chalk/src/common和theme-chalk/src/mixins目录下,主要是一些公共样式的设置,全局sass变量、工具、mixin和自定义function等(sass见elementUI中用到哪些sass语法);

d.theme-chalk/src/common/var.scss主要是定义了各组件中会用到的色彩、字体、边框与图标等(可以参考本文第三节),各组件具体样式在theme-chalk/src下各组件scss文件中设置。

二、主题的构建:

"build:theme": "

node build/bin/gen-cssfile &&

gulp build --gulpfile packages/theme-chalk/gulpfile.js &&

cp-cli packages/theme-chalk/lib lib/theme-chalk"

复制代码

2.1. 生成入口文件(node build/bin/gen-cssfile)

packages/theme-chalk下放有字体文件,scss相关变量、mixin及公共样式设置,各UI组件对应的scss文件;

build/bin/gen-cssfile根据components.json获取组件名,找到packages/theme-chalk对应的各组件的scss文件信息,以@import "./组件.scss"的形式,写入packages/theme-chalk/index.scss文件,也就是说总的入口文件index.scss可以动态生成。b3f94d60054df0a1eb6ff18580f0e150.png

2.2. 构建(gulp build --gulpfile packages/theme-chalk/gulpfile.js)

gulp是一种基于流的打包方式,iviewUI和elementUI等UI库都是采用gulp进行样式构建的,参考gulp官方。

function compile() {

return src('./src/*.scss')

.pipe(sass.sync())

.pipe(autoprefixer({

browsers: ['ie > 9', 'last 2 versions'],

cascade: false

}))

.pipe(cssmin())

.pipe(dest('./lib'));

}

function copyfont() {

return src('./src/fonts/**')

.pipe(cssmin())

.pipe(dest('./lib/fonts'));

}

复制代码

主要分两个步骤:

一是把packages/theme-chalk/src下的各scss文件分别用sass插件处理成css文件并压缩,输出到packages/theme-chalk/src/lib目录下;

二是把packages/theme-chalk/src/fonts下的字体文件经过压缩处理,同样输出到packages/theme-chalk/src/lib目录下;

2.3. 构建结果拷贝到根目录lib下(cp-cli packages/theme-chalk/lib lib/theme-chalk)

通过cp-cli(内部调用fs-extra),将packages/theme-chalk/src/lib下文件拷贝到根目录下的lib目录中。

按需引用组件css可以使用类似import 'element-theme-chalk/lib/select.css';的方式引入。

三、主题的设计

色彩:主色、辅助色、中性色(文本、背景和边框颜色);

字体:字体、字号、行高;

边框:边框、圆角、投影;

图标:iconfont制作的element-icons font family(packages/theme-chalk/src/icon.scss)

Element-UI 技术揭秘(5)- 色彩、字体、边框与图标

四、主题的定制

4.1 样式覆盖方式

使用element-ui默认样式分两种:

a. 官方建议的按需引入方式

import { Button } from 'element-ui'

复制代码

借助babel插件babel-plugin-component,上面代码会转换成下面的形式

var button = require('element-ui/lib/button') // lib/button.js即按组件打包后的el-button组件

require('element-ui/lib/theme-chalk/button.css')

复制代码

可以看到样式也按需引入了。

b.后编译方式按需引入方式

后编译的思想,即依赖包提供的源码,而编译交给业务应用处理,如

import ElButton from 'element-ui/packages/button' // 或 import ElButton from 'element-ui/lib/button'

import 'packages/theme-chalk/src/button.scss'

复制代码

c.全量引入方式

import 'element-ui/lib/theme-chalk/index.css'

复制代码

现在需要更改一些全局sass变量,来达到修改主题的目的,例如我们新建一个sass文件cover.scss:

// cover.scss,修改element-ui的全局变量

$--color-primary: #5BFF1D !default;

复制代码

针对上面三种方式,覆盖的方式分别是:

a.没办法,因为引用的样式是打包后的样式,无法覆盖;

b.可能的方案(待验证)是,在项目中通过下面的方式可以达到目的

import 'packages/theme-chalk/src/button.scss'

import 'cover.scss' // 顺序很重要,这样可以覆盖index.scss中的全局变量

复制代码

c.针对c方案如下:

import 'packages/theme-chalk/src/index.scss'

import 'cover.scss' // 顺序很重要,这样可以覆盖index.scss中的全局变量

复制代码

### 关于 UniApp 框架的推荐资源与教程 #### 1. **Uniapp 官方文档** 官方文档是最权威的学习资料之一,涵盖了从基础概念到高级特性的全方位讲解。对于初学者来说,这是了解 UniApp 架构和技术细节的最佳起点[^3]。 #### 2. **《Uniapp 从入门到精通:案例分析与最佳实践》** 该文章提供了系统的知识体系,帮助开发者掌握 Uniapp 的基础知识、实际应用以及开发过程中的最佳实践方法。它不仅适合新手快速上手,也能够为有经验的开发者提供深入的技术指导[^1]。 #### 3. **ThorUI-uniapp 开源项目教程** 这是一个专注于 UI 组件库设计和实现的教学材料,基于 ThorUI 提供了一系列实用的功能模块。通过学习此开源项目的具体实现方式,可以更好地理解如何高效构建美观且一致的应用界面[^2]。 #### 4. **跨平台开发利器:UniApp 全面解析与实践指南** 这篇文章按照章节形式详细阐述了 UniApp 的各个方面,包括但不限于其工作原理、技术栈介绍、开发环境配置等内容,并附带丰富的实例演示来辅助说明理论知识点。 以下是几个重要的主题摘选: - **核心特性解析**:解释了跨端运行机制、底层架构组成及其主要功能特点。 - **开发实践指南**:给出了具体的页面编写样例代码,展示了不同设备间 API 调用的方法论。 - **性能优化建议**:针对启动时间缩短、图形绘制效率提升等方面提出了可行策略。 ```javascript // 示例代码片段展示条件编译语法 export default { methods: { showPlatform() { console.log(process.env.UNI_PLATFORM); // 输出当前平台名称 #ifdef APP-PLUS console.log('Running on App'); #endif #ifdef H5 console.log('Running on Web'); #endif } } } ``` #### 5. **其他补充资源** 除了上述提到的内容外,还有许多在线课程视频可供选择,比如 Bilibili 上的一些免费系列讲座;另外 GitHub 和 GitCode 平台上也有不少优质的社区贡献作品值得借鉴研究。 --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值