原理如下:
5 O. a( n' d, q! |* h- m 去找个好看的iconfont,[Iconfont-阿里巴巴矢量图标库; 借用5个radio单选框,把默认样式都去掉,显示默认的星星; 用checked伪类监听用户选中,由默认的星星变成高亮的星星; 然后配合~兄弟操作符把当前选中的所有兄弟元素都一起高亮; 把5个radio单选框反向排列;
, q# v" l3 ]9 L
7 E" `- ^9 o r" s j5 u 基本布局: & I v- O* O' }% I
这是我事先生成好的iconfont:
, u' R. V0 X$ K r8 Y& _' M <link rel="stylesheet" href="//at.alicdn.com/t/font_1356455_c5d3d3ohlbq.css"> 一个很简洁的布局:0 Q n$ n2 t# e o0 y1 x& N
<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> 先把默认的星星显示出来:" U; [+ G/ c) ^* F2 V U+ R% I& V3 Z
/* 去掉默认样式 */
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;
} 效果如下:
) D' x$ D! u8 P4 b- F3 ]
/ n* [4 B9 B5 l. A& \, a! F D
实现选中单个星星
( d3 y$ c$ z+ b7 h9 N ? /* 实现选中单个星星 */
/* 高亮的星星 */
input[name="rate"]:checked::after {
content: "\e73c";
color: var(--main);
} 效果如下:9 e) |/ R+ A. _) M# \
8 ^7 W$ v7 B. U9 C5 a: ^( W# | 实现连同兄弟元素一起高亮
0 S9 g6 r, Y9 k) D /* 实现选中单个星星 */
/* 高亮的星星 */
input[name="rate"]:checked::after,
input[name="rate"]:checked~input[name="rate"]::after {
/*实现连同兄弟元素一起高亮*/
content: "\e73c";
color: var(--main);
} 效果如下:
9 S8 d( X# F# h( n/ p. `
5 g4 I; k% c- U- a
把input反向排列
, w$ L' X$ J9 {$ b .rate-content {
display: flex;
flex-flow: row-reverse;
} 效果如下:; r( D2 I# R* ?( z9 J ? L
' D6 [1 Y) p+ }2 A+ _
鼠标移入预览选中效果
1 `# s! \) W+ P. A$ Z 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);
} 效果如下:
: T6 d1 |0 d# C9 m7 Z5 c; e
2 d5 x, b$ Y1 P% H 加入放大动画
5 n/ {" M$ C/ m5 h( i5 A input[name="rate"] {
transition: transform .2s ease;
}
input[name="rate"]:checked,
input[name="rate"]:hover {
transform: scale(1.2);
} 效果如下:3 I) h- ?% h k
$ t; l) L3 g) x, J$ z 总结: $ S+ G2 S. c1 z' v5 v
核心代码其实就是这两段,其他都是可选的。
" p" [2 c* `9 Q7 f 元素反向排列:7 N/ d9 J" O! Y
/ E% h% O, t# {! ~9 ?, T3 Y
display: flex;
flex-flow: row-reverse; 兄弟元素操作:
1 `3 g G' {7 I( } input:checked ~ input点击查看演示>>
: Z! ^" u3 E# L0 r! d2 z 点击下载源码>>