• 微信
当前位置:首页 >> 建站学院 >> Web前端

【前端笔记】纯CSS实现评级和计数器效果

作者:玄北 时间:2022-04-08 阅读数:461人阅读

效果如图所示:

纯CSS实现评级和计数器效果

HTML代码:

<div class="rating-stars">
    <input type="radio" name="rating" id="rs0" checked><label for="rs0"></label>
    <input type="radio" name="rating" id="rs1"><label for="rs1"></label>
    <input type="radio" name="rating" id="rs2"><label for="rs2"></label>
    <input type="radio" name="rating" id="rs3"><label for="rs3"></label>
    <input type="radio" name="rating" id="rs4"><label for="rs4"></label>
    <input type="radio" name="rating" id="rs5"><label for="rs5"></label>
    <span class="rating-counter"></span>
</div>

CSS代码:

body {
    margin: 0;
    width: 100vw;
    height: 100vh;
    display: flex;
    align-items: center;
    justify-content: center;
    background-color: #11114e;
    background: radial-gradient( circle at 50% 100%, #1d659f, #11114e);	
}

body * {
    box-sizing: border-box;
}

.rating-stars {
    display: block;
    width: 50vmin;
    padding: 1.75vmin 10vmin 2vmin 3vmin;
    background: linear-gradient(90deg, #ffffff90 40vmin, #fff0 40vmin 100%);
    border-radius: 5vmin;
    position: relative;
}

.rating-counter {
    font-size: 5.5vmin;
    font-family: Arial, Helvetica, serif;
    color: #9aacc6;
    width: 10vmin;
    text-align: center;
    background: #0006;
    position: absolute;
    top: 0;
    right: 0;
    height: 100%;
    border-radius: 0 5vmin 5vmin 0;
    line-height: 10vmin;
}

.rating-counter:before {
    content: "0";
    transition: all 0.25s ease 0s;	
}

input { display: none; }

label {
    width: 5vmin;
    height: 5vmin;
    background: #000b;
    display: inline-flex;
    cursor: pointer;
    margin: 0.5vmin 0.65vmin;
    transition: all 1s ease 0s;	
    clip-path: polygon(50% 0%, 66% 32%, 100% 38%, 78% 64%, 83% 100%, 50% 83%, 17% 100%, 22% 64%, 0 38%, 34% 32%);
}

label[for=rs0] {
    display: none;
}

label:before {
    width: 90%;
    height: 90%;
    content: "";
    background: orange;
    z-index: -1;
    display: block;
    margin-left: 5%;
    margin-top: 5%;
    clip-path: polygon(50% 0%, 66% 32%, 100% 38%, 78% 64%, 83% 100%, 50% 83%, 17% 100%, 22% 64%, 0 38%, 34% 32%);
    background: linear-gradient(90deg, yellow, orange 30% 50%, #184580 50%, 70%, #173a75 100%);
    background-size: 205% 100%;
    background-position: 0 0;
}

label:hover:before {
    transition: all 0.25s ease 0s;		
}

input:checked + label ~ label:before {
    background-position: 100% 0;
    transition: all 0.25s ease 0s;	
}

input:checked + label ~ label:hover:before {
    background-position: 0% 0
}

#rs1:checked ~ .rating-counter:before {
    content: "1";
}

#rs2:checked ~ .rating-counter:before {
    content: "2";
}

#rs3:checked ~ .rating-counter:before {
    content: "3";
}

#rs4:checked ~ .rating-counter:before {
    content: "4";
}

#rs5:checked ~ .rating-counter:before {
    content: "5";
}

label + input:checked ~ .rating-counter:before {
    color: #ffab00 !important;
    transition: all 0.25s ease 0s;
}

label:hover ~ .rating-counter:before {
    color: #9aacc6 !important;
    transition: all 0.5s ease 0s;	
    animation: pulse 1s ease 0s infinite;
}

@keyframes pulse {
    50% { font-size: 6.25vmin; }
}

label[for=rs1]:hover ~ .rating-counter:before {
    content: "1" !important;
}

label[for=rs2]:hover ~ .rating-counter:before {
    content: "2" !important;
}

label[for=rs3]:hover ~ .rating-counter:before {
    content: "3" !important;
}

label[for=rs4]:hover ~ .rating-counter:before {
    content: "4" !important;
}

label[for=rs5]:hover ~ .rating-counter:before {
    content: "5" !important;
}


input:checked:hover ~ .rating-counter:before {
    animation: none !important;
    color: #ffab00 !important ;
}

/*** INITIAL ANIMATION - Not Necessary ***/
/*** I want to make a loop here ***/
/*
label + input + label:before {
    animation: start 0.5s ease 0s 1;
}

.rating-stars:hover label + input + label:before {
    animation: none;
}

label[for=rs2]:before {
    animation-delay: 0.1s;
}

label[for=rs3]:before {
    animation-delay: 0.2s;
}

label[for=rs4]:before {
    animation-delay: 0.3s;
}

label[for=rs5]:before {
    animation-delay: 0.4s;
}

@keyframes start {
    10%, 90% { background-position: 0% 0; }
}

*/

over~~~

转载请注明——本文源自【玄北博客】www.xuanbeiweb.cn

免责声明:本站部分文章、数据、图片来自互联网,

如果侵犯了你的权益请来信告知我们删除,否则不承担相应法律责任。邮箱:xuanbei@xuanbeiweb.cn

标签: CSS 笔记 前端
玄北头像

玄北

Hi~如果您正好看到这里,可以扫一扫微信二维码加我为好友,我是一个喜欢交朋友的人,我知道您也是哦~

玄北微信

发表评论:

评论记录:

暂无评论——欢迎您的点评!