<div class="container">
<label><input type="radio" name="e"> First</label>
<label><input type="radio" name="e"> Second</label>
<label><input type="radio" name="e"> Third</label>
<label><input type="radio" name="e"> Fourth</label>
<label><input type="radio" name="e"> Five</label>
<label><input type="radio" name="e" disabled> And so on ..</label>
</div>
.container {
--s: 1em; /* control the size */
--g: 10px; /* the gap */
--c: #009688; /* the active color */
display: grid;
grid-auto-rows: 1fr;
gap: var(--g);
position: relative;
}
.container:before {
content:"";
position: absolute;
height: calc(var(--s)/2);
left: calc(var(--s)/4 + var(--_x,0px));
top: calc(var(--s)/4);
background: var(--c);
border-radius: 50%;
aspect-ratio: 1;
transition: .4s,left cubic-bezier(.1,-2000,.7,-2000) .4s;
}
label {
display: inline-flex;
line-height: var(--s);
align-items: center;
gap: 10px;
cursor: pointer;
}
input {
height: var(--s);
aspect-ratio: 1;
border: calc(var(--s)/8) solid var(--_c,#939393);
border-radius: 50%;
outline-offset: calc(var(--s)/10);
padding: calc(var(--s)/8);
appearance: none;
appearance: none;
appearance: none;
cursor: pointer;
font-size: inherit;
margin: 0;
transition: .3s;
}
input:checked {
--_c: var(--c);
}
.container:not(:has(input:checked)):before {
--_i: -1;
opacity: 0;
}
.container:has(input:checked):before {
opacity: 1;
transform: translateY(calc(var(--_i)*(var(--s) + var(--g))))
}
.container:has(label:nth-child(1) input:checked):before {--_i:0;--_x:.02px}
.container:has(label:nth-child(2) input:checked):before {--_i:1;--_x:.04px}
.container:has(label:nth-child(3) input:checked):before {--_i:2;--_x:.06px}
.container:has(label:nth-child(4) input:checked):before {--_i:3;--_x:.08px}
.container:has(label:nth-child(5) input:checked):before {--_i:4;--_x:.1px}
/* and so on ..*/
input:disabled {
background:
linear-gradient(#939393 0 0)
50%/100% 20% no-repeat content-box;
opacity: .5;
cursor: not-allowed;
}
@media print {
input[type=radio] {
appearance: auto;
appearance: auto;
appearance: auto;
background: none;
}
}
@supports not selector(:has(*)) {
.container:before {
display: none;
}
input:checked {
--_c: var(--c);
background: var(--c) content-box;
}
}
body {
margin:0;
min-height:100vh;
display: grid;
place-content: center;
font-family: system-ui, sans-serif;
font-size: 40px;
}
This Pen doesn't use any external CSS resources.
This Pen doesn't use any external JavaScript resources.