index.less 2.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112
  1. @import './var.less';
  2. :root {
  3. --van-loading-text-color: @loading-text-color;
  4. --van-loading-text-font-size: @loading-text-font-size;
  5. --van-loading-spinner-color: @loading-spinner-color;
  6. --van-loading-spinner-size: @loading-spinner-size;
  7. --van-loading-spinner-animation-duration: @loading-spinner-animation-duration;
  8. }
  9. .van-loading {
  10. position: relative;
  11. color: var(--van-loading-spinner-color);
  12. font-size: 0;
  13. vertical-align: middle;
  14. &__spinner {
  15. position: relative;
  16. display: inline-block;
  17. width: var(--van-loading-spinner-size);
  18. // compatible for 1.x, users may set width or height in root element
  19. max-width: 100%;
  20. height: var(--van-loading-spinner-size);
  21. max-height: 100%;
  22. vertical-align: middle;
  23. animation: van-rotate var(--van-loading-spinner-animation-duration) linear
  24. infinite;
  25. &--spinner {
  26. animation-timing-function: steps(12);
  27. }
  28. &--circular {
  29. animation-duration: 2s;
  30. }
  31. }
  32. &__line {
  33. position: absolute;
  34. top: 0;
  35. left: 0;
  36. width: 100%;
  37. height: 100%;
  38. &::before {
  39. display: block;
  40. width: 2px;
  41. height: 25%;
  42. margin: 0 auto;
  43. background-color: currentColor;
  44. border-radius: 40%;
  45. content: ' ';
  46. }
  47. }
  48. &__circular {
  49. display: block;
  50. width: 100%;
  51. height: 100%;
  52. circle {
  53. animation: van-circular 1.5s ease-in-out infinite;
  54. stroke: currentColor;
  55. stroke-width: 3;
  56. stroke-linecap: round;
  57. }
  58. }
  59. &__text {
  60. display: inline-block;
  61. margin-left: var(--van-padding-xs);
  62. color: var(--van-loading-text-color);
  63. font-size: var(--van-loading-text-font-size);
  64. vertical-align: middle;
  65. }
  66. &--vertical {
  67. display: flex;
  68. flex-direction: column;
  69. align-items: center;
  70. .van-loading__text {
  71. margin: var(--van-padding-xs) 0 0;
  72. }
  73. }
  74. }
  75. @keyframes van-circular {
  76. 0% {
  77. stroke-dasharray: 1, 200;
  78. stroke-dashoffset: 0;
  79. }
  80. 50% {
  81. stroke-dasharray: 90, 150;
  82. stroke-dashoffset: -40;
  83. }
  84. 100% {
  85. stroke-dasharray: 90, 150;
  86. stroke-dashoffset: -120;
  87. }
  88. }
  89. .generate-spinner(@n, @i: 1) when (@i =< @n) {
  90. .van-loading__line--@{i} {
  91. transform: rotate(@i * 30deg);
  92. opacity: 1 - (0.75 / 12) * (@i - 1);
  93. }
  94. .generate-spinner(@n, (@i + 1));
  95. }
  96. .generate-spinner(12);