vui-design
Version:
A high quality UI Toolkit based on Vue.js
184 lines (163 loc) • 4.31 kB
text/less
@vui-switch: ~"@{vui}-switch";
@switch-input-size-sm: @switch-size-sm - 4px;
@switch-input-size-md: @switch-size-md - 4px;
@switch-input-size-lg: @switch-size-lg - 4px;
@switch-input-spin-size-sm: @switch-input-size-sm - 4px;
@switch-input-spin-size-md: @switch-input-size-md - 4px;
@switch-input-spin-size-lg: @switch-input-size-lg - 4px;
@keyframes vuiSwitchLoading {
0% { transform:rotate(0deg); }
100% { transform:rotate(360deg); }
}
.@{vui-switch} {
position:relative;
cursor:pointer;
display:inline-block;
border:none;
background-color:@switch-background-color;
vertical-align:middle;
user-select:none;
white-space:nowrap;
color:@switch-font-color;
text-align:right;
transition:all @transition-duration @transition-timing-function;
&-input {
position:absolute;
top:2px;
left:2px;
display:block;
border-radius:50%;
box-shadow:0 0 4px 0 rgba(0, 0, 0, 0.35);
background-color:@switch-input-background-color;
transition:all @transition-duration @transition-timing-function;
&-spin {
content:"";
display:block;
border-width:1px;
border-style:solid;
border-color:transparent;
border-radius:50%;
margin:2px;
animation:vuiSwitchLoading 1s infinite linear;
}
}
&-label {
display:flex;
justify-content:center;
align-items:center;
height:100%;
transition:all @transition-duration @transition-timing-function;
}
// loading
&-loading {
cursor:not-allowed;
background-color:tint(@switch-background-color, 40%);
}
&-loading &-input {
&-spin {
border-bottom-color:tint(@switch-background-color, 40%);
}
}
// checked
&-checked {
background-color:@switch-checked-background-color;
}
// disabled
&-disabled {
cursor:not-allowed;
background-color:tint(@switch-background-color, 40%);
}
// loading && checked
&-loading&-checked {
background-color:tint(@switch-checked-background-color, 40%);
}
&-loading&-checked &-input {
&-spin {
border-bottom-color:tint(@switch-checked-background-color, 40%);
}
}
// checked & disabled
&-checked&-disabled {
background-color:tint(@switch-checked-background-color, 40%);
}
// size
&-small {
min-width:@switch-input-size-sm * 2 + 4px;
height:@switch-size-sm;
border-radius:@switch-size-sm;
font-size:@switch-font-size-sm;
line-height:@switch-size-sm;
}
&-small &-input {
width:@switch-input-size-sm;
height:@switch-input-size-sm;
&-spin {
width:@switch-input-spin-size-sm;
height:@switch-input-spin-size-sm;
}
}
&-small &-label {
padding-left:@switch-input-size-sm + 2px + 6px;
padding-right:6px;
}
&-medium {
min-width:@switch-input-size-md * 2 + 4px;
height:@switch-size-md;
border-radius:@switch-size-md;
font-size:@switch-font-size-md;
line-height:@switch-size-md;
}
&-medium &-input {
width:@switch-input-size-md;
height:@switch-input-size-md;
&-spin {
width:@switch-input-spin-size-md;
height:@switch-input-spin-size-md;
}
}
&-medium &-label {
padding-left:@switch-input-size-md + 2px + 8px;
padding-right:8px;
}
&-large {
min-width:@switch-input-size-lg * 2 + 4px;
height:@switch-size-lg;
border-radius:@switch-size-lg;
font-size:@switch-font-size-lg;
line-height:@switch-size-lg;
}
&-large &-input {
width:@switch-input-size-lg;
height:@switch-input-size-lg;
&-spin {
width:@switch-input-spin-size-lg;
height:@switch-input-spin-size-lg;
}
}
&-large &-label {
padding-left:@switch-input-size-lg + 2px + 10px;
padding-right:10px;
}
//
&-small&-checked &-input {
left:calc(100% - @switch-input-size-sm - 2px);
}
&-small&-checked &-label {
padding-left:6px;
padding-right:@switch-input-size-sm + 2px + 6px;
}
&-medium&-checked &-input {
left:calc(100% - @switch-input-size-md - 2px);
}
&-medium&-checked &-label {
padding-left:8px;
padding-right:@switch-input-size-md + 2px + 8px;
}
&-large&-checked &-input {
left:calc(100% - @switch-input-size-lg - 2px);
}
&-large&-checked &-label {
padding-left:10px;
padding-right:@switch-input-size-lg + 2px + 10px;
}
}