vui-design
Version:
A high quality UI Toolkit based on Vue.js
189 lines (166 loc) • 3.71 kB
text/less
@vui-spin: ~"@{vui}-spin";
.@{vui-spin} {
display:inline-block;
box-sizing:border-box;
vertical-align:middle;
&-children {
display:block;
box-sizing:border-box;
transition:opacity @transition-duration @transition-timing-function;
}
&-spinner {
display:block;
box-sizing:border-box;
color:@spin-color;
text-align:center;
line-height:1;
}
&-indicator {
display:inline-block;
box-sizing:border-box;
vertical-align:middle;
}
&-message {
display:block;
box-sizing:border-box;
}
&-dot {
position:relative;
display:block;
box-sizing:border-box;
border-radius:50%;
animation:vuiSpinDotRotate 2s infinite linear;
&-item {
position:absolute;
top:0;
bottom:0;
left:0;
right:0;
display:block;
width:100%;
height:100%;
border-radius:50%;
opacity:0.33333333;
animation:vuiSpinDotItemTwinkle 1s linear infinite alternate;
&:before {
content:"";
position:absolute;
top:0;
left:50%;
display:block;
border-radius:50%;
background-color:@spin-color;
}
&:nth-child(1) {
transform:rotate(0deg);
animation-delay:0s;
}
&:nth-child(2) {
transform:rotate(120deg);
animation-delay:0.33333333s;
}
&:nth-child(3) {
transform:rotate(-120deg);
animation-delay:0.66666666s;
}
}
}
&-small {
font-size:@spin-font-size-sm;
}
&-small &-message {
margin-top:@spin-message-margin-top-sm;
}
&-small &-dot {
width:@spin-dot-size-sm;
height:@spin-dot-size-sm;
&-item:before {
width:@spin-dot-item-size-sm;
height:@spin-dot-item-size-sm;
margin-left:-@spin-dot-item-size-sm / 2;
}
}
&-medium {
font-size:@spin-font-size-md;
}
&-medium &-message {
margin-top:@spin-message-margin-top-md;
}
&-medium &-dot {
width:@spin-dot-size-md;
height:@spin-dot-size-md;
&-item:before {
width:@spin-dot-item-size-md;
height:@spin-dot-item-size-md;
margin-left:-@spin-dot-item-size-md / 2;
}
}
&-large {
font-size:@spin-font-size-lg;
}
&-large &-message {
margin-top:@spin-message-margin-top-lg;
}
&-large &-dot {
width:@spin-dot-size-lg;
height:@spin-dot-size-lg;
&-item:before {
width:@spin-dot-item-size-lg;
height:@spin-dot-item-size-lg;
margin-left:-@spin-dot-item-size-lg / 2;
}
}
&-fullscreen {
position:fixed;
top:0;
bottom:0;
left:0;
right:0;
z-index:10;
background-color:rgba(255,255,255,0.5);
}
&-fullscreen &-spinner {
position:absolute;
top:50%;
left:50%;
transform:translate(-50%, -50%);
}
&-with-children {
position:relative;
display:block;
}
&-with-children &-spinner {
position:absolute;
top:50%;
left:50%;
transform:translate(-50%, -50%);
}
&-spinning &-children {
overflow:hidden;
opacity:0.5;
user-select:none;
pointer-events:none;
}
&-fade-enter-active {
animation:vuiSpinFadeIn @animation-in-duration @animation-in-timing-function both;
}
&-fade-leave-active {
animation:vuiSpinFadeOut @animation-out-duration @animation-out-timing-function both;
}
}
@keyframes vuiSpinDotRotate {
0% { transform:rotateZ(0deg) translate3d(0, 0, 0); }
100% { transform:rotateZ(720deg) translate3d(0, 0, 0); }
}
@keyframes vuiSpinDotItemTwinkle {
100% { opacity:1; }
}
@keyframes vuiSpinFadeIn {
0% { opacity:0; }
100% { opacity:1; }
}
@keyframes vuiSpinFadeOut {
0% { opacity:1; }
30% { opacity:1; }
100% { opacity:0; }
}