Pill Toggle
Home
Snippets
Pill Toggle
HTML
CSS
JS
<fieldset class="option"> <legend class="option__legend">Are you ready for a challenge? </legend> <fieldset class="option__fieldset"> <div class="option__box"> <label class="option__radio"> <input type="radio" id="yes" name="answer" value="yes" checked="checked" class="option__input" /> <svg xmlns="http://www.w3.org/2000/svg" height="24" viewBox="0 -960 960 960" width="24" fill="#1f1f1f"> <path d="M382-240 154-468l57-57 171 171 367-367 57 57-424 424Z" /> </svg> </svg> Yes </label> <label class="option__radio"> <input type="radio" id="no" name="answer" value="no" class="option__input" /> <svg xmlns="http://www.w3.org/2000/svg" height="24" viewBox="0 -960 960 960" width="24" fill="currentColor"> <path d="m256-200-56-56 224-224-224-224 56-56 224 224 224-224 56 56-224 224 224 224-56 56-224-224-224 224Z" /> </svg> </svg> No </label> </div> </fieldset>
body { display: flex; justify-content: center; align-items: center; min-height: 100vh; font-size: 1.25rem; font-family: system-ui; text-align: center; margin: 0; } *, :after, :before { box-sizing: border-box; } .option { border: none; } .option__legend { display: block; margin-bottom: 1rem; } .option__fieldset { background-color: #fff; box-shadow: 0 0 1.5rem 0 rgba(0, 0, 0, 0.12); border-radius: 5rem; padding: 2rem; border: none; } .option__box { display: grid; grid-template-columns: 1fr 1fr; background-color: #d8f1ff; border-radius: 5rem; position: relative; isolation: isolate; padding-inline: 0.5rem; } .option__box::before { content: ""; border-radius: 5rem; border: 4px solid #fff; background-color: #97dbff; position: absolute; inset: 0; width: calc(50% + 0.5rem); margin-block: -6px; z-index: -1; transition: transform 0.2s cubic-bezier(0.66, -0.33, 0.33, 1.33); } .option__box:has([value="no"]:checked)::before { transform: translateX(calc(100% - 1rem)); } .option__radio { text-align: center; padding: 1rem 2rem; position: relative; display: flex; gap: 0.5rem; } .option__input { outline-offset: 0.5rem; outline-color: currentColor; cursor: pointer; position: absolute; inset: 0; border-radius: 5rem; appearance: none; margin: 0; padding: 0; }
//javascript
Ad #1
Ad #2
Scroll to Top