_steps.scss 2.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156
  1. //
  2. // Steps
  3. //
  4. .steps {
  5. --#{$prefix}steps-color: #{$steps-color};
  6. --#{$prefix}steps-inactive-color: #{$steps-inactive-color};
  7. --#{$prefix}steps-dot-size: .5rem;
  8. --#{$prefix}steps-border-width: #{$steps-border-width};
  9. display: flex;
  10. flex-wrap: nowrap;
  11. width: 100%;
  12. padding: 0;
  13. margin: 0;
  14. list-style: none;
  15. }
  16. @each $name, $color in $extra-colors {
  17. .steps-#{$name} {
  18. --#{$prefix}steps-color: var(--#{$prefix}#{$name});
  19. &-lt {
  20. --#{$prefix}steps-color: var(--#{$prefix}#{$name}-lt);
  21. }
  22. }
  23. }
  24. //
  25. // Step item
  26. //
  27. .step-item {
  28. position: relative;
  29. flex: 1 1 0;
  30. min-height: 1rem;
  31. margin-top: 0;
  32. color: inherit;
  33. text-align: center;
  34. cursor: default;
  35. padding-top: calc(var(--#{$prefix}steps-dot-size));
  36. @at-root a#{&} {
  37. cursor: pointer;
  38. &:hover {
  39. color: inherit;
  40. }
  41. }
  42. &:after,
  43. &:before {
  44. background: var(--#{$prefix}steps-color);
  45. }
  46. &:not(:last-child):after {
  47. position: absolute;
  48. left: 50%;
  49. width: 100%;
  50. content: "";
  51. transform: translateY(-50%);
  52. }
  53. &:after {
  54. top: calc(var(--#{$prefix}steps-dot-size) * .5);
  55. height: var(--#{$prefix}steps-border-width);
  56. }
  57. &:before {
  58. content: "";
  59. position: absolute;
  60. top: 0;
  61. left: 50%;
  62. z-index: 1;
  63. box-sizing: content-box;
  64. display: flex;
  65. align-items: center;
  66. justify-content: center;
  67. border-radius: $border-radius-pill;
  68. transform: translateX(-50%);
  69. color: var(--#{$prefix}white);
  70. width: var(--#{$prefix}steps-dot-size);
  71. height: var(--#{$prefix}steps-dot-size);
  72. }
  73. &.active {
  74. font-weight: var(--#{$prefix}font-weight-bold);
  75. &:after {
  76. background: var(--#{$prefix}steps-inactive-color);
  77. }
  78. & ~ .step-item {
  79. color: var(--#{$prefix}disabled-color);
  80. &:after,
  81. &:before {
  82. background: var(--#{$prefix}steps-inactive-color);
  83. }
  84. }
  85. }
  86. }
  87. //
  88. // Steps counter
  89. //
  90. .steps-counter {
  91. --#{$prefix}steps-dot-size: 1.5rem;
  92. counter-reset: steps;
  93. .step-item {
  94. counter-increment: steps;
  95. &:before {
  96. content: counter(steps);
  97. }
  98. }
  99. }
  100. //
  101. // Steps vertical
  102. //
  103. .steps-vertical {
  104. --#{$prefix}steps-dot-offset: 6px;
  105. flex-direction: column;
  106. &.steps-counter {
  107. --#{$prefix}steps-dot-offset: -2px;
  108. }
  109. .step-item {
  110. text-align: left;
  111. padding-top: 0;
  112. padding-left: calc(var(--#{$prefix}steps-dot-size) + 1rem);
  113. min-height: auto;
  114. &:not(:first-child) {
  115. margin-top: 1rem;
  116. }
  117. &:before {
  118. top: var(--#{$prefix}steps-dot-offset);
  119. left: 0;
  120. transform: translate(0, 0);
  121. }
  122. &:not(:last-child) {
  123. &:after {
  124. position: absolute;
  125. content: '';
  126. transform: translateX(-50%);
  127. top: var(--#{$prefix}steps-dot-offset);
  128. left: calc(var(--#{$prefix}steps-dot-size) * 0.5);
  129. width: var(--#{$prefix}steps-border-width);
  130. height: calc(100% + 1rem);
  131. }
  132. }
  133. }
  134. }