main
fieldset
- for (let i = 5; i > 0; i--) {
input(id='star'+i, type='radio', name='rating', value=i)
label.full(for='star'+i, title=i+' stars')
input(id='star'+i+'5', type='radio', name='rating', value=i+'5')
label.half(for='star'+i+'5', title=i+',5 stars')
- }
View Compiled
body,
html {
background-color: var(--color-dark);
color: var(--color-white);
height: 100%;
}
main {
display: flex;
height: 100%;
width: 100%;
align-items: center;
justify-content: center;
}
label {
margin: 0;
padding: 0;
transform: scale(1);
&:before {
transition: transform 0.3s;
}
&.full {
&:hover {
&:before {
transform: scale(1.5);
}
}
}
&.half {
&:hover {
&:before {
transform: translate(-25%, 0%) scale(1.5);
}
}
}
}
fieldset {
border: 1px solid red;
display: flex;
flex-wrap: nowrap;
margin: 0;
padding: 0;
& > input {
display: none;
}
& > label {
width: auto;
padding: 0;
margin: 0;
display: block;
color: var(--color-white);
&:before {
content: "";
display: inline-block;
display: block;
border-radius: 1rem;
background-color: var(--color-white);
width: 2rem;
height: 2rem;
}
&.half {
position: absolute;
z-index: 10;
&:before {
width: 1rem;
border-radius: 1rem 0 0 1rem;
background-color: var(--color-white);
}
}
}
& > input:checked ~ label,
/* show gold star when clicked */ &:not(:checked) > label:hover,
/* hover current star */ &:not(:checked) > label:hover ~ label {
&:before {
background-color: var(--color-yellow);
} /* hover previous stars in list */
}
& > input:checked + label:hover,
/* hover current star when changing rating */ & > input:checked ~ label:hover,
& > label:hover ~ input:checked ~ label,
/* lighten current selection */ & > input:checked ~ label:hover ~ label {
&:before {
background-color: var(--color-yellow);
}
}
}
View Compiled
This Pen doesn't use any external JavaScript resources.