What you can do is select the <li>
that you require and apply the property pointer-events:none !important;
. You can select them in many ways, for example by means of their attribute data-index
, as you can notice, this attribute is unique for each one, for which there will be no problem.
NOTE: You can also select the <li>
using nth-child()
or simply by adding a special class to each, in short there are many ways in which you can achieve your goal
Here I leave you one of the many ways in which you can solve your problem.
.c-rating {
display: -webkit-box;
display: -webkit-flex;
display: -ms-flexbox;
display: flex;
list-style: none;
margin: 0;
padding: 0;
}
.c-rating__item {
-webkit-box-flex: 0;
-webkit-flex: 0 0 12px;
-ms-flex: 0 0 12px;
flex: 0 0 12px;
height: 24px;
background-position: -12px 0px;
background-image: url(http://svgshare.com/i/3KS.svg);
cursor: pointer;
}
.c-rating__item.left {
background-position: 0px 0px;
}
.c-rating__item.is-active,
.c-rating__item:hover {
background-position: -36px 0;
}
.c-rating__item.left.is-active,
.c-rating__item.left:hover {
background-position: -24px 0;
}
li[data-index="7"],
li[data-index="8"],
li[data-index="9"]{
pointer-events:none !important;
}
<ul class="c-rating">
<li class="c-rating__item is-active left" data-index="0"></li>
<li class="c-rating__item is-active" data-index="1"></li>
<li class="c-rating__item is-active left" data-index="2"></li>
<li class="c-rating__item is-active" data-index="3"></li>
<li class="c-rating__item is-active left" data-index="4"></li>
<li class="c-rating__item is-active" data-index="5"></li>
<li class="c-rating__item is-active left" data-index="6"></li>
<li class="c-rating__item" data-index="7"></li>
<li class="c-rating__item left" data-index="8"></li>
<li class="c-rating__item" data-index="9"></li>
</ul>
And this other form that is totally valid:
.c-rating {
display: -webkit-box;
display: -webkit-flex;
display: -ms-flexbox;
display: flex;
list-style: none;
margin: 0;
padding: 0;
}
.c-rating__item {
-webkit-box-flex: 0;
-webkit-flex: 0 0 12px;
-ms-flex: 0 0 12px;
flex: 0 0 12px;
height: 24px;
background-position: -12px 0px;
background-image: url(http://svgshare.com/i/3KS.svg);
cursor: pointer;
}
.c-rating__item.left {
background-position: 0px 0px;
}
.c-rating__item.is-active,
.c-rating__item:hover {
background-position: -36px 0;
}
.c-rating__item.left.is-active,
.c-rating__item.left:hover {
background-position: -24px 0;
}
.c-rating__item:nth-child(8),
.c-rating__item:nth-child(9),
.c-rating__item:nth-child(10){
pointer-events:none !important;
}
<ul class="c-rating">
<li class="c-rating__item is-active left" data-index="0"></li>
<li class="c-rating__item is-active" data-index="1"></li>
<li class="c-rating__item is-active left" data-index="2"></li>
<li class="c-rating__item is-active" data-index="3"></li>
<li class="c-rating__item is-active left" data-index="4"></li>
<li class="c-rating__item is-active" data-index="5"></li>
<li class="c-rating__item is-active left" data-index="6"></li>
<li class="c-rating__item" data-index="7"></li>
<li class="c-rating__item left" data-index="8"></li>
<li class="c-rating__item" data-index="9"></li>
</ul>
I attached an image where you can see from which version the browsers support this property css:
ANOTHER SOLUTION USING EXISTING STYLES
But as I say yes or if you should add more lines of code
.c-rating {
display: -webkit-box;
display: -webkit-flex;
display: -ms-flexbox;
display: flex;
list-style: none;
margin: 0;
padding: 0;
}
.c-rating__item {
-webkit-box-flex: 0;
-webkit-flex: 0 0 12px;
-ms-flex: 0 0 12px;
flex: 0 0 12px;
height: 24px;
background-position: -12px 0px;
background-image: url(http://svgshare.com/i/3KS.svg);
cursor: pointer;
}
.c-rating__item.left {
background-position: 0px 0px;
}
.c-rating__item.is-active,
.c-rating__item:hover {
background-position: -36px 0;
}
.c-rating__item.left.is-active,
.c-rating__item.left:hover {
background-position: -24px 0;
}
.c-rating__item:nth-child(8),
.c-rating__item:nth-child(10){
background-position: -12px 0px !important;
}
.c-rating__item:nth-child(9){
background-position: 0px 0px !important;
}
<ul class="c-rating">
<li class="c-rating__item is-active left" data-index="0"></li>
<li class="c-rating__item is-active" data-index="1"></li>
<li class="c-rating__item is-active left" data-index="2"></li>
<li class="c-rating__item is-active" data-index="3"></li>
<li class="c-rating__item is-active left" data-index="4"></li>
<li class="c-rating__item is-active" data-index="5"></li>
<li class="c-rating__item is-active left" data-index="6"></li>
<li class="c-rating__item" data-index="7"></li>
<li class="c-rating__item left" data-index="8"></li>
<li class="c-rating__item" data-index="9"></li>
</ul>
EXPLANATION: This other way what it does is force the last <li>
to keep the initial position of its background-image
ignoring the :hover
For your solution taking into account the dynamism of the stars you should simply remove the lines of the :hover
and that's it.
.c-rating {
display: -webkit-box;
display: -webkit-flex;
display: -ms-flexbox;
display: flex;
list-style: none;
margin: 0;
padding: 0;
}
.c-rating__item {
-webkit-box-flex: 0;
-webkit-flex: 0 0 12px;
-ms-flex: 0 0 12px;
flex: 0 0 12px;
height: 24px;
background-position: -12px 0px;
background-image: url(http://svgshare.com/i/3KS.svg);
cursor: pointer;
}
.c-rating__item.left {
background-position: 0px 0px;
}
.c-rating__item.is-active{
background-position: -36px 0;
}
.c-rating__item.left.is-active{
background-position: -24px 0;
}
<ul class="c-rating">
<li class="c-rating__item is-active left" data-index="0"></li>
<li class="c-rating__item is-active" data-index="1"></li>
<li class="c-rating__item is-active left" data-index="2"></li>
<li class="c-rating__item is-active" data-index="3"></li>
<li class="c-rating__item is-active left" data-index="4"></li>
<li class="c-rating__item is-active" data-index="5"></li>
<li class="c-rating__item is-active left" data-index="6"></li>
<li class="c-rating__item" data-index="7"></li>
<li class="c-rating__item left" data-index="8"></li>
<li class="c-rating__item" data-index="9"></li>
</ul>