zarm-web
Version:
基于 React 的桌面端UI库
397 lines (388 loc) • 8.59 kB
CSS
.zw-activity-indicator {
display: inline-block;
position: relative;
transform: rotate(-90deg);
width: var(--activity-indicator-size-md);
height: var(--activity-indicator-size-md);
/* sizes */
}
.zw-activity-indicator__path {
stroke: var(--activity-indicator-path-color);
}
.zw-activity-indicator__line {
stroke-dasharray: 314.1592674;
stroke: var(--theme-primary);
}
.zw-activity-indicator--lg {
width: var(--activity-indicator-size-lg);
height: var(--activity-indicator-size-lg);
}
.zw-activity-indicator--circular {
display: inline-block;
}
.zw-activity-indicator--circular svg {
vertical-align: top;
animation: zw-activity-indicator_rotate360 2s linear infinite;
}
.zw-activity-indicator--circular circle {
stroke-linecap: round;
stroke: var(--theme-primary);
animation: zw-activity-indicator_rotate-circular 1.5s ease-in-out infinite;
}
.zw-activity-indicator--spinner {
animation: zw-activity-indicator_rotate360 0.8s linear infinite;
animation-timing-function: steps(12);
}
.zw-activity-indicator--spinner div {
position: absolute;
top: 0;
left: 0;
width: 100%;
height: 100%;
}
.zw-activity-indicator--spinner div:nth-of-type(1) {
transform: rotate(30deg);
opacity: 1;
}
.zw-activity-indicator--spinner div::before {
content: "";
display: block;
width: 2px;
height: 25%;
margin: 0 auto;
background-color: #989697;
border-radius: 40%;
}
.zw-activity-indicator--spinner div {
position: absolute;
top: 0;
left: 0;
width: 100%;
height: 100%;
}
.zw-activity-indicator--spinner div:nth-of-type(2) {
transform: rotate(60deg);
opacity: 0.9375;
}
.zw-activity-indicator--spinner div::before {
content: "";
display: block;
width: 2px;
height: 25%;
margin: 0 auto;
background-color: #989697;
border-radius: 40%;
}
.zw-activity-indicator--spinner div {
position: absolute;
top: 0;
left: 0;
width: 100%;
height: 100%;
}
.zw-activity-indicator--spinner div:nth-of-type(3) {
transform: rotate(90deg);
opacity: 0.875;
}
.zw-activity-indicator--spinner div::before {
content: "";
display: block;
width: 2px;
height: 25%;
margin: 0 auto;
background-color: #989697;
border-radius: 40%;
}
.zw-activity-indicator--spinner div {
position: absolute;
top: 0;
left: 0;
width: 100%;
height: 100%;
}
.zw-activity-indicator--spinner div:nth-of-type(4) {
transform: rotate(120deg);
opacity: 0.8125;
}
.zw-activity-indicator--spinner div::before {
content: "";
display: block;
width: 2px;
height: 25%;
margin: 0 auto;
background-color: #989697;
border-radius: 40%;
}
.zw-activity-indicator--spinner div {
position: absolute;
top: 0;
left: 0;
width: 100%;
height: 100%;
}
.zw-activity-indicator--spinner div:nth-of-type(5) {
transform: rotate(150deg);
opacity: 0.75;
}
.zw-activity-indicator--spinner div::before {
content: "";
display: block;
width: 2px;
height: 25%;
margin: 0 auto;
background-color: #989697;
border-radius: 40%;
}
.zw-activity-indicator--spinner div {
position: absolute;
top: 0;
left: 0;
width: 100%;
height: 100%;
}
.zw-activity-indicator--spinner div:nth-of-type(6) {
transform: rotate(180deg);
opacity: 0.6875;
}
.zw-activity-indicator--spinner div::before {
content: "";
display: block;
width: 2px;
height: 25%;
margin: 0 auto;
background-color: #989697;
border-radius: 40%;
}
.zw-activity-indicator--spinner div {
position: absolute;
top: 0;
left: 0;
width: 100%;
height: 100%;
}
.zw-activity-indicator--spinner div:nth-of-type(7) {
transform: rotate(210deg);
opacity: 0.625;
}
.zw-activity-indicator--spinner div::before {
content: "";
display: block;
width: 2px;
height: 25%;
margin: 0 auto;
background-color: #989697;
border-radius: 40%;
}
.zw-activity-indicator--spinner div {
position: absolute;
top: 0;
left: 0;
width: 100%;
height: 100%;
}
.zw-activity-indicator--spinner div:nth-of-type(8) {
transform: rotate(240deg);
opacity: 0.5625;
}
.zw-activity-indicator--spinner div::before {
content: "";
display: block;
width: 2px;
height: 25%;
margin: 0 auto;
background-color: #989697;
border-radius: 40%;
}
.zw-activity-indicator--spinner div {
position: absolute;
top: 0;
left: 0;
width: 100%;
height: 100%;
}
.zw-activity-indicator--spinner div:nth-of-type(9) {
transform: rotate(270deg);
opacity: 0.5;
}
.zw-activity-indicator--spinner div::before {
content: "";
display: block;
width: 2px;
height: 25%;
margin: 0 auto;
background-color: #989697;
border-radius: 40%;
}
.zw-activity-indicator--spinner div {
position: absolute;
top: 0;
left: 0;
width: 100%;
height: 100%;
}
.zw-activity-indicator--spinner div:nth-of-type(10) {
transform: rotate(300deg);
opacity: 0.4375;
}
.zw-activity-indicator--spinner div::before {
content: "";
display: block;
width: 2px;
height: 25%;
margin: 0 auto;
background-color: #989697;
border-radius: 40%;
}
.zw-activity-indicator--spinner div {
position: absolute;
top: 0;
left: 0;
width: 100%;
height: 100%;
}
.zw-activity-indicator--spinner div:nth-of-type(11) {
transform: rotate(330deg);
opacity: 0.375;
}
.zw-activity-indicator--spinner div::before {
content: "";
display: block;
width: 2px;
height: 25%;
margin: 0 auto;
background-color: #989697;
border-radius: 40%;
}
.zw-activity-indicator--spinner div {
position: absolute;
top: 0;
left: 0;
width: 100%;
height: 100%;
}
.zw-activity-indicator--spinner div:nth-of-type(12) {
transform: rotate(360deg);
opacity: 0.3125;
}
.zw-activity-indicator--spinner div::before {
content: "";
display: block;
width: 2px;
height: 25%;
margin: 0 auto;
background-color: #989697;
border-radius: 40%;
}
@keyframes zw-activity-indicator_rotate-circular {
0% {
stroke-dasharray: 1, 200;
stroke-dashoffset: 0;
}
50% {
stroke-dasharray: 120, 200;
stroke-dashoffset: -60;
}
100% {
stroke-dasharray: 120, 200;
stroke-dashoffset: -180;
}
}
@keyframes zw-activity-indicator_rotate360 {
from {
transform: rotate(0);
}
to {
transform: rotate(360deg);
}
}
.zw-switch {
position: relative;
display: inline-block;
border: none;
border-radius: var(--radius-round);
background-color: var(--switch-background);
transition: all 0.3s;
vertical-align: middle;
user-select: none;
cursor: pointer;
width: var(--switch-width-md);
height: var(--switch-height-md);
}
.zw-switch:after {
width: calc(var(--switch-height-md) - 3 * 2px);
height: calc(var(--switch-height-md) - 3 * 2px);
left: 3px;
top: 3px;
}
.zw-switch:not(.zw-switch--disabled):active::after {
width: calc((var(--switch-height-md) - 3 * 2px) * 1.33);
}
.zw-switch .zw-activity-indicator {
width: calc(var(--switch-height-md) - (3 + 2) * 2px);
height: calc(var(--switch-height-md) - (3 + 2) * 2px);
left: calc(3px + 2px);
top: calc(3px + 2px);
}
.zw-switch--checked:after {
left: 100%;
transform: translateX(-100%);
margin-left: -3px;
}
.zw-switch--checked .zw-activity-indicator {
left: 100%;
transform: translateX(-100%);
margin-left: calc(-1 * (3px + 2px));
}
.zw-switch::after {
content: " ";
position: absolute;
border-radius: var(--radius-round);
background-color: var(--color-text-inverse);
transition: all 0.3s cubic-bezier(0.78, 0.14, 0.15, 0.86);
}
.zw-switch .zw-activity-indicator {
position: absolute;
z-index: 1;
}
.zw-switch .zw-activity-indicator circle {
stroke: var(--switch-background);
}
.zw-switch--checked {
background-color: var(--theme-primary);
}
.zw-switch--checked .zw-activity-indicator circle {
stroke: var(--theme-primary);
}
.zw-switch--disabled {
cursor: not-allowed;
opacity: var(--opacity-disabled);
}
.zw-switch--sm {
width: var(--switch-width-sm);
height: var(--switch-height-sm);
}
.zw-switch--sm:after {
width: calc(var(--switch-height-sm) - 2 * 2px);
height: calc(var(--switch-height-sm) - 2 * 2px);
left: 2px;
top: 2px;
}
.zw-switch--sm:not(.zw-switch--sm--disabled):active::after {
width: calc((var(--switch-height-sm) - 2 * 2px) * 1.33);
}
.zw-switch--sm .zw-activity-indicator {
width: calc(var(--switch-height-sm) - (2 + 2) * 2px);
height: calc(var(--switch-height-sm) - (2 + 2) * 2px);
left: calc(2px + 2px);
top: calc(2px + 2px);
}
.zw-switch--sm.zw-switch--checked:after {
left: 100%;
transform: translateX(-100%);
margin-left: -2px;
}
.zw-switch--sm.zw-switch--checked .zw-activity-indicator {
left: 100%;
transform: translateX(-100%);
margin-left: calc(-1 * (2px + 2px));
}