QQ登录

只需要一步,快速开始

APP扫码登录

只需要一步,快速开始

查看: 2223|回复: 0

[HTML/CSS/JS] 仅含有CSS代码的rate评分组件

[复制链接]

等级头衔

积分成就    金币 : 2861
   泡泡 : 1516
   精华 : 6
   在线时间 : 1321 小时
   最后登录 : 2025-7-2

丰功伟绩

优秀达人突出贡献荣誉管理论坛元老活跃会员

联系方式
发表于 2021-3-15 10:17:04 | 显示全部楼层 |阅读模式
原理如下:5 x/ |% ?& G7 a! ~6 O: ~/ P7 p1 y
  • 去找个好看的iconfont,[Iconfont-阿里巴巴矢量图标库;
  • 借用5个radio单选框,把默认样式都去掉,显示默认的星星;
  • 用checked伪类监听用户选中,由默认的星星变成高亮的星星;
  • 然后配合~兄弟操作符把当前选中的所有兄弟元素都一起高亮;
  • 把5个radio单选框反向排列;0 n9 k% h2 [- P, u5 t

7 h; ~& C* i+ R  C9 p3 E基本布局:
9 q4 o$ Q2 m+ C! p* s- `& P       这是我事先生成好的iconfont:* t+ H  N: x; L( ~9 x4 U  o) e
<link rel="stylesheet" href="//at.alicdn.com/t/font_1356455_c5d3d3ohlbq.css">
      一个很简洁的布局:3 o% L( M: W2 A/ j
<div class="rate-content">
 <input type="radio" name="rate">
 <input type="radio" name="rate">
 <input type="radio" name="rate">
 <input type="radio" name="rate">
 <input type="radio" name="rate">
</div>
      先把默认的星星显示出来:
6 w+ ?! {7 |: Z- }. Q
/* 去掉默认样式 */
input {
  -webkit-appearance: none;
  border: none;
  outline: none;
  cursor: pointer;
}

:root {
  /*高亮颜色*/
  --main: #ffa822;
  /*默认颜色*/
  --basic: #999;
}

.rate-contentinput[name="rate"] {
  font-family: "iconfont";
  /*之前引入的iconfont字体*/
  font-size: 30px;
  padding-right: 10px;
}

.rate-contentinput[name="rate"]::after {
  content: "\e645";
  color: var(--basic);
  /*加点颜色过渡效果*/
  transition: color .4s ease;
}
      效果如下:
: p& L: v( U1 f* F9 Y( g1 k 1.jpg 2 q2 A- Z2 G. `: K5 a) H5 T
实现选中单个星星. @# \/ R$ l( J
/* 实现选中单个星星 */
/* 高亮的星星 */
input[name="rate"]:checked::after {
  content: "\e73c";
  color: var(--main);
}
      效果如下:
- G) p& q7 p+ R, Q 2.gif
5 e9 K3 ~- ^- ^7 r实现连同兄弟元素一起高亮
! {# Y+ z$ q+ R, n4 q+ W( w9 C% |
/* 实现选中单个星星 */
/* 高亮的星星 */
input[name="rate"]:checked::after,
input[name="rate"]:checked~input[name="rate"]::after {
  /*实现连同兄弟元素一起高亮*/
  content: "\e73c";
  color: var(--main);
}
      效果如下:
) S! ^+ s$ [; u/ Y7 l0 ~+ y 3.gif
$ a% G+ Q. S9 w2 X把input反向排列
6 r4 u$ ~! _3 r" g( A! a( l9 D5 L
.rate-content {
  display: flex;
  flex-flow: row-reverse;
}
      效果如下:
) O: ^) b1 y" k" x) ~4 I. q6 z 4.gif 5 i; b7 a5 Y5 K, m
鼠标移入预览选中效果8 u& }1 f5 C6 i: j
input[name="rate"]:checked,
input[name="rate"]:hover::after {
  content: "\e73c";
  color: var(--main);
}

/* 兄弟元素一起高亮 */
input[name="rate"]:hover~input[name="rate"]::after {
  content: "\e73c";
  color: var(--main);
}
      效果如下:( H  }# i0 u: R  F
5.gif
8 a* |9 C0 F" F加入放大动画. M; U. p# C  K6 A0 H) R- F$ G6 M0 B
input[name="rate"] {
  transition: transform .2s ease;
}
input[name="rate"]:checked,
input[name="rate"]:hover {
  transform: scale(1.2);
}
      效果如下:6 Z" D7 Z; y. j- g& w' f0 L; B
6.gif 0 e& Y8 v/ M' z8 Z! |# W
总结:1 b4 v5 E8 ?. f: ^: x. `, e% m
       核心代码其实就是这两段,其他都是可选的。
7 ~( O# ^  P1 m. K7 w       元素反向排列:
9 T" H4 [$ i4 T) `2 b6 Q8 e- ]8 c% ?, ?& {) U( p
display: flex;
flex-flow: row-reverse;
      兄弟元素操作:  S+ }" P+ B: b: w9 X( `3 s
input:checked ~ input
点击查看演示>>
" e6 I6 F# q- f( M2 X1 x, m点击下载源码>>
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|手机版|小黑屋|paopaomj.COM ( 渝ICP备18007172号|渝公网安备50010502503914号 )

GMT+8, 2025-7-2 08:41

Powered by paopaomj X3.5 © 2016-2025 sitemap

快速回复 返回顶部 返回列表