Button 按钮

常用的操作按钮。

基础用法

使用 typeplainroundcircle 来定义按钮的样式。

Button 按钮 - 图1

  1. <template>
  2. <el-row class="mb-4">
  3. <el-button>Default</el-button>
  4. <el-button type="primary">Primary</el-button>
  5. <el-button type="success">Success</el-button>
  6. <el-button type="info">Info</el-button>
  7. <el-button type="warning">Warning</el-button>
  8. <el-button type="danger">Danger</el-button>
  9. </el-row>
  10. <el-row class="mb-4">
  11. <el-button plain>Plain</el-button>
  12. <el-button type="primary" plain>Primary</el-button>
  13. <el-button type="success" plain>Success</el-button>
  14. <el-button type="info" plain>Info</el-button>
  15. <el-button type="warning" plain>Warning</el-button>
  16. <el-button type="danger" plain>Danger</el-button>
  17. </el-row>
  18. <el-row class="mb-4">
  19. <el-button round>Round</el-button>
  20. <el-button type="primary" round>Primary</el-button>
  21. <el-button type="success" round>Success</el-button>
  22. <el-button type="info" round>Info</el-button>
  23. <el-button type="warning" round>Warning</el-button>
  24. <el-button type="danger" round>Danger</el-button>
  25. </el-row>
  26. <el-row>
  27. <el-button :icon="Search" circle />
  28. <el-button type="primary" :icon="Edit" circle />
  29. <el-button type="success" :icon="Check" circle />
  30. <el-button type="info" :icon="Message" circle />
  31. <el-button type="warning" :icon="Star" circle />
  32. <el-button type="danger" :icon="Delete" circle />
  33. </el-row>
  34. </template>
  35. <script lang="ts" setup>
  36. import {
  37. Check,
  38. Delete,
  39. Edit,
  40. Message,
  41. Search,
  42. Star,
  43. } from '@element-plus/icons-vue'
  44. </script>

禁用状态

你可以使用 disabled 属性来定义按钮是否被禁用。

使用 disabled 属性来控制按钮是否为禁用状态。 该属性接受一个 Boolean 类型的值。

Button 按钮 - 图2

  1. <template>
  2. <el-row class="mb-4">
  3. <el-button disabled>Default</el-button>
  4. <el-button type="primary" disabled>Primary</el-button>
  5. <el-button type="success" disabled>Success</el-button>
  6. <el-button type="info" disabled>Info</el-button>
  7. <el-button type="warning" disabled>Warning</el-button>
  8. <el-button type="danger" disabled>Danger</el-button>
  9. </el-row>
  10. <el-row>
  11. <el-button plain disabled>Plain</el-button>
  12. <el-button type="primary" plain disabled>Primary</el-button>
  13. <el-button type="success" plain disabled>Success</el-button>
  14. <el-button type="info" plain disabled>Info</el-button>
  15. <el-button type="warning" plain disabled>Warning</el-button>
  16. <el-button type="danger" plain disabled>Danger</el-button>
  17. </el-row>
  18. </template>

链接按钮

WARNING

type="text" 已被 废弃,将于版本 3.0.0 时 移除,请考虑切换至新的 API。

新的 API link 于 2.2.1 版本添加,同时可以使用 type API 设置链接按钮的主题样式。

Button 按钮 - 图3

  1. <template>
  2. <p>Basic link button</p>
  3. <div class="flex justify-space-between mb-4 flex-wrap gap-4">
  4. <el-button
  5. v-for="button in buttons"
  6. :key="button.text"
  7. :type="button.type"
  8. link
  9. >{{ button.text }}</el-button
  10. >
  11. </div>
  12. <p>Disabled link button</p>
  13. <div class="flex justify-space-between flex-wrap gap-4">
  14. <el-button
  15. v-for="button in buttons"
  16. :key="button.text"
  17. :type="button.type"
  18. link
  19. disabled
  20. >{{ button.text }}</el-button
  21. >
  22. </div>
  23. </template>
  24. <script setup lang="ts">
  25. const buttons = [
  26. { type: '', text: 'plain' },
  27. { type: 'primary', text: 'primary' },
  28. { type: 'success', text: 'success' },
  29. { type: 'info', text: 'info' },
  30. { type: 'warning', text: 'warning' },
  31. { type: 'danger', text: 'danger' },
  32. ] as const
  33. </script>

文字按钮

TIP

文字按钮在现在有了全新的设计样式。 2.2.0 如果您想要使用老版样式的按钮,可以考虑使用 Link 组件。

API也已更新,由于 type 属性会同时控制按钮的样式, 因此我们通过一个新的 API text: boolean 来控制文字按钮。

没有边框和背景色的按钮。

Button 按钮 - 图4

  1. <template>
  2. <p>Basic text button</p>
  3. <div class="flex justify-space-between mb-4 flex-wrap gap-4">
  4. <el-button
  5. v-for="button in buttons"
  6. :key="button.text"
  7. :type="button.type"
  8. text
  9. >{{ button.text }}</el-button
  10. >
  11. </div>
  12. <p>Background color always on</p>
  13. <div class="flex justify-space-between mb-4 flex-wrap gap-4">
  14. <el-button
  15. v-for="button in buttons"
  16. :key="button.text"
  17. :type="button.type"
  18. text
  19. bg
  20. >{{ button.text }}</el-button
  21. >
  22. </div>
  23. <p>Disabled text button</p>
  24. <div class="flex justify-space-between flex-wrap gap-4">
  25. <el-button
  26. v-for="button in buttons"
  27. :key="button.text"
  28. :type="button.type"
  29. text
  30. disabled
  31. >{{ button.text }}</el-button
  32. >
  33. </div>
  34. </template>
  35. <script setup lang="ts">
  36. const buttons = [
  37. { type: '', text: 'plain' },
  38. { type: 'primary', text: 'primary' },
  39. { type: 'success', text: 'success' },
  40. { type: 'info', text: 'info' },
  41. { type: 'warning', text: 'warning' },
  42. { type: 'danger', text: 'danger' },
  43. ] as const
  44. </script>

图标按钮

使用图标为按钮添加更多的含义。 你也可以单独使用图标不添加文字来节省显示区域占用。

使用 icon 属性来为按钮添加图标。 您可以在我们的 Icon 组件中找到所需图标。 通过向右方添加<i>标签来添加图标, 你也可以使用自定义图标。

Button 按钮 - 图5

  1. <template>
  2. <div class="flex">
  3. <el-button type="primary" :icon="Edit" />
  4. <el-button type="primary" :icon="Share" />
  5. <el-button type="primary" :icon="Delete" />
  6. <el-button type="primary" :icon="Search">Search</el-button>
  7. <el-button type="primary">
  8. Upload<el-icon class="el-icon--right"><Upload /></el-icon>
  9. </el-button>
  10. </div>
  11. </template>
  12. <script setup lang="ts">
  13. import { Delete, Edit, Search, Share, Upload } from '@element-plus/icons-vue'
  14. </script>

按钮组

以按钮组的方式出现,常用于多项类似操作。

使用 <el-button-group> 对多个按钮分组。

Button 按钮 - 图6

  1. <template>
  2. <el-button-group>
  3. <el-button type="primary" :icon="ArrowLeft">Previous Page</el-button>
  4. <el-button type="primary">
  5. Next Page<el-icon class="el-icon--right"><ArrowRight /></el-icon>
  6. </el-button>
  7. </el-button-group>
  8. <el-button-group class="ml-4">
  9. <el-button type="primary" :icon="Edit" />
  10. <el-button type="primary" :icon="Share" />
  11. <el-button type="primary" :icon="Delete" />
  12. </el-button-group>
  13. </template>
  14. <script setup lang="ts">
  15. import {
  16. ArrowLeft,
  17. ArrowRight,
  18. Delete,
  19. Edit,
  20. Share,
  21. } from '@element-plus/icons-vue'
  22. </script>

加载状态按钮

点击按钮来加载数据,并向用户反馈加载状态。

通过设置 loading 属性为 true 来显示加载中状态。

TIP

您可以使用 loading 插槽或 loadingIcon属性自定义您的loading图标

ps: loading 插槽优先级高于loadingIcon属性

Button 按钮 - 图7

  1. <template>
  2. <el-button type="primary" loading>Loading</el-button>
  3. <el-button type="primary" :loading-icon="Eleme" loading>Loading</el-button>
  4. <el-button type="primary" loading>
  5. <template #loading>
  6. <div class="custom-loading">
  7. <svg class="circular" viewBox="-10, -10, 50, 50">
  8. <path
  9. class="path"
  10. d="
  11. M 30 15
  12. L 28 17
  13. M 25.61 25.61
  14. A 15 15, 0, 0, 1, 15 30
  15. A 15 15, 0, 1, 1, 27.99 7.5
  16. L 15 15
  17. "
  18. style="stroke-width: 4px; fill: rgba(0, 0, 0, 0)"
  19. />
  20. </svg>
  21. </div>
  22. </template>
  23. Loading
  24. </el-button>
  25. </template>
  26. <script lang="ts" setup>
  27. import { Eleme } from '@element-plus/icons-vue'
  28. </script>
  29. <style scoped>
  30. .el-button .custom-loading .circular {
  31. margin-right: 6px;
  32. width: 18px;
  33. height: 18px;
  34. animation: loading-rotate 2s linear infinite;
  35. }
  36. .el-button .custom-loading .circular .path {
  37. animation: loading-dash 1.5s ease-in-out infinite;
  38. stroke-dasharray: 90, 150;
  39. stroke-dashoffset: 0;
  40. stroke-width: 2;
  41. stroke: var(--el-button-text-color);
  42. stroke-linecap: round;
  43. }
  44. </style>

调整尺寸

除了默认的大小,按钮组件还提供了几种额外的尺寸可供选择,以便适配不同的场景。

使用 size 属性额外配置尺寸,可使用 largesmall两种值。

Button 按钮 - 图8

  1. <template>
  2. <el-row>
  3. <el-button size="large">Large</el-button>
  4. <el-button>Default</el-button>
  5. <el-button size="small">Small</el-button>
  6. <el-button size="large" :icon="Search">Search</el-button>
  7. <el-button :icon="Search">Search</el-button>
  8. <el-button size="small" :icon="Search">Search</el-button>
  9. </el-row>
  10. <el-row class="my-4">
  11. <el-button size="large" round>Large</el-button>
  12. <el-button round>Default</el-button>
  13. <el-button size="small" round>Small</el-button>
  14. <el-button size="large" :icon="Search" round>Search</el-button>
  15. <el-button :icon="Search" round>Search</el-button>
  16. <el-button size="small" :icon="Search" round>Search</el-button>
  17. </el-row>
  18. <el-row>
  19. <el-button :icon="Search" size="large" circle />
  20. <el-button :icon="Search" circle />
  21. <el-button :icon="Search" size="small" circle />
  22. </el-row>
  23. </template>
  24. <script setup lang="ts">
  25. import { Search } from '@element-plus/icons-vue'
  26. </script>

自定义颜色 beta

您可以自定义按钮颜色。

我们将自动计算 hover 和 active 颜色。

Button 按钮 - 图9

  1. <script lang="ts" setup>
  2. import { isDark } from '~/composables/dark'
  3. </script>
  4. <template>
  5. <div class="flex">
  6. <el-button color="#626aef" :dark="isDark">Default</el-button>
  7. <el-button color="#626aef" :dark="isDark" plain>Plain</el-button>
  8. <el-button color="#626aef" :dark="isDark" disabled>Disabled</el-button>
  9. <el-button color="#626aef" :dark="isDark" disabled plain
  10. >Disabled Plain</el-button
  11. >
  12. </div>
  13. </template>

Button 属性

属性说明类型可选值默认值
size尺寸stringlarge / default /small
type类型stringprimary / success / warning / danger / info / text
plain是否为朴素按钮booleanfalse
text2.2.0是否为文字按钮booleanfalse
bg 2.2.0是否显示文字按钮背景颜色booleanfalse
link 2.2.1是否为链接按钮booleanfalse
round是否为圆角按钮booleanfalse
circle是否为圆形按钮booleanfalse
loading是否为加载中状态booleanfalse
loading-icon自定义加载中状态图标组件string | ComponentLoading
disabled按钮是否为禁用状态booleanfalse
icon图标组件string | Component
autofocus原生 autofocus 属性booleanfalse
native-type原生 type 属性stringbutton / submit / resetbutton
auto-insert-space自动在两个中文字符之间插入空格boolean

Button 插槽

插槽名说明
自定义默认内容
loading自定义加载中组件
icon自定义图标组件

Button-Group 属性

属性说明类型可选值默认值
size用于控制该按钮组内按钮的大小string与按钮的大小相同
type用于控制该按钮组内按钮的类型string与按钮的类型一致

Button-Group 插槽

插槽名说明子标签
-自定义按钮组内容Button

源代码

组件 Button 按钮 - 图10 文档 Button 按钮 - 图11

贡献者

Button 按钮 - 图12 云游君

Button 按钮 - 图13 三咲智子

Button 按钮 - 图14 JeremyWuuuuu

Button 按钮 - 图15 Xc

Button 按钮 - 图16 zz

Button 按钮 - 图17 msidolphin

Button 按钮 - 图18 C.Y.Kun

Button 按钮 - 图19 Delyan Haralanov

Button 按钮 - 图20 btea

Button 按钮 - 图21 神楽坂みずき

Button 按钮 - 图22 Aex

Button 按钮 - 图23 啝裳

Button 按钮 - 图24 Ryan2128

Button 按钮 - 图25 qiang

Button 按钮 - 图26 류한경

Button 按钮 - 图27 0song

Button 按钮 - 图28 Herrington Darkholme

Button 按钮 - 图29 Alan Wang

Button 按钮 - 图30 blackie

Button 按钮 - 图31 iamkun

Button 按钮 - 图32 Vincent Guo

Button 按钮 - 图33 Map1en_

Button 按钮 - 图34 on the field of hope

Button 按钮 - 图35 Hades-li

Button 按钮 - 图36 愧怍

Button 按钮 - 图37 muhammadcahya

Button 按钮 - 图38 刘小灰