原理如下:. A& t' |( T) q; o$ T) ]$ N
- 去找个好看的iconfont,[Iconfont-阿里巴巴矢量图标库;
- 借用5个radio单选框,把默认样式都去掉,显示默认的星星;
- 用checked伪类监听用户选中,由默认的星星变成高亮的星星;
- 然后配合~兄弟操作符把当前选中的所有兄弟元素都一起高亮;
- 把5个radio单选框反向排列;+ [6 l5 e' Z" u- w+ r- m6 `
+ w1 A: [5 w( c6 Q1 V% D5 c
基本布局:
7 \$ S0 [: l, r 这是我事先生成好的iconfont:5 J) `( i+ c( N; `5 P7 \" r* y; _
<link rel="stylesheet" href="//at.alicdn.com/t/font_1356455_c5d3d3ohlbq.css"> 一个很简洁的布局:0 B0 F9 F- D) Q* K; r) R
<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> 先把默认的星星显示出来:/ d0 b# r9 D0 P$ _+ g( I5 C
/* 去掉默认样式 */
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;
} 效果如下:
7 l' f. a% x, s: t$ j& k
; b: n: }5 F1 X4 P
实现选中单个星星
o* [+ t+ D3 C% [# |4 ]/* 实现选中单个星星 */
/* 高亮的星星 */
input[name="rate"]:checked::after {
content: "\e73c";
color: var(--main);
} 效果如下:
/ b4 N% S! b& H6 \# N( t
6 D) k2 k$ q2 z
实现连同兄弟元素一起高亮
0 N/ A' p% x2 o8 d/ ^( a; b/* 实现选中单个星星 */
/* 高亮的星星 */
input[name="rate"]:checked::after,
input[name="rate"]:checked~input[name="rate"]::after {
/*实现连同兄弟元素一起高亮*/
content: "\e73c";
color: var(--main);
} 效果如下: j9 g6 o/ a$ T8 z9 [. F
$ o1 v/ n9 L0 |# z/ ]9 b w/ `把input反向排列5 k) l# m7 d7 ^, G
.rate-content {
display: flex;
flex-flow: row-reverse;
} 效果如下:
8 n+ W* k) Z8 X, I( g
, U% H# K- A; O+ j
鼠标移入预览选中效果1 p4 v3 Y% r0 F3 M/ L0 e
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);
} 效果如下:
* }+ V9 l5 K& E4 U
% L% b' I& V" Q3 B
加入放大动画
4 |& y& D5 X( v$ S7 O2 ^input[name="rate"] {
transition: transform .2s ease;
}
input[name="rate"]:checked,
input[name="rate"]:hover {
transform: scale(1.2);
} 效果如下:
! D$ e- }$ _, j% l' I7 u9 N
; J+ ?, ], l* Q1 R W" q
总结:
. d# S) s+ T, y8 B" @0 m- A5 z) t 核心代码其实就是这两段,其他都是可选的。
9 X6 p8 J+ r' K' ] 元素反向排列:: A4 W# B3 i) J1 _9 t) M: w8 v% z: s
% a! w4 }1 r" l
display: flex;
flex-flow: row-reverse; 兄弟元素操作:3 \- X+ E; B& [
input:checked ~ input 点击查看演示>>
& e- h, k4 @2 y" s# \4 E0 B点击下载源码>> |