_steps.scss 2.8 KB

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