index.less 6.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238
  1. @import './var.less';
  2. :root {
  3. --van-button-mini-height: @button-mini-height;
  4. --van-button-mini-padding: @button-mini-padding;
  5. --van-button-mini-font-size: @button-mini-font-size;
  6. --van-button-small-height: @button-small-height;
  7. --van-button-small-padding: @button-small-padding;
  8. --van-button-small-font-size: @button-small-font-size;
  9. --van-button-normal-padding: @button-normal-padding;
  10. --van-button-normal-font-size: @button-normal-font-size;
  11. --van-button-large-height: @button-large-height;
  12. --van-button-default-height: @button-default-height;
  13. --van-button-default-line-height: @button-default-line-height;
  14. --van-button-default-font-size: @button-default-font-size;
  15. --van-button-default-color: @button-default-color;
  16. --van-button-default-background-color: @button-default-background-color;
  17. --van-button-default-border-color: @button-default-border-color;
  18. --van-button-primary-color: @button-primary-color;
  19. --van-button-primary-background-color: @button-primary-background-color;
  20. --van-button-primary-border-color: @button-primary-border-color;
  21. --van-button-success-color: @button-success-color;
  22. --van-button-success-background-color: @button-success-background-color;
  23. --van-button-success-border-color: @button-success-border-color;
  24. --van-button-danger-color: @button-danger-color;
  25. --van-button-danger-background-color: @button-danger-background-color;
  26. --van-button-danger-border-color: @button-danger-border-color;
  27. --van-button-warning-color: @button-warning-color;
  28. --van-button-warning-background-color: @button-warning-background-color;
  29. --van-button-warning-border-color: @button-warning-border-color;
  30. --van-button-border-width: @button-border-width;
  31. --van-button-border-radius: @button-border-radius;
  32. --van-button-round-border-radius: @button-round-border-radius;
  33. --van-button-plain-background-color: @button-plain-background-color;
  34. --van-button-disabled-opacity: @button-disabled-opacity;
  35. --van-button-icon-size: @button-icon-size;
  36. --van-button-loading-icon-size: @button-loading-icon-size;
  37. }
  38. .van-button {
  39. position: relative;
  40. display: inline-block;
  41. box-sizing: border-box;
  42. height: var(--van-button-default-height);
  43. margin: 0;
  44. padding: 0;
  45. font-size: var(--van-button-default-font-size);
  46. line-height: var(--van-button-default-line-height);
  47. text-align: center;
  48. border-radius: var(--van-button-border-radius);
  49. cursor: pointer;
  50. transition: opacity var(--van-animation-duration-fast);
  51. -webkit-appearance: none;
  52. &::before {
  53. position: absolute;
  54. top: 50%;
  55. left: 50%;
  56. width: 100%;
  57. height: 100%;
  58. background: var(--van-black);
  59. border: inherit;
  60. border-color: var(--van-black);
  61. border-radius: inherit; /* inherit parent's border radius */
  62. transform: translate(-50%, -50%);
  63. opacity: 0;
  64. content: ' ';
  65. }
  66. &:active::before {
  67. opacity: 0.1;
  68. }
  69. &--loading,
  70. &--disabled {
  71. &::before {
  72. display: none;
  73. }
  74. }
  75. &--default {
  76. color: var(--van-button-default-color);
  77. background: var(--van-button-default-background-color);
  78. border: var(--van-button-border-width) solid
  79. var(--van-button-default-border-color);
  80. }
  81. &--primary {
  82. color: var(--van-button-primary-color);
  83. background: var(--van-button-primary-background-color);
  84. border: var(--van-button-border-width) solid
  85. var(--van-button-primary-border-color);
  86. }
  87. &--success {
  88. color: var(--van-button-success-color);
  89. background: var(--van-button-success-background-color);
  90. border: var(--van-button-border-width) solid
  91. var(--van-button-success-border-color);
  92. }
  93. &--danger {
  94. color: var(--van-button-danger-color);
  95. background: var(--van-button-danger-background-color);
  96. border: var(--van-button-border-width) solid
  97. var(--van-button-danger-border-color);
  98. }
  99. &--warning {
  100. color: var(--van-button-warning-color);
  101. background: var(--van-button-warning-background-color);
  102. border: var(--van-button-border-width) solid
  103. var(--van-button-warning-border-color);
  104. }
  105. &--plain {
  106. background: var(--van-button-plain-background-color);
  107. &.van-button--primary {
  108. color: var(--van-button-primary-background-color);
  109. }
  110. &.van-button--success {
  111. color: var(--van-button-success-background-color);
  112. }
  113. &.van-button--danger {
  114. color: var(--van-button-danger-background-color);
  115. }
  116. &.van-button--warning {
  117. color: var(--van-button-warning-background-color);
  118. }
  119. }
  120. &--large {
  121. width: 100%;
  122. height: var(--van-button-large-height);
  123. }
  124. &--normal {
  125. padding: var(--van-button-normal-padding);
  126. font-size: var(--van-button-normal-font-size);
  127. }
  128. &--small {
  129. height: var(--van-button-small-height);
  130. padding: var(--van-button-small-padding);
  131. font-size: var(--van-button-small-font-size);
  132. }
  133. &__loading {
  134. color: inherit;
  135. font-size: inherit;
  136. .van-loading__spinner {
  137. color: currentColor;
  138. width: var(--van-button-loading-icon-size);
  139. height: var(--van-button-loading-icon-size);
  140. }
  141. }
  142. &--mini {
  143. height: var(--van-button-mini-height);
  144. padding: var(--van-button-mini-padding);
  145. font-size: var(--van-button-mini-font-size);
  146. & + .van-button--mini {
  147. margin-left: var(--van-padding-base);
  148. }
  149. }
  150. &--block {
  151. display: block;
  152. width: 100%;
  153. }
  154. &--disabled {
  155. cursor: not-allowed;
  156. opacity: var(--van-button-disabled-opacity);
  157. }
  158. &--loading {
  159. cursor: default;
  160. }
  161. &--round {
  162. border-radius: var(--van-button-round-border-radius);
  163. }
  164. &--square {
  165. border-radius: 0;
  166. }
  167. // align-items are ignored when flex container is a button in legacy safari
  168. // see: https://bugs.webkit.org/show_bug.cgi?id=169700
  169. &__content {
  170. display: flex;
  171. align-items: center;
  172. justify-content: center;
  173. height: 100%;
  174. // fix icon vertical align
  175. // see: https://github.com/vant-ui/vant/issues/7617
  176. &::before {
  177. content: ' ';
  178. }
  179. }
  180. &__icon {
  181. font-size: var(--van-button-icon-size);
  182. line-height: inherit;
  183. }
  184. &__icon + &__text,
  185. &__loading + &__text,
  186. &__text + &__icon,
  187. &__text + &__loading {
  188. margin-left: var(--van-padding-base);
  189. }
  190. &--hairline {
  191. border-width: 0;
  192. &::after {
  193. border-color: inherit;
  194. border-radius: calc(var(--van-button-border-radius) * 2);
  195. }
  196. &.van-button--round::after {
  197. border-radius: var(--van-button-round-border-radius);
  198. }
  199. &.van-button--square::after {
  200. border-radius: 0;
  201. }
  202. }
  203. }