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`] = `
+