tdesign-react
Version:
TDesign Component for React
496 lines (419 loc) • 11 kB
text/less
// 组件允许单个组件打包,因此默认引入公共基础样式
@import "../../base.less";
@import "./_var.less";
@import "./_mixin.less";
.@{prefix}-image-viewer__img-error {
height: 440px;
width: 440px;
background-color: @image-viewer__image--background-color__error;
border-radius: 4px;
color: @image-viewer__image-text--error;
cursor: inherit;
.@{prefix}-image-viewer__img-error-content {
height: 100%;
width: 100%;
display: flex;
flex-wrap: wrap;
flex-direction: column;
justify-content: center;
align-items: center;
align-content: center;
font: @image-viewer-error-font;
.@{prefix}-image-viewer__img-error-text {
margin-top: @comp-margin-s;
}
}
}
@keyframes modal-image-show {
0% {
transform: scale(0);
}
to {
transform: scale(1);
}
}
@keyframes modal-image-hide {
0% {
transform: scale(1);
}
to {
transform: scale(0);
}
}
@keyframes modal-mask-show {
0% {
opacity: 0;
}
to {
opacity: 1;
}
}
@keyframes modal-mask-hide {
0% {
opacity: 1;
}
to {
opacity: 0;
}
}
.@{prefix}-image-viewer-preview-image {
position: fixed;
top: 0;
bottom: 0;
left: 0;
right: 0;
z-index: @z-index-image-viewer;
overflow: hidden;
animation: @anim-duration-base @anim-time-fn-ease-in modal-mask-show;
&.@{prefix}-is-hide {
animation: @anim-duration-base @anim-time-fn-ease-out modal-mask-hide forwards;
.@{prefix}-image-viewer__modal-pic .@{prefix}-image-viewer__modal-box {
animation: @anim-duration-base @anim-time-fn-ease-out modal-image-hide forwards;
}
}
.@{prefix}-image-viewer__modal-index {
text-align: center;
font-size: @font-size-base;
color: @text-color-anti;
position: absolute;
top: 92px;
left: 50%;
transform: translateX(-50%);
background: rgba(0, 0, 0, 40%);
border-radius: @border-radius-default;
padding: @image-viewer-modal-padding;
z-index: 1;
}
.@{prefix}-image-viewer__modal-mask {
position: fixed;
top: 0;
bottom: 0;
left: 0;
right: 0;
background-color: @mask-active;
height: 100%;
width: 100%;
transition: all @anim-duration-base ease;
opacity: 1;
}
.@{prefix}-image-viewer__modal-pic {
position: absolute;
transform: translate(-50%, -50%);
top: 50%;
left: 50%;
.@{prefix}-image-viewer__modal-box {
width: 100%;
height: 100%;
display: flex;
justify-content: center;
align-items: center;
animation: @anim-duration-base @anim-time-fn-easing modal-image-show;
.@{prefix}-image-viewer__modal-image {
display: block;
max-width: ~"min(90vw, 1000px)";
max-height: ~"min(90vh, 800px)";
transition: all @anim-duration-base @anim-time-fn-easing;
transform: rotate(0deg);
object-fit: contain;
}
}
}
.@{prefix}-image-viewer__modal-header {
width: 100%;
position: absolute;
top: 0;
z-index: 1;
height: auto;
display: flex;
align-items: center;
justify-content: center;
background-color: @bg-color-container;
padding: @image-viewer-header-hide-padding;
&.@{prefix}-is-show {
padding: @image-viewer-header-padding;
}
@keyframes preview-icon-range {
0% {
transform: translate(-50%, 50%) rotateZ(0);
}
to {
transform: translate(-50%, 50%) rotateZ(-180deg);
}
}
@keyframes preview-icon-unrange {
0% {
transform: translate(-50%, 50%) rotateZ(-180deg);
}
to {
transform: translate(-50%, 50%) rotateZ(0);
}
}
.@{prefix}-image-viewer__header-pre-bt {
width: @comp-size-xxs;
height: @comp-size-xxs;
display: inline-flex;
justify-content: center;
align-items: center;
position: absolute;
left: 50%;
bottom: 0;
transform: translate(-50%, 50%);
background-color: @bg-color-container;
color: @text-color-primary;
border-radius: 50%;
box-shadow: @shadow-inset;
animation: @anim-duration-base @anim-time-fn-easing 0s 1 normal forwards running preview-icon-unrange;
.t-icon {
font-size: @font-size-l;
}
&:hover {
background-color: inherit;
}
}
@keyframes preview-image-show {
0% {
height: 0;
}
to {
height: @image-viewer-header-box-height;
}
}
@keyframes preview-image-hide {
0% {
height: @image-viewer-header-box-height;
}
to {
height: 0;
}
}
&.@{prefix}-is-show {
.@{prefix}-image-viewer__header-prev {
animation: @anim-duration-base @anim-time-fn-easing 0s 1 normal forwards running preview-image-show;
}
.@{prefix}-image-viewer__header-pre-bt {
animation: @anim-duration-base @anim-time-fn-easing 0s 1 normal forwards running preview-icon-range;
}
}
.@{prefix}-image-viewer__header-prev {
width: @image-viewer-header-all-box-width;
animation: @anim-duration-base @anim-time-fn-easing 0s 1 normal forwards running preview-image-hide;
display: flex;
position: relative;
overflow: hidden;
&::before,
&::after {
content: "";
position: absolute;
height: 100%;
z-index: 1;
width: @image-viewer-header-box-width;
pointer-events: none;
}
&::before {
left: 0;
background-image: linear-gradient(to right, @bg-color-container, rgba(255, 255, 255, 0%));
}
&::after {
right: 0;
background-image: linear-gradient(to right, rgba(255, 255, 255, 0%), @bg-color-container);
}
}
}
.@{prefix}-image-viewer__header-trans {
height: 100%;
transition: transform @anim-duration-base;
display: flex;
align-items: center;
justify-content: center;
gap: @spacer-s;
margin-left: @image-viewer-header-box-width-margin-left;
}
.@{prefix}-image-viewer__header-box {
box-sizing: border-box;
width: @image-viewer-header-box-width;
height: @image-viewer-header-box-height;
position: relative;
transition: @anim-duration-base;
overflow: hidden;
border-radius: @border-radius-default;
display: flex;
align-items: center;
justify-content: center;
border: 1px solid transparent;
background-color: @bg-color-secondarycontainer;
.@{prefix}-image-viewer__header-img {
width: auto;
height: 100%;
}
&:hover, &.@{prefix}-is-active {
border-color: @brand-color;
}
}
.@{prefix}-image-viewer__modal-icon {
cursor: pointer;
color: @text-color-primary;
border-radius: @border-radius-default;
transition: @anim-duration-base;
&.@{prefix}-image-viewer__modal-close-bt {
top: 100px;
right: 40px;
}
&.@{prefix}-image-viewer__modal-next-bt,
&.@{prefix}-image-viewer__modal-prev-bt {
top: 50%;
transform: translateY(-50%);
}
&.@{prefix}-image-viewer__modal-prev-bt {
left: 40px;
}
&.@{prefix}-image-viewer__modal-next-bt {
right: 40px;
}
&.@{prefix}-image-viewer__modal-close-bt , &.@{prefix}-image-viewer__modal-prev-bt, &.@{prefix}-image-viewer__modal-next-bt {
position: fixed;
z-index: 10;
color: @text-color-anti;
background-color: rgba(0, 0, 0, 40%);
border-radius: 50%;
width: @image-viewer-modal-button-size;
height: @image-viewer-modal-button-size;
display: flex;
justify-content: center;
align-items: center;
}
.@{prefix}-image-viewer__modal-icon-label {
margin-left: 2px;
}
&.@{prefix}-is-disabled {
color: rgba(255, 255, 255, 22%);
}
&.@{prefix}-is-disabled:hover {
background-color: rgba(0, 0, 0, 40%);
}
&:hover {
background-color: rgba(0, 0, 0, 20%);
}
}
}
.@{prefix}-image-viewer__mask {
width: 100vh;
height: 100vh;
left: 0;
top: 0;
z-index: 99;
position: fixed;
background-color: transparent;
}
.@{prefix}-image-viewer__utils {
width: 100%;
position: absolute;
bottom: 32px;
z-index: 1;
height: auto;
display: flex;
align-items: center;
justify-content: center;
color: @text-color-primary;
user-select: none;
.@{prefix}-image-viewer__utils-content {
display: inline-flex;
align-items: center;
justify-content: center;
height: 50px;
line-height: 100%;
background: @bg-color-container;
border-radius: @border-radius-medium;
padding: @image-viewer-utils-content-padding;
.@{prefix}-image-viewer__modal-icon {
cursor: pointer;
margin: @image-viewer-utils-modal-icon-margin;
width: @image-viewer-utils-modal-icon-size;
height: @image-viewer-utils-modal-icon-size;
display: flex;
justify-content: center;
align-items: center;
border-radius: @border-radius-default;
transition: @anim-duration-base;
&:hover {
background-color: @bg-color-container-hover;
}
}
.@{prefix}-image-viewer__utils-scale {
width: @image-viewer-utils-modal-utils-scale-width;
text-align: center;
cursor: inherit;
&:hover {
background-color: @bg-color-container;
}
}
}
}
.@{prefix}-image-viewer-mini__footer {
.@{prefix}-image-viewer__utils {
position: inherit;
}
}
.@{prefix}-image-viewer-mini__content {
max-width: ~"min(90vw, 1000px)";
max-height: ~"min(90vh, 800px)";
.@{prefix}-image-viewer__modal-pic {
@keyframes modal-image-show {
0% {
transform: scale(0);
}
to {
transform: scale(1);
}
}
.@{prefix}-image-viewer__modal-box {
width: 100%;
height: 100%;
display: flex;
justify-content: center;
align-items: center;
.@{prefix}-image-viewer__modal-image {
display: block;
max-width: ~"min(80vw, 800px)";
max-height: ~"min(80vh, 600px)";
transition: all @anim-duration-base ease;
transform: rotate(0deg);
object-fit: contain;
}
}
}
}
.@{prefix}-image-viewer__dialog {
&.@{prefix}-dialog__ctx--fixed {
z-index: @z-index-image-viewer;
}
.@{prefix}-dialog__header {
padding: 0 @comp-paddingLR-s;
// 兼容dialog表头限制无法拖拽
pointer-events: none;
.@{prefix}-image-viewer__dialog-title {
pointer-events: all;
}
.@{prefix}-dialog__close {
pointer-events: auto;
}
}
.@{prefix}-dialog {
border-color: @component-border;
overflow: hidden;
padding: 0;
box-shadow: @shadow-3;
&__header {
height: 40px;
width: 100%;
font-size: @font-size-base;
background-color: @bg-color-secondarycontainer;
&-content {
margin-left: @spacer-4;
justify-content: center;
}
}
&__close:hover {
background-color: @bg-color-secondarycontainer-hover;
}
}
}