原理如下:
% D+ q5 j* s$ `4 Y$ ]- 去找个好看的iconfont,[Iconfont-阿里巴巴矢量图标库;
- 借用5个radio单选框,把默认样式都去掉,显示默认的星星;
- 用checked伪类监听用户选中,由默认的星星变成高亮的星星;
- 然后配合~兄弟操作符把当前选中的所有兄弟元素都一起高亮;
- 把5个radio单选框反向排列;2 P/ q. o2 P& q# P1 C
6 r- Z$ M% z7 X& m( ]基本布局:
; N& o+ v# [0 V6 u9 B5 _/ k. u 这是我事先生成好的iconfont:
C3 T) N, o$ w& N
- <link rel="stylesheet" href="//at.alicdn.com/t/font_1356455_c5d3d3ohlbq.css">
一个很简洁的布局:
' m# U6 Y9 @8 b9 U* ]" D6 B- <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>
先把默认的星星显示出来:
: q9 `5 W2 Z( X, q! f$ D- /* 去掉默认样式 */
- 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;
- }
效果如下:
* G% e$ z0 D1 e5 P9 j' e7 |7 O
# [, D) B k0 z2 y, }: ]实现选中单个星星
5 n' V0 O( Z" V+ ?- /* 实现选中单个星星 */
- /* 高亮的星星 */
- input[name="rate"]:checked::after {
- content: "\e73c";
- color: var(--main);
- }
效果如下:$ x% z' V* A( p. D t
+ _0 I5 ?/ ], C* {' x6 ~2 l& ?# \
实现连同兄弟元素一起高亮$ i2 e6 J+ m4 Z; {( J. n9 V- c& r
- /* 实现选中单个星星 */
- /* 高亮的星星 */
- input[name="rate"]:checked::after,
- input[name="rate"]:checked~input[name="rate"]::after {
- /*实现连同兄弟元素一起高亮*/
- content: "\e73c";
- color: var(--main);
- }
效果如下:' ~9 r3 m4 F+ a+ b) i
8 f1 y4 K7 Q( {+ F, s7 L
把input反向排列
% X; S `8 g$ Q! Q0 D- ~% G* W5 C- .rate-content {
- display: flex;
- flex-flow: row-reverse;
- }
效果如下:
% m) J8 _$ Y4 {2 M+ `3 n
1 M+ ~& n/ |$ ?! W, q/ I4 }; J
鼠标移入预览选中效果
" J8 R7 t1 `- Z- t8 B- 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);
- }
效果如下:
+ f' q9 E* J2 ?/ V
3 A5 V B B* A
加入放大动画( i1 x8 h$ ~8 _. d, G" ~2 }
- input[name="rate"] {
- transition: transform .2s ease;
- }
- input[name="rate"]:checked,
- input[name="rate"]:hover {
- transform: scale(1.2);
- }
效果如下:
4 r' W/ T( V: ~: D2 W" L
t4 O% L& }; B总结:* w/ F6 v; u% J+ p/ k
核心代码其实就是这两段,其他都是可选的。, I6 A1 p3 x- N' k; K+ g2 s
元素反向排列:
( H g9 c: Q% u9 P( `# l- P! X+ }9 t! x" H0 P7 F2 \4 G" N& O
- display: flex;
- flex-flow: row-reverse;
兄弟元素操作:. S; d3 ]: J# h# X+ j
点击查看演示>>, f, S: {5 n' X8 s, W' O6 g
点击下载源码>> |