src/toggle/toggle.css (146 lines of code) (raw):
@import '../global/variables.css';
.toggle {
--ring-toggle-padding: 2px;
--ring-toggle-duration: 300ms;
--ring-toggle-timing-function: cubic-bezier(0.23, 1, 0.32, 1);
display: inline-flex;
align-items: baseline;
cursor: pointer;
&:hover .switch {
--ring-toggle-background-color: var(--ring-border-hover-color);
transition: none;
}
&.disabled {
pointer-events: none;
}
}
.label {
margin-left: var(--ring-unit);
}
.help {
margin-top: calc(var(--ring-unit) / 2);
}
.disabled .label,
.disabled .help {
color: var(--ring-disabled-color);
}
.leftLabel {
margin-right: var(--ring-unit);
}
.switchWrapper {
position: relative;
flex-shrink: 0;
}
.input {
position: absolute;
top: 0;
left: 0;
width: 100%;
height: 100%;
margin: 0;
opacity: 0;
}
.switch {
--ring-toggle-item-color: var(--ring-white-text-color);
--ring-toggle-background-color: var(--ring-borders-color);
--ring-toggle-border-color: var(--ring-toggle-background-color);
--ring-switch-border-color: var(--ring-toggle-item-color);
position: relative;
display: inline-block;
box-sizing: border-box;
width: 100%;
height: 100%;
transition: background-color var(--ring-toggle-timing-function) var(--ring-toggle-duration);
border: solid 1px var(--ring-toggle-border-color);
background-color: var(--ring-toggle-background-color);
.input:focus + & {
box-shadow:
inset 0 0 0 1px var(--ring-border-hover-color),
0 0 0 1px var(--ring-border-hover-color);
}
&::before {
position: absolute;
top: 50%;
left: -1px;
box-sizing: border-box;
width: calc(var(--ring-unit) * 1.5);
height: calc(var(--ring-unit) * 1.5);
content: '';
transition: transform var(--ring-toggle-timing-function) var(--ring-toggle-duration);
transform: translateX(var(--ring-toggle-padding)) translateY(-50%);
border: solid 1px var(--ring-switch-border-color);
border-radius: calc(var(--ring-unit) * 0.75);
background-color: var(--ring-toggle-item-color);
}
}
.input:checked + .switch {
--ring-toggle-background-color: var(--ring-main-color);
}
:checked:hover + .switch {
--ring-toggle-background-color: var(--ring-main-hover-color);
}
.size16 {
& .switchWrapper {
width: calc(var(--ring-unit) * 3);
height: calc(var(--ring-unit) * 2);
}
& .switch {
vertical-align: -3px;
border-radius: var(--ring-unit);
&::before {
width: calc(var(--ring-unit) * 1.5);
height: calc(var(--ring-unit) * 1.5);
border-radius: calc(var(--ring-unit) * 0.75);
}
}
/* stylelint-disable-next-line selector-max-specificity */
& .input:checked + ::before {
transform: translateX(calc(var(--ring-unit) * 1.5 - var(--ring-toggle-padding))) translateY(-50%);
}
}
.size14 {
& .switchWrapper {
width: calc(var(--ring-unit) * 3);
height: 14px;
}
& .switch {
vertical-align: -2px;
border-radius: 7px;
&::before {
width: 10px;
height: 10px;
border-radius: 5px;
}
}
/* stylelint-disable-next-line selector-max-specificity */
& .input:checked + ::before {
transform: translateX(12px) translateY(-50%);
}
}
.size20 {
& .switchWrapper {
width: calc(var(--ring-unit) * 4);
height: calc(var(--ring-unit) * 2.5);
}
& .switch {
vertical-align: -5px;
border-radius: calc(var(--ring-unit) * 1.25);
&::before {
width: calc(var(--ring-unit) * 2);
height: calc(var(--ring-unit) * 2);
border-radius: calc(var(--ring-unit));
}
}
/* stylelint-disable-next-line selector-max-specificity */
& .input:checked + ::before {
transform: translateX(calc(var(--ring-unit) * 2 - var(--ring-toggle-padding))) translateY(-50%);
}
}
.input[disabled] + .switch {
--ring-toggle-item-color: var(--ring-content-background-color);
}
/* stylelint-disable-next-line selector-max-specificity */
.input:checked[disabled] + .switch {
--ring-toggle-background-color: var(--ring-border-hover-color);
}
/* stylelint-disable-next-line selector-max-specificity */
.input[disabled]:not(:checked) + .switch {
--ring-toggle-background-color: var(--ring-disabled-background-color);
--ring-toggle-border-color: var(--ring-border-disabled-color);
--ring-switch-border-color: var(--ring-border-disabled-color);
}