<label class="switch"> <input type="checkbox" hidden> <div class="switch__wrapper"> <div class="switch__toggle"></div> </div> </label> :root { --displacement: -0.1rem; --tremble: -10deg; --trembleF: 5deg; --iPos: 50%; --bPos: -75%; --fPos: -50%; --time: 430ms; } body { display: grid; height: 100vh; margin: 0; background: #212121; } .switch { margin: auto; } .switch__wrapper { position: relative; display: flex; align-items: center; justify-content: center; width: 4rem; height: 2rem; border: 2px solid red; border-radius: 99rem; transform-origin: left center; animation: checked__wrapper var(--time) ease-in forwards; mix-blend-mode: lighten; } .switch__wrapper::before, .switch__wrapper::after { content: ""; position: absolute; width: 100%; height: 100%; border: 2px solid #000; border-radius: inherit; transform-origin: inherit; animation: inherit; mix-blend-mode: inherit; } .switch__wrapper::before { --tremble: -12deg; --trembleF: -7deg; border-color: lime; animation-delay: 50ms; } .switch__wrapper::after { --tremble: -8deg; --trembleF: -4deg; border-color: blue; animation-delay: 75ms; } .switch__toggle { width: 1.5rem; height: 1.5rem; border-radius: 99rem; box-shadow: inset 0 0 0 2px #fff; transform-origin: inherit; animation: checked__toggle var(--time) ease-in forwards; } input:active + .switch__wrapper .switch__toggle { width: 1.6rem; } input:checked + .switch__wrapper { transform-origin: right center; animation-name: checked__wrapper--r; } input:checked + .switch__wrapper .switch__toggle { background: #fff; animation-name: checked__toggle--r; } @keyframes checked__wrapper { 0%, 45%, 100% { transform: rotateY(0deg); } 48% { transform: translateX(var(--displacement)); filter: blur(0); } 55% { transform: rotateZ(var(--tremble)); filter: blur(1px); } 65% { transform: rotateZ(var(--trembleF)); } } @keyframes checked__wrapper--r { 0%, 45%, 100% { transform: rotateY(0deg); } 48% { transform: translateX(calc(-1 * var(--displacement))); filter: blur(0); } 55% { transform: rotateZ(calc(-1 * var(--tremble))); filter: blur(1px); } 65% { transform: rotateZ(calc(-1 * var(--trembleF))); } } @keyframes checked__toggle { 0% { background: #fff; transform: translateX(var(--iPos)) scale(1.25, 1); } 45% { background: #fff; transform: translateX(var(--bPos)) scale(1, 1); } 50% { background: transparent; transform: translateX(var(--bPos)) scale(0.5, 1.1); } 65% { transform: translateX(var(--bPos)) scale(1, 1); } 100% { transform: translateX(var(--fPos)); } } @keyframes checked__toggle--r { 0% { background: transparent; transform: translateX(calc(-1 * var(--iPos))) scale(1.25, 1); } 45% { background: transparent; transform: translateX(calc(-1 * var(--bPos))) scale(1, 1); } 50% { background: #fff; transform: translateX(calc(-1 * var(--bPos))) scale(0.5, 1.1); } 65% { transform: translateX(calc(-1 * var(--bPos))) scale(1, 1); } 100% { transform: translateX(calc(-1 * var(--fPos))); } } Навигация по записям Menu Switcher Radio select