<div class="toggle-wrapper red">  
  <input class="toggle-checkbox" type="checkbox">
  <div class="toggle-container">
    <div class="toggle-ball"></div>
  </div>
</div>

<div class="toggle-wrapper yellow">  
  <input class="toggle-checkbox" type="checkbox">
  <div class="toggle-container">
    <div class="toggle-ball"></div>
  </div>
</div>

<div class="toggle-wrapper blue">  
  <input class="toggle-checkbox" type="checkbox">
  <div class="toggle-container">
    <div class="toggle-ball"></div>
  </div>
</div>
* {
  margin: 0;
  padding: 0;
  box-sizing: border-box;
  -webkit-tap-highlight-color: transparent;
  outline: 1px solid transparent;
}

body {
  display: flex;
  flex-direction: column;
  justify-content: center;
  align-items: center;
  gap: 8px;
  min-height: 100vh;
  // resize for demo
  font-size: 2em;
}

.toggle-wrapper {
  display: inline-block;
  position: relative;
  border-radius: 3.125em;
  overflow: hidden;
}

.toggle-checkbox {
  -webkit-appearance: none;
  appearance: none;
  position: absolute;
  z-index: 1;
  top: 0;
  left: 0;
  border-radius: inherit;
  width: 100%;
  height: 100%;
  cursor: pointer;
}

.toggle-container {
  display: flex;
  position: relative;
  border-radius: inherit;
  width: 2.5em;
  height: 1.25em;
  background-color: #d1d4dc;
  box-shadow:
    inset .0625em 0 0 #d4d2de,
    inset -.0625em 0 0 #d4d2de,
    inset .125em .25em .125em .25em #b5b5c3;
  mask-image: radial-gradient(#fff, #000);
  transition: all .4s;
  
  .toggle-wrapper.red > .toggle-checkbox:checked + & {
    background-color: #f5233c;
    box-shadow:
      inset .0625em 0 0 #f5233c,
      inset -.0625em 0 0 #f5233c,
      inset .125em .25em .125em .25em #d70026;
  }
  
  .toggle-wrapper.yellow > .toggle-checkbox:checked + & {
    background-color: #fbc433;
    box-shadow:
      inset .0625em 0 0 #fbc433,
      inset -.0625em 0 0 #fbc433,
      inset .125em .25em .125em .25em #ee9902;
  }
  
  .toggle-wrapper.blue > .toggle-checkbox:checked + & {
    background-color: #4588ff;
    box-shadow:
      inset .0625em 0 0 #4588ff,
      inset -.0625em 0 0 #4588ff,
      inset .125em .25em .125em .25em #3952f3;
  }
}

.toggle-ball {
  position: relative;
  border-radius: 50%;  
  width: 1.25em;
  height: 1.25em;
  background-image:
    radial-gradient(rgba(#fff, .6), rgba(#fff, 0) 16%),
    radial-gradient(#d2d4dc, #babac2);
  background-position: -.25em -.25em;
  background-size: auto, calc(100% + .25em) calc(100% + .25em);
  background-repeat: no-repeat;
  box-shadow:
    .25em .25em .25em #8d889e,
    inset .0625em .0625em .25em #d1d1d6,
    inset -.0625em -.0625em .25em #8c869e;
  transition: transform .4s, box-shadow .4s;
  
  &::after {
    content: '';
    position: absolute;
    top: 0;
    left: 0;
    border-radius: 50%;
    width: 100%;
    height: 100%;
    background-position: -.25em -.25em;
    background-size: auto, calc(100% + .25em) calc(100% + .25em);
    background-repeat: no-repeat;
    opacity: 0;
    transition: opacity .4s;
    
    .toggle-wrapper.red > .toggle-container > & {
      background-image:
        radial-gradient(rgba(#fff, .6), rgba(#fff, 0) 16%),
        radial-gradient(#ff2751, #e0022f);
      box-shadow:
        .25em .25em .25em #b70033,
        inset .0625em .0625em .25em #fe7d7e,
        inset -.0625em -.0625em .25em #870002;
    }
    
    .toggle-wrapper.yellow > .toggle-container > & {
      background-image:
        radial-gradient(rgba(#fff, .6), rgba(#fff, 0) 16%),
        radial-gradient(#f5d05f, #d67f1b);
      box-shadow:
        .25em .25em .25em #bc6d00,
        inset .0625em .0625em .25em #fff27a,
        inset -.0625em -.0625em .25em #9f3901;
    }
    
    .toggle-wrapper.blue > .toggle-container > & {
      background-image:
        radial-gradient(rgba(#fff, .6), rgba(#fff, 0) 16%),
        radial-gradient(#419efe, #4ba2ff);
      box-shadow:
        .25em .25em .25em #2634d0,
        inset .0625em .0625em .25em #8dd5ff,
        inset -.0625em -.0625em .25em #1500ac;
    }
  }
  
  .toggle-wrapper > .toggle-checkbox:checked + .toggle-container > &::after {
    opacity: 1;
  }
  
  .toggle-checkbox:checked + .toggle-container > & {
    transform: translateX(100%);
  }
}
View Compiled

External CSS

This Pen doesn't use any external CSS resources.

External JavaScript

  1. https://codepen.io/nicolasjesenberger/pen/VwEzMrY/81eb6139c2c9b7dbc46e43d898e7d29b.js