image-preview.scss 4.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216
  1. @use '../helpers/baseMixin.scss';
  2. .vxe-image-preview {
  3. position: relative;
  4. width: 100%;
  5. height: 100%;
  6. overflow: hidden;
  7. &:not(.is--pct11) {
  8. .vxe-image-preview--img-item {
  9. max-width: 100%;
  10. max-height: 100%;
  11. }
  12. }
  13. &:not(.is--move) {
  14. .vxe-image-preview--img-item {
  15. @include baseMixin.createAnimationTransition(transform, 0.3s);
  16. }
  17. }
  18. &:hover {
  19. .vxe-image-preview--close-wrapper,
  20. .vxe-image-preview--previous-btn,
  21. .vxe-image-preview--next-btn,
  22. .vxe-image-preview--operation-info,
  23. .vxe-image-preview--operation-wrapper {
  24. opacity: 1;
  25. }
  26. .vxe-image-preview--operation-info {
  27. transform: translate(0, 0);
  28. }
  29. .vxe-image-preview--previous-btn,
  30. .vxe-image-preview--next-btn {
  31. transform: translate(0, -50%);
  32. &:hover {
  33. color: var(--vxe-ui-font-primary-color);
  34. transform: translate(0, -50%) scale(1.2);
  35. }
  36. &:active {
  37. transform: translate(0, -50%) scale(0.9);
  38. }
  39. }
  40. .vxe-image-preview--operation-wrapper {
  41. transform: translate(-50%, 0);
  42. &:hover {
  43. transform: translateX(-50%) scale(1.1);
  44. }
  45. }
  46. }
  47. }
  48. .vxe-image-preview--img-list {
  49. display: flex;
  50. width: 100%;
  51. height: 100%;
  52. flex-direction: row;
  53. align-items: center;
  54. justify-content: center;
  55. }
  56. .vxe-image-preview--img-item {
  57. display: none;
  58. cursor: grab;
  59. &:active {
  60. cursor: grabbing;
  61. }
  62. &.is--active {
  63. display: block;
  64. }
  65. }
  66. .vxe-image-preview--close-btn {
  67. top: 0;
  68. right: 0;
  69. z-index: 99;
  70. padding: 1em;
  71. font-size: 1.5em;
  72. transform: scale(1);
  73. border-radius: 50%;
  74. cursor: pointer;
  75. @include baseMixin.createAnimationTransition(all, 0.2s);
  76. }
  77. .vxe-image-preview--close-bg {
  78. position: absolute;
  79. top: -7em;
  80. right: -12em;
  81. z-index: 99;
  82. width: 30em;
  83. height: 10em;
  84. background-color: rgba(0, 0, 0, 0.7);
  85. color: var(--vxe-ui-status-error-color);
  86. transform: rotate(45deg);
  87. cursor: pointer;
  88. z-index: 88;
  89. @include baseMixin.createAnimationTransition(all, 0.2s);
  90. }
  91. .vxe-image-preview--close-wrapper {
  92. opacity: 0;
  93. @include baseMixin.createAnimationTransition(all, 0.2s);
  94. &:hover {
  95. .vxe-image-preview--close-btn {
  96. top: 0.2em;
  97. right: 0.2em;
  98. transform: scale(1.2);
  99. color: var(--vxe-ui-status-error-color);
  100. }
  101. .vxe-image-preview--close-bg {
  102. top: -5em;
  103. }
  104. }
  105. }
  106. .vxe-image-preview--operation-info,
  107. .vxe-image-preview--close-btn,
  108. .vxe-image-preview--previous-btn,
  109. .vxe-image-preview--next-btn,
  110. .vxe-image-preview--operation-wrapper {
  111. position: absolute;
  112. z-index: 99;
  113. }
  114. .vxe-image-preview--previous-btn,
  115. .vxe-image-preview--next-btn {
  116. display: flex;
  117. flex-direction: row;
  118. align-items: center;
  119. justify-content: center;
  120. opacity: 0;
  121. top: 50%;
  122. border-radius: 50%;
  123. font-size: 1.6em;
  124. width: 2.2em;
  125. height: 2.2em;
  126. line-height: 2.2em;
  127. background-color: rgba(0, 0, 0, 0.7);
  128. cursor: pointer;
  129. @include baseMixin.createAnimationTransition(all, 0.1s);
  130. }
  131. .vxe-image-preview--previous-btn {
  132. left: 1vw;
  133. transform: translate(-2em, -50%);
  134. }
  135. .vxe-image-preview--next-btn {
  136. right: 1vw;
  137. transform: translate(2em, -50%);
  138. }
  139. .vxe-image-preview--operation-info {
  140. right: 0.2em;
  141. bottom: 0.2em;
  142. font-size: 1em;
  143. padding: 0.3em 0;
  144. width: 4.6em;
  145. opacity: 0;
  146. border-radius: var(--vxe-ui-base-border-radius);
  147. text-align: center;
  148. transform: translate(2em, 2em);
  149. background-color: rgba(0, 0, 0, 0.7);
  150. @include baseMixin.createAnimationTransition(all, 0.2s);
  151. }
  152. .vxe-image-preview--operation-wrapper {
  153. opacity: 0;
  154. display: flex;
  155. flex-direction: row;
  156. bottom: 3vh;
  157. left: 50%;
  158. transform: translate(-50%, 3em);
  159. padding: 0 1.5em;
  160. border-radius: 3em;
  161. background-color: rgba(0, 0, 0, 0.7);
  162. @include baseMixin.createAnimationTransition(all, 0.2s);
  163. }
  164. .vxe-image-preview--operation-active-count {
  165. display: flex;
  166. flex-direction: row;
  167. align-items: center;
  168. justify-content: center;
  169. font-size: 1.2em;
  170. min-width: 2.5em;
  171. .vxe-image-preview--operation-active-current,
  172. .vxe-image-preview--operation-active-total {
  173. display: inline-block;
  174. height: 1.4em;
  175. }
  176. .vxe-image-preview--operation-active-current {
  177. font-size: 2em;
  178. line-height: 1.2em;
  179. font-weight: 700;
  180. padding-right: 0.1em;
  181. min-width: 1.4em;
  182. text-align: right;
  183. }
  184. }
  185. .vxe-image-preview--operation-btn {
  186. font-size: 1.6em;
  187. padding: 0.5em;
  188. cursor: pointer;
  189. @include baseMixin.createAnimationTransition(all, 0.1s);
  190. &:hover {
  191. color: var(--vxe-ui-font-primary-color);
  192. transform: scale(1.2);
  193. }
  194. &:active {
  195. transform: scale(0.9);
  196. }
  197. }
  198. .vxe-image-preview-popup-wrapper {
  199. user-select: none;
  200. &.vxe-modal--wrapper {
  201. &.type--modal {
  202. .vxe-modal--box {
  203. border: 0;
  204. background-color: rgba(0, 0, 0, 0.1);
  205. box-shadow: none;
  206. }
  207. .vxe-modal--content {
  208. padding: 0;
  209. }
  210. }
  211. }
  212. }