.form-horizontal .radio { margin-bottom: 10px; } .radio { label { cursor: pointer; padding-left: 45px; position: relative; span { display: block; position: absolute; left: 10px; top: 2px; transition-duration: 0.2s; } .circle { border: 2px solid $lightbg-text; height: 15px; width: 15px; border-radius: 100%; } .check { height: 15px; width: 15px; border-radius: 100%; background-color: $radio-default; transform: scale3d(0, 0, 0); } .check:after { display: block; position: absolute; content: ""; background-color: $lightbg-text; left: -18px; top: -18px; height: 50px; width: 50px; border-radius: 100%; z-index: 1; opacity: 0; margin: 0; transform: scale3d(1.5, 1.5, 1); } input[type=radio]:not(:checked) ~ .check:after { animation: rippleOff 500ms; } input[type=radio]:checked ~ .check:after { animation: rippleOn 500ms; } } @include variations(unquote(" input[type=radio]:checked ~ .check"), background-color, $radio-default); @include variations(unquote(" input[type=radio]:checked ~ .circle"), border-color, $radio-default); input[type=radio][disabled] ~ .check, input[type=radio][disabled] ~ .circle { opacity: 0.5; } input[type=radio] { opacity: 0; height: 0; width: 0; overflow: hidden; } input[type=radio]:checked ~ .check { transform: scale3d(0.55, 0.55, 1); } input[type=radio][disabled] ~ .circle { border-color: $lightbg-text; } input[type=radio][disabled] ~ .check { background-color: $lightbg-text; } } @keyframes rippleOn { 0% { opacity: 0; } 50% { opacity: 0.2; } 100% { opacity: 0; } } @keyframes rippleOff { 0% { opacity: 0; } 50% { opacity: 0.2; } 100% { opacity: 0; } }