mealcomes
Version:
MealComes 用于学习前端的组件库
165 lines (158 loc) • 4.64 kB
CSS
.mc-checkbox-wrapper {
--mc-checkbox-font-size: var(--mc-font-size-base);
--mc-checkbox-font-weight: var(--mc-font-weight-primary);
--mc-checkbox-border-radius: var(--mc-border-radius-small);
--mc-checkbox-text-color: var(--mc-text-color-primary);
--mc-checkbox-hover-border-color: var(--mc-color-primary);
--mc-checkbox-checked-icon-color: var(--mc-color-white);
--mc-checkbox-checked-bg-color: var(--mc-color-primary);
--mc-checkbox-indeterminate-icon-color: var(--mc-color-primary);
--mc-checkbox-indeterminate-bg-color: var(--mc-color-white);
--mc-checkbox-disabled-checked-icon-color: var(--mc-text-color-placeholder);
--mc-checkbox-disabled-indeterminate-icon-color: var(--mc-text-color-placeholder);
}
.mc-checkbox-wrapper {
position: relative;
display: inline-flex;
align-items: center;
user-select: none;
color: var(--mc-checkbox-text-color);
font-size: var(--mc-checkbox-font-size);
cursor: pointer;
transition: var(--mc-transition-color);
}
.mc-checkbox-wrapper input[type=checkbox] {
margin: 0;
width: 0;
height: 0;
}
.mc-checkbox-wrapper.is-disabled {
cursor: not-allowed;
color: var(--mc-disabled-text-color);
}
.mc-checkbox-wrapper .mc-checkbox {
position: relative;
padding: 0;
margin: 0;
width: 1em;
height: 1em;
border-radius: var(--mc-checkbox-border-radius);
border: var(--mc-border);
}
.mc-checkbox-wrapper .mc-checkbox--inner {
position: absolute;
padding: 0;
width: 1em;
height: 1em;
border-radius: var(--mc-checkbox-border-radius);
opacity: 0;
}
.mc-checkbox-wrapper .mc-checkbox.is-checked {
border-color: var(--mc-color-primary);
background-color: var(--mc-checkbox-checked-bg-color);
}
.mc-checkbox-wrapper .mc-checkbox.is-checked::before {
content: "";
position: absolute;
width: calc(1em + 2 * var(--mc-border-width));
height: calc(1em + 2 * var(--mc-border-width));
left: calc(0px - var(--mc-border-width));
top: calc(0px - var(--mc-border-width));
border-radius: 3px;
opacity: 0;
background-color: var(--mc-checkbox-checked-bg-color);
animation: border-appear 0.2s ease-in both;
}
.mc-checkbox-wrapper .mc-checkbox.is-checked .mc-checkbox--inner {
opacity: 1;
}
.mc-checkbox-wrapper .mc-checkbox.is-checked .mc-checkbox--inner::before {
content: "";
position: absolute;
width: 0.625em;
height: 0.375em;
left: calc(50% - 0.3125em);
top: calc(50% - 0.25em);
box-sizing: border-box;
border-style: var(--mc-border-style);
border-color: transparent transparent var(--mc-checkbox-checked-icon-color) var(--mc-checkbox-checked-icon-color);
border-width: 0 0 2px 2px;
transform: rotate(-45deg);
animation: point-appear 0.1s ease-in 0.1s backwards;
}
.mc-checkbox-wrapper .mc-checkbox.is-indeterminate {
background-color: var(--mc-checkbox-indeterminate-bg-color);
border: var(--mc-border);
}
.mc-checkbox-wrapper .mc-checkbox.is-indeterminate .mc-checkbox--inner {
opacity: 1;
}
.mc-checkbox-wrapper .mc-checkbox.is-indeterminate .mc-checkbox--inner::after {
content: "";
position: absolute;
width: 0.625em;
height: 0.625em;
left: calc(50% - 0.3125em);
top: calc(50% - 0.3125em);
box-sizing: border-box;
background-color: var(--mc-checkbox-indeterminate-icon-color);
animation: square-appear 0.1s ease-in 0.1s backwards;
}
.mc-checkbox-wrapper .mc-checkbox.is-disabled {
pointer-events: none;
border-color: var(--mc-disabled-border-color);
background-color: var(--mc-disabled-bg-color);
}
.mc-checkbox-wrapper .mc-checkbox.is-disabled .mc-checkbox--inner::before {
border-color: transparent transparent var(--mc-checkbox-disabled-checked-icon-color) var(--mc-checkbox-disabled-checked-icon-color);
}
.mc-checkbox-wrapper .mc-checkbox.is-disabled .mc-checkbox--inner::after {
background-color: var(--mc-checkbox-disabled-indeterminate-icon-color);
}
.mc-checkbox-wrapper .mc-checkbox.is-disabled::before {
animation: none;
}
.mc-checkbox-wrapper:hover :not(.is-disabled).mc-checkbox {
border-color: var(--mc-checkbox-hover-border-color);
}
.mc-checkbox-wrapper span {
padding: 0 5px;
}
@keyframes point-appear {
0% {
transform: rotate(-45deg) scale(0);
opacity: 0;
}
70% {
transform: rotate(-45deg) scale(1.2);
opacity: 1;
}
100% {
transform: rotate(-45deg) scale(1);
opacity: 1;
}
}
@keyframes square-appear {
0% {
transform: scale(0);
opacity: 0;
}
70% {
transform: scale(1.2);
opacity: 1;
}
100% {
transform: scale(1);
opacity: 1;
}
}
@keyframes border-appear {
0% {
transform: scale(1);
opacity: 1;
}
100% {
transform: scale(1.4);
opacity: 0;
}
}