Skip to content

Button 按钮

常用的操作按钮。

基础用法

基础的按钮用法。使用 typeplainroundcircle 属性来定义按钮的样式。

<template>
  <div class="demo-button">
    <p>
      <n-button>Default</n-button>
      <n-button type="primary">Primary</n-button>
      <n-button type="success">Success</n-button>
      <n-button type="info">Info</n-button>
      <n-button type="warning">Warning</n-button>
      <n-button type="danger">Danger</n-button>
    </p>

    <p>
      <n-button plain>Plain</n-button>
      <n-button type="primary" plain>Primary</n-button>
      <n-button type="success" plain>Success</n-button>
      <n-button type="info" plain>Info</n-button>
      <n-button type="warning" plain>Warning</n-button>
      <n-button type="danger" plain>Danger</n-button>
    </p>

    <p>
      <n-button round>Round</n-button>
      <n-button type="primary" round>Primary</n-button>
      <n-button type="success" round>Success</n-button>
      <n-button type="info" round>Info</n-button>
      <n-button type="warning" round>Warning</n-button>
      <n-button type="danger" round>Danger</n-button>
    </p>

    <p>
      <n-button icon="search" circle />
      <n-button type="primary" icon="edit" circle />
      <n-button type="success" icon="check" circle />
      <n-button type="info" icon="message" circle />
      <n-button type="warning" icon="star" circle />
      <n-button type="danger" icon="trash" circle />
    </p>
  </div>
</template>

<style scoped>
.demo-button p {
  display: flex;
  gap: 5px;
}

.demo-button p:not(:last-child) {
  border-bottom: 1px solid var(--vp-c-divider-light);
}

.demo-button .n-button {
  margin: 0 8px 8px 0;
}
</style>

禁用状态

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

<template>
  <div class="demo-button">
    <p>
      <n-button>Default</n-button>
      <n-button type="primary">Primary</n-button>
      <n-button type="success">Success</n-button>
      <n-button type="info">Info</n-button>
      <n-button type="warning">Warning</n-button>
      <n-button type="danger">Danger</n-button>
    </p>
    <p>
      <n-button disabled>Default</n-button>
      <n-button type="primary" disabled>Primary</n-button>
      <n-button type="success" disabled>Success</n-button>
      <n-button type="info" disabled>Info</n-button>
      <n-button type="warning" disabled>Warning</n-button>
      <n-button type="danger" disabled>Danger</n-button>
    </p>
  </div>
</template>

<style scoped>
.demo-button p {
  display: flex;
  gap: 5px;
}

.demo-button p:not(:last-child) {
  border-bottom: 1px solid var(--vp-c-divider-light);
}

.demo-button .n-button {
  margin: 0 8px 8px 0;
}
</style>

图标按钮

带图标的按钮可增强辨识度(有文字)或节省空间(无文字)。

<template>
  <div class="demo-button">
    <n-button type="primary" icon="edit" />
    <n-button type="primary" icon="share" />
    <n-button type="primary" icon="trash" />
    <n-button type="primary" icon="search">Search</n-button>
    <n-button type="primary">
      Upload<n-icon icon="upload" style="margin-left: 8px" />
    </n-button>
  </div>
</template>

<style scoped>
.demo-button .n-button {
  margin: 0 8px 8px 0;
}

.demo-button {
  display: flex;
  gap: 5px;
}
</style>

按钮组

以按钮组的方式出现,常用于多项类似操作。使用 <n-button-group> 标签来嵌套你的按钮。

<template>
  <p>
    <n-button-group disabled>
      <n-button type="primary" icon="arrow-left">Previous Page</n-button>
      <n-button type="primary">
        Next Page<n-icon icon="arrow-right" style="margin-left: 8px" />
      </n-button>
    </n-button-group>
  </p>
  <p>
    <n-button-group type="warning" size="small">
      <n-button type="primary" icon="edit" round />
      <n-button type="primary" icon="share" />
      <n-button type="primary" icon="trash" round />
    </n-button-group>
  </p>
</template>

加载中

点击按钮后进行数据加载操作,在按钮上显示加载状态。

<template>
  <div class="demo-button">
    <n-button type="primary" loading>Loading</n-button>
    <n-button type="primary" loading-icon="circle-notch" loading
      >Loading</n-button
    >
    <n-button type="primary" loading>
      <template #loading>
        <n-icon style="margin-right: 6px" icon="star" spin />
      </template>
      Loading
    </n-button>
  </div>
</template>

<style scoped>
.demo-button .n-button {
  margin: 0 8px 8px 0;
}

.demo-button {
  display: flex;
  gap: 5px;
}
</style>

不同尺寸

除了默认尺寸,按钮组件还提供了额外的尺寸供选择。

<template>
  <div class="demo-button">
    <p>
      <n-button size="large">Large</n-button>
      <n-button>Default</n-button>
      <n-button size="small">Small</n-button>
      <n-button size="large" icon="search">Search</n-button>
      <n-button icon="search">Search</n-button>
      <n-button size="small" icon="search">Search</n-button>
    </p>

    <p>
      <n-button size="large" round>Large</n-button>
      <n-button round>Default</n-button>
      <n-button size="small" round>Small</n-button>
      <n-button size="large" icon="search" round>Search</n-button>
      <n-button icon="search" round>Search</n-button>
      <n-button size="small" icon="search" round>Search</n-button>
    </p>

    <p>
      <n-button size="large" icon="search" circle />
      <n-button icon="search" circle />
      <n-button size="small" icon="search" circle />
    </p>
  </div>
</template>

<style scoped>
.demo-button p {
  display: flex;
  gap: 5px;
}

.demo-button p:not(:last-child) {
  border-bottom: 1px solid var(--vp-c-divider-light);
}

.demo-button .n-button {
  margin: 0 8px 8px 0;
}
</style>

API

Button Props

名称说明类型默认值
type类型'primary' | 'success' | 'warning' | 'danger' | 'info'-
size尺寸'large' | 'default' | 'small''default'
plain是否朴素按钮booleanfalse
round是否圆角按钮booleanfalse
circle是否圆形按钮booleanfalse
loading是否加载中状态booleanfalse
disabled是否禁用状态booleanfalse
icon图标组件string-
autofocus是否默认聚焦booleanfalse
native-type原生 type 属性'button' | 'submit' | 'reset''button'

Button Events

事件名说明类型
click点击按钮时触发(event: MouseEvent) => void
focus按钮获得焦点时触发(event: FocusEvent) => void
blur按钮失去焦点时触发(event: FocusEvent) => void

Button Slots

插槽名说明作用域参数
default按钮的内容-
icon自定义图标-
loading自定义加载中图标-

Button Expose

名称说明类型
ref按钮元素的引用Ref<HTMLButtonElement>
focus使按钮获得焦点() => void
blur使按钮失去焦点() => void

Button Group Props

名称说明类型默认值
size用于控制该按钮组内按钮的大小'large' | 'default' | 'small''default'

Button Group Slots

插槽名说明作用域参数
default按钮组的内容,通常是多个按钮-

样式变量

变量名说明默认值
--nano-button-font-size字体大小var(--nano-font-size-base)
--nano-button-font-weight字重500
--nano-button-border-radius圆角var(--nano-border-radius-base)
--nano-button-padding-vertical垂直内边距8px
--nano-button-padding-horizontal水平内边距15px
--nano-button-hover-text-color悬浮文字颜色var(--nano-color-primary)
--nano-button-hover-bg-color悬浮背景色var(--nano-color-primary-light-9)
--nano-button-hover-border-color悬浮边框色var(--nano-color-primary-light-7)
--nano-button-active-text-color激活文字颜色var(--nano-color-primary-dark-2)
--nano-button-disabled-text-color禁用文字颜色var(--nano-text-color-placeholder)
--nano-button-disabled-bg-color禁用背景色var(--nano-fill-color-blank)
--nano-button-disabled-border-color禁用边框色var(--nano-border-color-lighter)