vui-design
Version:
A high quality UI Toolkit based on Vue.js
307 lines (270 loc) • 6.95 kB
text/less
@vui-checkbox: ~"@{vui}-checkbox";
.@{vui-checkbox} {
cursor:pointer;
display:inline-flex;
align-items:center;
max-width:100%;
vertical-align:middle;
color:@checkbox-font-color;
line-height:@checkbox-line-height;
white-space:nowrap;
&-input {
position:relative;
display:block;
border:1px solid @checkbox-border-color;
border-radius:@checkbox-border-radius;
background-color:@checkbox-background-color;
transition:all @transition-duration @transition-timing-function;
svg {
position:absolute;
top:50%;
left:50%;
opacity:0;
transform:scale(0);
transition:all @transition-duration @transition-timing-function;
&:nth-child(1) {
fill:@checkbox-indeterminate-color;
}
&:nth-child(2) {
fill:@checkbox-checkmark-color;
}
}
input[type="checkbox"] {
position:absolute;
top:0;
bottom:0;
left:0;
right:0;
z-index:-1;
cursor:inherit;
display:block;
width:100%;
height:100%;
margin:0;
padding:0;
opacity:0;
appearance:none;
}
}
&-label {
flex:1;
display:block;
overflow:hidden;
white-space:nowrap;
text-overflow:ellipsis;
}
// size
&-small {
font-size:@checkbox-font-size-sm;
}
&-small &-input {
width:@checkbox-size-sm;
height:@checkbox-size-sm;
svg {
width:@checkbox-size-sm - 8px;
height:@checkbox-size-sm - 8px;
margin-top:-((@checkbox-size-sm - 8px) / 2);
margin-left:-((@checkbox-size-sm - 8px) / 2);
}
}
&-small &-label {
padding-left:@checkbox-size-sm - 8px;
}
&-medium {
font-size:@checkbox-font-size-md;
}
&-medium &-input {
width:@checkbox-size-md;
height:@checkbox-size-md;
svg {
width:@checkbox-size-md - 8px;
height:@checkbox-size-md - 8px;
margin-top:-((@checkbox-size-md - 8px) / 2);
margin-left:-((@checkbox-size-md - 8px) / 2);
}
}
&-medium &-label {
padding-left:@checkbox-size-md - 8px;
}
&-large {
font-size:@checkbox-font-size-lg;
}
&-large &-input {
width:@checkbox-size-lg;
height:@checkbox-size-lg;
svg {
width:@checkbox-size-lg - 8px;
height:@checkbox-size-lg - 8px;
margin-top:-((@checkbox-size-lg - 8px) / 2);
margin-left:-((@checkbox-size-lg - 8px) / 2);
}
}
&-large &-label {
padding-left:@checkbox-size-lg - 8px;
}
// hovered
&:hover &-input {
border-color:@checkbox-hover-border-color;
}
// focused
&-focused &-input {
border-color:@checkbox-hover-border-color;
}
// indeterminate
&-indeterminate &-input {
svg:nth-child(1) {
opacity:1;
transform:scale(1);
}
}
// checked
&-checked &-input,
&-checked:hover &-input {
border-color:@checkbox-checked-border-color;
background-color:@checkbox-checked-background-color;
svg:nth-child(2) {
opacity:1;
transform:scale(1);
}
}
// disabled
&-disabled {
cursor:not-allowed;
color:@checkbox-disabled-font-color;
}
&-disabled &-input,
&-disabled:hover &-input {
border-color:@checkbox-disabled-border-color;
background-color:@checkbox-disabled-background-color;
svg:nth-child(1) {
fill:@checkbox-disabled-indeterminate-color;
}
svg:nth-child(2) {
fill:@checkbox-disabled-checkmark-color;
}
}
// button
&-button {
position:relative;
cursor:pointer;
display:inline-block;
border:@checkbox-button-border-width solid @checkbox-button-border-color;
border-radius:@checkbox-button-border-radius;
background-color:@checkbox-button-background-color;
margin:0;
vertical-align:middle;
color:@checkbox-button-font-color;
font-weight:400;
white-space:nowrap;
text-align:center;
transition:all @transition-duration @transition-timing-function;
&-input {
position:absolute;
top:0;
bottom:0;
left:0;
right:0;
z-index:-1;
display:block;
width:100%;
height:100%;
margin:0;
padding:0;
opacity:0;
input[type="checkbox"] {
position:absolute;
top:0;
bottom:0;
left:0;
right:0;
cursor:inherit;
display:block;
width:100%;
height:100%;
margin:0;
padding:0;
opacity:0;
appearance:none;
}
}
&:after {
position:absolute;
top:1px;
right:1px;
content:"";
display:block;
width:0;
height:0;
border-style:solid;
border-color:@checkbox-button-border-color @checkbox-button-border-color transparent transparent;
border-radius:@checkbox-button-border-radius;
transition:all @transition-duration @transition-timing-function;
}
// size
&-small {
height:@checkbox-button-size-sm;
padding:0 @checkbox-button-padding-size-sm;
font-size:@checkbox-button-font-size-sm;
line-height:@checkbox-button-size-sm - @checkbox-button-border-width * 2;
&:after {
border-width:3px;
}
}
&-medium {
height:@checkbox-button-size-md;
padding:0 @checkbox-button-padding-size-md;
font-size:@checkbox-button-font-size-md;
line-height:@checkbox-button-size-md - @checkbox-button-border-width * 2;
&:after {
border-width:4px;
}
}
&-large {
height:@checkbox-button-size-lg;
padding:0 @checkbox-button-padding-size-lg;
font-size:@checkbox-button-font-size-lg;
line-height:@checkbox-button-size-lg - @checkbox-button-border-width * 2;
&:after {
border-width:5px;
}
}
// hovered
&:hover {
z-index:1;
color:@checkbox-button-hover-font-color;
}
// focused
&-focused {
z-index:2 ;
color:@checkbox-button-hover-font-color ;
}
// checked
&-checked {
z-index:3 ;
border-color:@checkbox-button-checked-border-color;
color:@checkbox-button-checked-font-color ;
&:after {
border-color:@checkbox-button-checked-border-color @checkbox-button-checked-border-color transparent transparent;
}
}
// focused & checked
&-focused&-checked {
z-index:4 ;
}
// disabled
&-disabled {
z-index:0 ;
cursor:not-allowed;
border-color:@checkbox-button-disabled-border-color;
background-color:@checkbox-button-disabled-background-color;
color:@checkbox-button-disabled-font-color !important;
&:after {
border-color:@checkbox-button-disabled-border-color @checkbox-button-disabled-border-color transparent transparent;
}
}
// checked & disabled
&-checked&-disabled {
background-color:shade(@checkbox-button-disabled-background-color, 5%);
}
}
}