A beary cute toggle.
A Pen by Anastasia Goodwin on CodePen.
A beary cute toggle.
A Pen by Anastasia Goodwin on CodePen.
| <div class="toggleWrapper"> | |
| <input type="checkbox" class="dn" id="dn"/> | |
| <label for="dn" class="toggle"> | |
| <span class="toggle__handler"> | |
| </label> | |
| <div class="bear-body"> | |
| <span class="eye left"></span> | |
| <span class="eye right"></span> | |
| </div> | |
| </div> |
| $brown: #7e2804; | |
| $orange: #fe7702; | |
| $darkBrown: #3d2526; | |
| $yellow: #fdb300; | |
| $tan: #dcc8a3; | |
| body { | |
| background-color: #7994a5; | |
| font-family: 'Helvetica Rounded', 'Arial Rounded MT Bold', 'Montserrat', | |
| sans-serif; | |
| color: #fff; | |
| display: flex; | |
| justify-content: center; | |
| align-items: center; | |
| height: 100vh; | |
| } | |
| .toggleWrapper { | |
| padding: 20px; | |
| position: relative; | |
| input { | |
| position: absolute; | |
| left: -99em; | |
| } | |
| } | |
| .toggle { | |
| cursor: pointer; | |
| display: inline-block; | |
| position: absolute; | |
| width: 90px; | |
| top: 56px; | |
| left: 50%; | |
| transform: translateX(-50%); | |
| height: 40px; | |
| background-color: $tan; | |
| border-radius: 90px - 6; | |
| z-index: 2; | |
| transition: background-color 200ms cubic-bezier(0.445, 0.05, 0.55, 0.95); | |
| } | |
| .toggle__handler { | |
| display: inline-block; | |
| position: relative; | |
| z-index: 1; | |
| top: 3px; | |
| left: 3px; | |
| width: 40px - 6; | |
| height: 40px - 6; | |
| background-color: $brown; | |
| border-radius: 50px; | |
| box-shadow: 0 2px 6px rgba(0, 0, 0, 0.3); | |
| transition: all 400ms cubic-bezier(0.68, -0.55, 0.265, 1.55); | |
| transform: rotate(-45deg); | |
| } | |
| input:checked { | |
| + .toggle { | |
| &:after { | |
| color: #ffffff; | |
| } | |
| .toggle__handler { | |
| transform: translate3d(49px, 0, 0) rotate(0); | |
| } | |
| + .bear-body { | |
| transform: rotateY(180deg); | |
| } | |
| } | |
| } | |
| .bear-body { | |
| position: relative; | |
| border-radius: 20px 10px 5px; | |
| border-bottom: 150px solid $brown; | |
| border-left: 20px solid transparent; | |
| border-right: 10px solid transparent; | |
| height: 0; | |
| width: 94px; | |
| &::before, | |
| &::after { | |
| content: ''; | |
| position: absolute; | |
| height: 25px; | |
| width: 25px; | |
| border-radius: 50%; | |
| top: -16px; | |
| background: radial-gradient($tan 5px, $brown 6px); | |
| } | |
| &::before { | |
| left: -12.5px; | |
| } | |
| &::after { | |
| right: -12.5px; | |
| } | |
| .eye { | |
| position: absolute; | |
| top: 18px; | |
| background: $darkBrown; | |
| height: 14px; | |
| width: 14px; | |
| border-radius: 50%; | |
| background-image: radial-gradient(circle at 4px, white 1px, $darkBrown 2px); | |
| &.left { | |
| left: 20px; | |
| animation: blink 3s ease-in-out infinite; | |
| } | |
| &.right { | |
| left: 46px; | |
| animation: blink 3.5s ease-in-out infinite; | |
| } | |
| } | |
| } | |
| @keyframes blink { | |
| 85% { | |
| transform: rotateX(0deg); | |
| } | |
| 90% { | |
| transform: rotateX(90deg); | |
| } | |
| } |