diff --git a/packages/button/demo/index.vue b/packages/button/demo/index.vue index afb6c9b2c..1d5f9c1d1 100644 --- a/packages/button/demo/index.vue +++ b/packages/button/demo/index.vue @@ -23,6 +23,21 @@ /> + + + + + Danger ``` +#### Hairline + +```html +Hairline +Hairline +``` + #### Disabled ```html diff --git a/packages/button/index.less b/packages/button/index.less index f1acbe5bf..57ef45d6c 100644 --- a/packages/button/index.less +++ b/packages/button/index.less @@ -6,10 +6,10 @@ display: inline-block; height: 44px; line-height: 42px; - border-radius: 2px; - box-sizing: border-box; font-size: 16px; text-align: center; + box-sizing: border-box; + border-radius: @button-border-radius; -webkit-appearance: none; -webkit-text-size-adjust: 100%; @@ -132,12 +132,12 @@ } &--bottom-action { + border: 0; width: 100%; height: 50px; - line-height: 50px; - border: 0; - border-radius: 0; font-size: 16px; + line-height: 50px; + border-radius: 0; color: @button-bottom-action-default-color; background-color: @button-bottom-action-default-background-color; @@ -151,7 +151,7 @@ } &--round { - border-radius: 10em; + border-radius: @button-round-border-radius; } &--square { @@ -163,4 +163,17 @@ display: inline-block; vertical-align: middle; } + + &--hairline { + border-width: 0; + + &::after { + border-color: inherit; + border-radius: @button-border-radius * 2; + } + + &.van-button--round::after { + border-radius: @button-round-border-radius; + } + } } diff --git a/packages/button/index.tsx b/packages/button/index.tsx index 2a8de69ad..cfe1f4b24 100644 --- a/packages/button/index.tsx +++ b/packages/button/index.tsx @@ -10,13 +10,14 @@ import { DefaultSlots } from '../utils/use/sfc'; export type ButtonProps = RouteProps & { tag: keyof HTMLElementTagNameMap | string; type: 'default' | 'primary' | 'info' | 'warning' | 'danger'; - size: 'large' | 'normal' | 'small' | 'mini' + size: 'large' | 'normal' | 'small' | 'mini'; text?: string; block?: boolean; plain?: boolean; round?: boolean; square?: boolean; loading?: boolean; + hairline?: boolean; disabled?: boolean; nativeType?: string; loadingSize: string; @@ -36,7 +37,7 @@ function Button( slots: DefaultSlots, ctx: RenderContext ) { - const { tag, type, disabled, loading, loadingText } = props; + const { tag, type, disabled, loading, hairline, loadingText } = props; const onClick = (event: Event) => { if (!loading && !disabled) { @@ -49,31 +50,36 @@ function Button( {loading ? ( [ - , + , loadingText && {loadingText} ] ) : ( - - {slots.default ? slots.default() : props.text} - + {slots.default ? slots.default() : props.text} )} ); @@ -87,6 +93,7 @@ Button.props = { round: Boolean, square: Boolean, loading: Boolean, + hairline: Boolean, disabled: Boolean, nativeType: String, loadingText: String, diff --git a/packages/button/test/__snapshots__/demo.spec.js.snap b/packages/button/test/__snapshots__/demo.spec.js.snap index ff5d9b8d7..1f31489f0 100644 --- a/packages/button/test/__snapshots__/demo.spec.js.snap +++ b/packages/button/test/__snapshots__/demo.spec.js.snap @@ -6,6 +6,7 @@ exports[`renders demo correctly 1`] = `
+