.toggle{ --uiToggleSize: var(--toggleSize, 20px); --uiToggleIndent: var(--toggleIndent, .4em); --uiToggleBorderWidth: var(--toggleBorderWidth, 2px); --uiToggleColor: var(--toggleColor, #000); --uiToggleDisabledColor: var(--toggleDisabledColor, #868e96); --uiToggleBgColor: var(--toggleBgColor, #fff); --uiToggleArrowWidth: var(--toggleArrowWidth, 2px); --uiToggleArrowColor: var(--toggleArrowColor, #fff); margin-bottom: 1.5rem; display: inline-block; position: relative; } .toggle__input{ position: absolute; left: -99999px; } .toggle__label{ display: inline-flex; min-height: var(--uiToggleSize); padding-left: calc(var(--uiToggleSize) + var(--uiToggleIndent)); } .toggle__input:not(:disabled) ~ .toggle__label{ cursor: pointer; } .toggle__label::before, .toggle__label::after{ content: ""; box-sizing: border-box; width: 1em; height: 1em; font-size: var(--uiToggleSize); position: absolute; left: 0; top: 0; } .toggle__label:before{ border: var(--uiToggleBorderWidth) solid var(--uiToggleColor); z-index: 2; } .toggle__input:disabled ~ .toggle__label::before{ border-color: var(--uiToggleDisabledColor); } .toggle__input:focus ~ .toggle__label::before{ box-shadow: 0 0 0 2px var(--uiToggleBgColor), 0 0 0 4px var(--uiToggleColor); } .toggle__input:not(:disabled):checked:focus ~ .toggle__label::after{ box-shadow: 0 0 0 2px var(--uiToggleBgColor), 0 0 0 4px var(--uiToggleColor); } .toggle__input:not(:disabled) ~ .toggle__label::after{ background-color: var(--uiToggleColor); opacity: 0; } .toggle__input:not(:disabled):checked ~ .toggle__label::after{ opacity: 1; } .toggle__text{ margin-top: auto; margin-bottom: auto; } .toggle__text::before{ content: ""; box-sizing: border-box; width: 0; height: 0; font-size: var(--uiToggleSize); border-left-width: 0; border-bottom-width: 0; border-left-style: solid; border-bottom-style: solid; border-color: var(--uiToggleArrowColor); position: absolute; top: .5428em; left: .2em; z-index: 3; transform-origin: left top; transform: rotate(-40deg) skew(10deg); } .toggle__input:not(:disabled):checked ~ .toggle__label .toggle__text::before{ width: .5em; height: .25em; border-left-width: var(--uiToggleArrowWidth); border-bottom-width: var(--uiToggleArrowWidth); will-change: width, height; transition: width .1s ease-out .2s, height .2s ease-out; margin-top: 3px; } .toggle__input:disabled ~ .toggle__label{ opacity: .24; cursor: not-allowed; } .toggle__label::before, .toggle__label::after{ border: 2px solid; border-color: white; } .toggle__input:not(:disabled) ~ .toggle__label::before, .toggle__input:not(:disabled) ~ .toggle__label::after{ opacity: 1; transform-origin: center center; margin-top: 3px; } .toggle__text::before{ opacity: 0; } .toggle__input:not(:disabled):checked ~ .toggle__label .toggle__text::before{ opacity: 1; transition: opacity .1s ease-out .3s, width .1s ease-out .5s, height .2s ease-out .3s; } .toggle{ --toggleColor: transparent; --toggleBgColor: transparent; --toggleSize: 1.25rem; }