返回组件库

极光按钮

复刻来源linear.app
React · Vue3按钮互动ReactVue3CSS 原生

指针悬停时高光带扫过按钮表面,适合主行动点与结账流程。

业务项目无源码 → 我们复刻实现,自动适配 Vue3,复制代码拿去即可使用。

演示预览实时时长 1x
微光扫掠渐变高光
播放速度已适配 prefers-reduced-motion
AuroraButton.vue
<!--
  OmniMotion — 极光按钮 (Aurora Button)
  框架: Vue 3 (script setup) · 纯 CSS 版本
  用法: <AuroraButton variant="solid" size="md">立即开始</AuroraButton>
-->
<template>
  <button
    type="button"
    class="mk-aurora"
    :class="[`mk-aurora--${variant}`, `mk-aurora--${size}`]"
    :aria-busy="loading || undefined"
    :disabled="loading || disabled"
    @click="$emit('click', $event)"
  >
    <span class="mk-aurora__glow" aria-hidden="true" />
    <span class="mk-aurora__label">
      <slot>{{ loading ? '处理中…' : '' }}</slot>
    </span>
  </button>
</template>

<script setup>
defineProps({
  variant: { type: String, default: 'solid' },
  size: { type: String, default: 'md' },
  loading: { type: Boolean, default: false },
  disabled: { type: Boolean, default: false },
})
defineEmits(['click'])
</script>

<style scoped>
.mk-aurora {
  position: relative;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  gap: 8px;
  font-weight: 600;
  line-height: 1;
  border-radius: 4px;
  overflow: hidden;
  isolation: isolate;
}
.mk-aurora--sm { height: 36px; padding: 0 16px; font-size: 13px; }
.mk-aurora--md { height: 44px; padding: 0 20px; font-size: 15px; }
.mk-aurora--lg { height: 52px; padding: 0 24px; font-size: 16px; }
.mk-aurora--solid { background: var(--mk-primary); color: var(--mk-primary-foreground); }
.mk-aurora--outline {
  background: transparent;
  color: var(--mk-primary);
  border: 1px solid var(--mk-primary-quiet);
}
.mk-aurora__label { position: relative; z-index: 1; }
.mk-aurora__glow {
  position: absolute;
  inset: 0;
  pointer-events: none;
  background: linear-gradient(100deg, transparent 34%, rgba(255, 255, 255, 0.42) 50%, transparent 66%);
  transform: translate3d(-120%, 0, 0) skewX(-18deg);
}
.mk-aurora:hover .mk-aurora__glow {
  animation: mk-aurora-sweep 2.6s cubic-bezier(0.2, 0.8, 0.2, 1) infinite;
}
@keyframes mk-aurora-sweep {
  0%   { transform: translate3d(-120%, 0, 0) skewX(-18deg); opacity: 0; }
  18%  { opacity: 0.85; }
  100% { transform: translate3d(220%, 0, 0) skewX(-18deg); opacity: 0; }
}
@media (prefers-reduced-motion: reduce) {
  .mk-aurora__glow { animation: none !important; }
}
</style>
属性 · Props
属性类型默认值说明
variant"solid" | "outline"solid控制按钮的视觉样式
size"sm" | "md" | "lg"md控制按钮尺寸
loadingbooleanfalse展示处理中状态并禁用点击
disabledbooleanfalse禁用按钮
onClick() => void—点击回调
<button className="mk-aurora">开始使用</button>