image.scss 5.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224
  1. @import "./animation.scss";
  2. @import "./variables.scss";
  3. $module: #{$prefix}-image;
  4. .#{$module} {
  5. border-radius: $radius-image;
  6. position: relative;
  7. display: inline-block;
  8. overflow: hidden;
  9. &-img {
  10. vertical-align: middle;
  11. border-radius: inherit;
  12. user-select: none;
  13. &-preview {
  14. cursor: zoom-in;
  15. }
  16. &-error {
  17. opacity: 0;
  18. }
  19. }
  20. &-overlay {
  21. position: absolute;
  22. top: 0;
  23. left: 0;
  24. width: 100%;
  25. height: 100%;
  26. }
  27. }
  28. .#{$module}-status {
  29. width: 100%;
  30. height: 100%;
  31. display: flex;
  32. justify-content: center;
  33. align-items: center;
  34. border-radius: $radius-image;
  35. background-color: $color-image_status-bg;
  36. color: $color-image_status;
  37. }
  38. .#{$module}-preview {
  39. position: fixed;
  40. top: 0;
  41. left: 0;
  42. width: 100%;
  43. height: 100%;
  44. z-index: $z-image_preview;
  45. background-color: var(--semi-color-overlay-bg);
  46. transition: opacity $transition_duration-image_preview;
  47. overflow: hidden;
  48. &-popup {
  49. position: absolute;
  50. }
  51. .#{$module}-preview-hide {
  52. opacity: 0;
  53. }
  54. &-icon {
  55. display: flex;
  56. justify-content: center;
  57. align-items: center;
  58. width: $width-image_preview_icon;
  59. height: $height-image_preview_icon;
  60. border-radius: 50%;
  61. position: absolute;
  62. top: 50%;
  63. transform: translateY(-50%);
  64. background: $color-image_preview_icon-bg;
  65. cursor: pointer;
  66. color: $color-image_preview_icon;
  67. }
  68. &-prev {
  69. left: $spacing-image_preview_icon-x;
  70. }
  71. &-next {
  72. right: $spacing-image_preview_icon-x;
  73. }
  74. &-header {
  75. position: absolute;
  76. top: 0;
  77. left: 0;
  78. right: 0;
  79. font-weight: normal;
  80. @include font-size-regular;
  81. color: $color-image_preview_header;
  82. height: $height-image_preview_header;
  83. display: flex;
  84. justify-content: space-between;
  85. align-items: center;
  86. padding: $spacing-image_preview_header-paddingY $spacing-image_preview_header-paddingX;
  87. z-index: $z-image_preview_header;
  88. &-title {
  89. flex: 1;
  90. }
  91. &-close {
  92. display: flex;
  93. justify-content: center;
  94. align-items: center;
  95. cursor: pointer;
  96. width: $width-image_preview_header_close;
  97. height: $height-image_preview_header_close;
  98. border-radius: 50%;
  99. &:hover {
  100. background-color: $color-image_header_close-bg;
  101. }
  102. }
  103. }
  104. &-footer {
  105. display: flex;
  106. align-items: center;
  107. padding: $spacing-image_preview_footer-paddingY $spacing-image_preview_footer-paddingX;
  108. background: $color-image_preview_footer-bg;
  109. border-radius: $radius-image_preview_footer;
  110. height: $height-image_preview_footer;
  111. &-wrapper {
  112. position: absolute;
  113. left: 50%;
  114. bottom: 16px;
  115. transform: translateX(-50%);
  116. }
  117. &-page {
  118. user-select: none;
  119. color: $color-image_preview_footer_icon;
  120. @include font-size-header-6;
  121. margin: $spacing-image_preview_footer_page-marginY $spacing-image_preview_footer_page-marginX;
  122. }
  123. .#{$prefix}-icon {
  124. color: $color-image_preview_footer_icon;
  125. cursor: pointer;
  126. }
  127. &-gap {
  128. margin-left: $spacing-image_preview_footer_gap-marginLeft;
  129. }
  130. .#{$prefix}-slider {
  131. width: $width-image_preview_footer_slider;
  132. padding: $spacing-image_preview_footer_slider-paddingY $spacing-image_preview_footer_slider-paddingX;
  133. .#{$prefix}-slider-rail {
  134. color: $color-image_preview_footer_slider_rail;
  135. height: $height-image_preview_footer_slider;
  136. }
  137. .#{$prefix}-slider-track {
  138. height: $height-image_preview_footer_slider;
  139. }
  140. .#{$prefix}-slider-handle {
  141. width: $width-image_preview_footer_slider_handle;
  142. height: $height-image_preview_footer_slider_handle;
  143. margin-top: $spacing-image_preview_footer_slider_handle-marginTop;
  144. box-sizing: border-box;
  145. }
  146. }
  147. .#{$prefix}-divider {
  148. background: $color-image-preview_divider-bg;
  149. margin: $spacing-image_preview_footer_divider-marginY $spacing-image_preview_footer_divider-marginX;
  150. }
  151. .#{$module}-preview-footer-disabled {
  152. color: $color-image_preview_disabled;
  153. cursor: default;
  154. pointer-events: none;
  155. }
  156. }
  157. &-image {
  158. position: relative;
  159. height: 100%;
  160. &-img {
  161. position: absolute;
  162. transform: scale3d($transform_scale3d-image_preview_image_img) $transform_rotate-image_preview_image_img;
  163. transition: transform $transition_duration-image_preview_image_img $transition_delay-image_preview_image_img;
  164. z-index: 0;
  165. user-select: none;
  166. }
  167. &-spin {
  168. position: absolute;
  169. top: 50%;
  170. left: 50%;
  171. transform: translate(-50%, -50%);
  172. .#{$prefix}-spin-wrapper {
  173. color: $color-image_preview_image_spin;
  174. }
  175. }
  176. }
  177. @keyframes spinner {
  178. to {
  179. transform: $transform_rotate-image_preview_spinner;
  180. }
  181. }
  182. }
  183. // Remove the default border of img when src is empty or src is invalid
  184. img[src=""], img:not([src]) {
  185. opacity: 0;
  186. }
  187. @import "./rtl.scss";