codepens/toggle/dist/style.css

162 lines
2.9 KiB
CSS

/* Uncomment this rule to effectively break the stylesheet, thus simulating no-CSS styles. */
/* .selector { [property: value; } */
.Toggle {
display: flex;
flex-wrap: wrap;
align-items: center;
position: relative;
margin-bottom: 1em;
cursor: pointer;
gap: 1ch;
}
button.Toggle {
border: 0;
padding: 0;
background-color: transparent;
font: inherit;
}
.Toggle__input {
position: absolute;
opacity: 0;
width: 100%;
height: 100%;
}
.Toggle__display {
--offset: 0.25em;
--diameter: 1.8em;
display: inline-flex;
align-items: center;
justify-content: space-around;
box-sizing: content-box;
width: calc(var(--diameter) * 2 + var(--offset) * 2);
height: calc(var(--diameter) + var(--offset) * 2);
border: 0.1em solid rgb(0 0 0 / 0.2);
position: relative;
border-radius: 100vw;
background-color: #fbe4e2;
transition: 250ms;
}
.Toggle__display::before {
content: "";
z-index: 2;
position: absolute;
top: 50%;
left: var(--offset);
box-sizing: border-box;
width: var(--diameter);
height: var(--diameter);
border: 0.1em solid rgb(0 0 0 / 0.2);
border-radius: 50%;
background-color: white;
transform: translate(0, -50%);
will-change: transform;
transition: inherit;
}
.Toggle:focus .Toggle__display,
.Toggle__input:focus + .Toggle__display {
outline: 1px dotted #212121;
outline: 1px auto -webkit-focus-ring-color;
outline-offset: 2px;
}
.Toggle:focus,
.Toggle:focus:not(:focus-visible) .Toggle__display,
.Toggle__input:focus:not(:focus-visible) + .Toggle__display {
outline: 0;
}
.Toggle[aria-pressed="true"] .Toggle__display,
.Toggle__input:checked + .Toggle__display {
background-color: #e3f5eb;
}
.Toggle[aria-pressed="true"] .Toggle__display::before,
.Toggle__input:checked + .Toggle__display::before {
transform: translate(100%, -50%);
}
.Toggle[disabled] .Toggle__display,
.Toggle__input:disabled + .Toggle__display {
opacity: 0.6;
filter: grayscale(40%);
cursor: not-allowed;
}
[dir="rtl"] .Toggle__display::before {
left: auto;
right: var(--offset);
}
[dir="rtl"] .Toggle[aria-pressed="true"] + .Toggle__display::before,
[dir="rtl"] .Toggle__input:checked + .Toggle__display::before {
transform: translate(-100%, -50%);
}
.Toggle__icon {
display: inline-block;
width: 1em;
height: 1em;
color: inherit;
fill: currentcolor;
vertical-align: middle;
overflow: hidden;
}
.Toggle__icon--cross {
color: #e74c3c;
font-size: 85%;
}
.Toggle__icon--checkmark {
color: #1fb978;
}
*,
::before,
::after {
box-sizing: border-box;
}
html {
display: flex;
flex-direction: column;
height: 100%;
}
body {
display: flex;
flex-direction: column;
flex: 1 1 100%;
}
.container {
flex: 1 1 100%;
display: flex;
flex-direction: column;
padding: 1em;
}
.content {
max-width: 450px;
padding: 2em;
margin: auto;
border: 1px solid rgb(0 0 0 / 0.2);
border-radius: 0.25em;
}
.footer {
padding: 2em;
background-color: #eee;
}
.footer > p {
margin: 0;
}