Element Plus 对比 Arco design

6,703 阅读5分钟

本文主要是对 Element PlusArco Design Vue 两个组件库的简单对比,可能对你的技术选型有帮助,本文的主观成分比较多

CSS设计变量

Element Plus

--el-text-color-primary: #303133;
--el-text-color-regular: #606266;
--el-text-color-secondary: #909399;
--el-text-color-placeholder: #a8abb2;
--el-text-color-disabled: #c0c4cc;

Arco Design Vue

--color-text-1: #121314; // 标题、重点文本
--color-text-2: #5c5c5c; // 常规正文
--color-text-3: #909399; // 次要正文、提示文本
--color-text-4: #c2c2c2; // 辅助文本、禁用文本、占位符placeholder、提示文本

相比之下,个人比较喜欢arco的命名方式,简单、易记、简短、优雅

按钮 Button 对比

先简单对比下各自按钮的props,按钮能大概看出两者的设计理念和规范性

Element Plus

屏幕截图 2023-10-26 232537.png

Arco Design Vue

屏幕截图 2023-10-26 232733.png

Element一直以简单易用受欢迎,通过上面对比,个人感觉Arco的更简洁,更易用,Element Plusprops显得有些混乱,很容易写成以下代码:

<template>
  <el-button type="primary" circle round text link> 按钮 </el-button>
</template>

按钮形状没有进行归集,而且要经常性看文档,再来看看arco

屏幕截图 2023-10-26 233557.png

对形状等进行了归类,对ts提示友好很多,你不需要记有什么形状,你只需要记住shape就行了,详细点的自己去对比下

还有就是扩展性,比如以后我想加个菱形的形状,像element来说要新增一个属性,会造成props属性越来越多,对于arco来说,只需要在shape多加一个属性值就行,而且这对于组件内部的封装逻辑也会清晰很多,也更容易去维护

看过太多的第三方组件库,以及一些个人开发的组件库,大部分都是仿element的设计,可见element影响太广了,不过还是觉得arco的按钮设计棒一些

Row/Col 组件对比

Element Plus

屏幕截图 2023-10-26 234445.png

Arco

image.png

说实话,我不太喜欢elementalign的值篡改,css的align的值就是 start | center | end | stretch,如果我给row加了flex-direction: column;属性,那align就不是top或者bottom的含义了

Card 组件对比

Element Plus

image.png

Arco

image.png

header一般指的是头部的意思,Element Plus在这里把它当做标题,标题我觉得用title更合适一些,header表示整个头部

描述列表 Descriptions 组件对比

Element Plus

image.png

Arco

image.png

Arco支持data属性,同时也支持插槽形式, 且支持align文字对齐,这个很方便,更多细节和功能自己研究,Element PlusDescriptionsItemalignlabel-align,不过我认为放在Descriptions上更合适

表格 Table 组件对比

Element Plus

这个不多说了,熟悉的人都比较了解,Element 表格是没有自带分页的

Arco

image.png

通过下面例子,可以看出Arco支持columns属性,通过配置形式生成,自带分页,pagination属性完全继承分页组件的props(组件库很多用到了继承思维,这个很好),pagination里面可以写onChangeonPageSizeChange事件,这对hooks封装非常合适

hooks封装具体可以看看这篇文章: useTable表格hooks封装和使用(Vue3)

image.png

Select 组件对比

Element Plus

image.png

Arco

image.png

image.png

Arco支持options属性,通过配置生成下拉选项,不需要插槽的形式,其中每项option可以配置tag-props,这里是直接继承tag组件的props,扩展性很好,功能丰富,更多细节功能自己去对比

image.png

image.png

数字输入框 InputNumber 对比

Element Plus

image.png

Arco

image.png

Element Plus没有格式化展示功能,扩展性一般

Arco的格式化展示示例,如果想要在数字后面加%等符号,格式化会非常方便

image.png

抽屉 Drawer 组件对比

Element Plus

image.png

image.png

Arco

image.png

image.png

Arco的抽屉自带确认取消按钮,这对我们平时开发带来了很大便捷性,而且这两个按钮通过ok-button-propscancel-button-props继承按钮组件的propswidthheight属性相对于size来说,语义更好

Arco还支持函数式抽屉,这是Element Plus不具备的,具体自己研究

image.png

Modal 对比 Dialog / MessageBox

Element Plus

image.png

image.png

Arco

image.png

ArcoModal相当于Element PlusDialogMessageBox整合,但是Element的扩展性略有欠缺,首先确认取消按钮没能继承button组件,Arco是能够继承的,此外Arco支持拖拽,自定义动画等功能

Arco函数调用

image.png

image.png

支持命令式更新(异步获取数据后,回显) 03.png

tsx方式

image.png

具体可以看看这篇文章 vue3 配合 tsx 优雅的弹窗方案

定制性

Arco的生态中,有 DesignLab风格配置平台,能够快速针对组件样式进行diy,能够快速制定出所需样式风格

image.png

image.png

虽然官方主题不是线性主题,但是通过DesignLab平台,你能够快速制定出一套线性主题,此外,官方主题中还有多套线性主题,同时在主题商店中,目前已经有上千套主题(在 官网 右下角处有个切换主题风格的按钮,可自行预览下),都可通过npm方式直接下载使用

tabs组件对比(2024-04-01)

Element Plus的Tabs组件右侧是不支持插槽的,要实现以下布局只能自己改,并且比较麻烦,自己修改的对于屏幕宽度缩小的时候兼容性差

01.png

Arco 是支持右侧插槽的,极大增加了便捷性

02.png

最后

其他组件我就不一一对比了,Element都很熟悉了,本文的Element例子相对较少,不过也能大概看出两个组件库的设计和规范性,仅供大家选型做简单对比

QQ图片20231027105252.gif