_avatars.scss 3.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145
  1. .avatar {
  2. --#{$prefix}avatar-size: var(--#{$prefix}avatar-list-size, #{$avatar-size});
  3. --#{$prefix}avatar-status-size: #{$avatar-status-size};
  4. --#{$prefix}avatar-bg: #{$avatar-bg};
  5. --#{$prefix}avatar-box-shadow-color: var(--#{$prefix}border-color-translucent);
  6. --#{$prefix}avatar-box-shadow: inset 0 0 0 1px var(--#{$prefix}avatar-box-shadow-color);
  7. --#{$prefix}avatar-font-size: #{$avatar-font-size};
  8. --#{$prefix}avatar-icon-size: #{$avatar-icon-size};
  9. --#{$prefix}avatar-brand-size: #{$avatar-brand-size};
  10. position: relative;
  11. width: var(--#{$prefix}avatar-size);
  12. height: var(--#{$prefix}avatar-size);
  13. font-size: var(--#{$prefix}avatar-font-size);
  14. font-weight: var(--#{$prefix}font-weight-medium);
  15. line-height: 1;
  16. display: inline-flex;
  17. align-items: center;
  18. justify-content: center;
  19. color: var(--#{$prefix}secondary);
  20. text-align: center;
  21. text-transform: uppercase;
  22. vertical-align: bottom;
  23. user-select: none;
  24. background: var(--#{$prefix}avatar-bg) no-repeat center/cover;
  25. border-radius: $avatar-border-radius;
  26. box-shadow: var(--#{$prefix}avatar-box-shadow);
  27. transition: color $transition-time, background-color $transition-time, box-shadow $transition-time;
  28. .icon {
  29. width: var(--#{$prefix}avatar-icon-size);
  30. height: var(--#{$prefix}avatar-icon-size);
  31. }
  32. .badge {
  33. position: absolute;
  34. right: 0;
  35. bottom: 0;
  36. border-radius: $border-radius-pill;
  37. box-shadow: 0 0 0 calc(var(--#{$prefix}avatar-status-size) / 4) $card-bg;
  38. }
  39. @at-root a#{&} {
  40. cursor: pointer;
  41. &:hover {
  42. color: var(--#{$prefix}primary);
  43. --#{$prefix}avatar-box-shadow-color: var(--#{$prefix}primary);
  44. }
  45. }
  46. }
  47. .avatar-rounded {
  48. border-radius: $border-radius-pill;
  49. }
  50. @each $avatar-size, $size in $avatar-sizes {
  51. .avatar-#{$avatar-size} {
  52. --#{$prefix}avatar-size: #{map-get($size, size)};
  53. --#{$prefix}avatar-status-size: #{map-get($size, status-size)};
  54. --#{$prefix}avatar-font-size: #{map-get($size, font-size)};
  55. --#{$prefix}avatar-icon-size: #{map-get($size, icon-size)};
  56. --#{$prefix}avatar-brand-size: #{map-get($size, brand-size)};
  57. .badge:empty {
  58. width: map-get($size, status-size);
  59. height: map-get($size, status-size);
  60. }
  61. }
  62. }
  63. //
  64. // Avatar list
  65. //
  66. .avatar-list {
  67. --#{$prefix}avatar-list-size: #{$avatar-size};
  68. @include elements-list;
  69. a.avatar {
  70. &:hover {
  71. z-index: 1;
  72. }
  73. }
  74. }
  75. .avatar-list-stacked {
  76. display: block;
  77. --#{$prefix}list-gap: 0;
  78. .avatar {
  79. margin-right: calc(#{$avatar-list-spacing} * var(--#{$prefix}avatar-size)) !important;
  80. box-shadow: var(--#{$prefix}avatar-box-shadow), 0 0 0 2px var(--#{$prefix}card-bg, var(--#{$prefix}bg-surface));
  81. }
  82. }
  83. @each $avatar-size, $size in $avatar-sizes {
  84. .avatar-list-#{$avatar-size} {
  85. --#{$prefix}avatar-list-size: #{map-get($size, size)};
  86. }
  87. }
  88. //
  89. // Avatar upload
  90. //
  91. .avatar-upload {
  92. border: var(--#{$prefix}border-width) dashed var(--#{$prefix}border-color);
  93. background: $form-check-input-bg;
  94. box-shadow: none;
  95. flex-direction: column;
  96. @include transition(color $transition-time, background-color $transition-time);
  97. svg {
  98. width: 1.5rem;
  99. height: 1.5rem;
  100. stroke-width: 1;
  101. }
  102. &:hover {
  103. border-color: var(--#{$prefix}primary);
  104. color: var(--#{$prefix}primary);
  105. text-decoration: none;
  106. }
  107. }
  108. .avatar-upload-text {
  109. font-size: $h6-font-size;
  110. line-height: 1;
  111. margin-top: .25rem;
  112. }
  113. .avatar-cover {
  114. margin-top: calc(-.5 * var(--#{$prefix}avatar-size));
  115. box-shadow: 0 0 0 .25rem var(--#{$prefix}card-bg, var(--#{$prefix}body-bg));
  116. }
  117. .avatar-brand {
  118. width: var(--#{$prefix}avatar-brand-size);
  119. height: var(--#{$prefix}avatar-brand-size);
  120. position: absolute;
  121. right: -2px;
  122. bottom: -2px;
  123. z-index: 1000;
  124. background: var(--#{$prefix}bg-surface);
  125. border-radius: var(--#{$prefix}border-radius);
  126. border: 1px solid var(--#{$prefix}border-color);
  127. }