🎨 Button 按钮组件
🎨 Button 按钮组件
使用方式分析
基础用法
- 直接使用,无需传递任何参数即可渲染默认按钮
属性配置
type- 主题颜色size- 按钮尺寸plain- 朴素按钮,仅显示边框round- 圆角按钮disabled- 禁用状态
事件支持
click- 点击事件focus- 获得焦点blur- 失去焦点
📁 目录结构
- src/components/Button
- 创建基本按钮
<template> <button class="c-button"> <slot /> </button> </template> - 增加样式
.c-button { // xxxx.... 默认样式 font-weight: var(--button-font-weight); user-select: none; vertical-align: middle; padding: 12px 20px; background-color: var(--button-bg-color); border: var(--border); border-color: var(--button-border-color); color: var(--button-text-color); font-size: var(--font-size-base); border-radius: var(--border-radius-base); } .c-button { --button-font-weight: var(--font-weight-primary); --button-border-color: var(--border-color); --button-bg-color: var(--fill-color-blank); --button-text-color: var(--text-color-regular); --button-disabled-text-color: var(--disabled-text-color); --button-disabled-bg-color: var(--fill-color-blank); --button-disabled-border-color: var(--border-color-light); --button-hover-text-color: var(--color-primary); --button-hover-bg-color: var(--color-primary-light-9); --button-hover-border-color: var(--color-primary-light-7); --button-active-text-color: var(--button-hover-text-color); --button-active-border-color: var(--color-primary); --button-active-bg-color: var(--button-hover-bg-color); --button-outline-color: var(--color-primary-light-5); --button-active-color: var(--text-color-primary); &:hover, &:focus { // xxx } &:active { // xx } }- 至此默认样式已经设置完、普通按钮就可以使用了
- 根据主题色生成 button 的颜色
也就是根据 type 改一下样式 变量
@each $type in primary, success, warning, danger, info { .c-button--#{$type} { --button-text-color: var(--color-white); --button-bg-color: var(--color-#{$type}); --button-border-color: var(--color-#{$type}); --button-outline-color: var(--color-#{$type}-light-5); --button-active-color: var(--color-#{$type}-dark-2); --button-hover-text-color: var(--color-white); --button-hover-bg-color: var(--color-#{$type}-light-3); --button-hover-border-color: var(--color-#{$type}-light-3); --button-active-bg-color: var(--color-#{$type}-dark-2); --button-active-border-color: var(--color-#{$type}-dark-2); --button-disabled-text-color: var(--color-white); --button-disabled-bg-color: var(--color-#{$type}-light-5); --button-disabled-border-color: var(--color-#{$type}-light-5); } }<template> <button class="c-button" :class="{ [`c-button--${type}`]: type, // [!code ++] }" > <span> // [!code ++] <slot /> // [!code ++] </span> </button> </template>
后续流程类似,根据传递进的值给增加对应的 class 改变样式变量
- 如 round
<template> <button class="c-button" :class="{ [`c-button--${type}`]: type, 'is-round': round, }" > <span> <slot /> </span> </button> </template>.c-button { //..... &:hover, &:focus { // xxx } &:active { // xx } &.is-round { border-radius: var(--border-radius-round); }}