千万不要小瞧css,下一秒你会惊呆
之前听别人说过,可以用纯css实现一个类似滴滴评星服务,后来也去百度了一下,记得曾经找到过,但是后来却没有找到,看了别人一个关于实现滑动开关的demo,忽然有点了思路。
在这个评星的demo上,我们需要先来分析一下,五颗星,需要有颜色的改变,改变是通过点击来实现的,那么如何用css来实现点击事件呢?有很多人尝试使用:active,我没有做过尝试,但我觉得
用单选框或者复选框,应该会更巧妙一点。
大家肯定都知道,复选框或者单选框的默认样式,可谓惨不忍睹。跟五角星,那可是八竿子打不着,所以,要使用这个标签了。我们首先去看下w3c上是怎么定义这个标签的。
相信看了这个以后,大家肯定就有思路了,我们用lable标签去做五角星,用单选框来触发事件。
1 2 3 4 5 6 7 8 9 10 11 12
| <div class="evaluate"> <input type="radio" name="agree" id="agree1"> <label for="agree1">★</label> <input type="radio" name="agree" id="agree2"> <label for="agree2">★</label> <input type="radio" name="agree" id="agree3"> <label for="agree3">★</label> <input type="radio" name="agree" id="agree4"> <label for="agree4">★</label> <input type="radio" name="agree" id="agree5"> <label for="agree5">★</label> </div>
|
我们需要知道点了那颗星,同时来进行样式的操作,这需要用到css的两个选择器,”+”、”~”。
那先来解释一下这两个选择器的用法:
1 2
| div+p {color:#ff0000} p~ul {text-align:center}
|
可能这样在理解上会有一定的偏差,我们用jquery的来解释下,相信会更清楚。
1 2
| $('div').next('p'); $('p').nextAll('ul');
|
这样应该就更方便理解了。所以,我们的css代码如下:
1 2 3 4 5 6 7 8 9 10 11
| *{margin: 0;padding: 0} *{-webkit-tap-highlight-color: rgba(0,0,0,0);outline: none} .evaluate {width: 95%;margin: 0 auto} .evaluate input[type=radio] {display: none} .evaluate label { font-size: 60px; color: #999999; float: right; } .evaluate input[type=radio]:checked + label {color: #F1B109} .evaluate input[type=radio]:checked ~ label {color: #F1B109}
|
接下来就是线上demo喽:http://7xsqnr.com1.z0.glb.clouddn.com/didi.html