Page 182 - css揭秘
P. 182

input[type="checkbox"] + label::before {
                            content: '\a0'; /* 不换行空格 */
                            display: inline-block;
                            vertical-align: .2em;
                            width: .8em;
                            height: .8em;
                            margin-right: .2em;
                            border-radius: .2em;
                            background: silver;
                            text-indent: .15em;
                            line-height: .65;
                        }

                        你可以在图 6-9 中看到复选框和 label 现在的样子。原来的复选框仍然
                    是可见的,待会儿我们会将其隐藏。现在需要给复选框的勾选状态加上不同
                    的样式。样式可以很简单,比如换种颜色,再加上勾选标记:                                          图 6-9
                                                                                         左边是原生复选框,右边是我们
                        input[type="checkbox"]:checked + label::before {                 经过初步自定义的复选框
                            content: '\2713';
                            background: yellowgreen;
                        }
                                                                                         图 6-10
                        在图 6-10 中可以看到,这个伪元素已经俨然是一个经过简单美化的复
                                                                                         在复选框的勾选状态下,伪元素
                    选框了,而且功能完备。现在,我们需要把原来的复选框以一种不损失可                                     也需要美化一番
                    访问性的方式隐藏起来。这意味着不能使用 display:  none,因为那样会
                    把它从键盘 tab 键切换焦点的队列中完全删除。我们改用另一种方法来达到
                    目的:                                                                  !   在使用宽松的选择符时一
                                                                                         定要小心。对于那些后面没有
                        input[type="checkbox"] {                                         label 的复选框来说(比如它是
                            position: absolute;                                          被嵌套进一个 label 的),使用
                            clip: rect(0,0,0,0);                                         input[type="checkbox"] 选择符
                        }
                                                                                         也会把它们隐藏起来,从而损害
                                                                                         可用性。
                        这就完成了,我们得到了一个简单定制化的复选框!我们还可以进一步
                    优化,比如在它聚焦或禁用时改变它的样式(效果如图 6-11 所示):

                        input[type="checkbox"]:focus + label::before {
                            box-shadow: 0 0 .1em .1em #58a;
                        }

                        input[type="checkbox"]:disabled + label::before {
                            background: gray;
                            box-shadow: none;
                            color: #555;
                        }
                                                                                         图 6-11
                        你甚至可以用过渡或动画来让各个状态之间的切换更加平滑,或者脑子                                  上图:自定义复选框的聚焦状态;
                                                                                         中图:自定义复选框被禁用的状
                                                                         1①
                    一热创建一个拟物化的开关。这方面的可能性真的是无穷无尽 !
                                                                                         态;下图:自定义复选框被勾选
                                                                                         的状态
                    ①  尽管可能性是无穷无尽的,但仍然要避免把复选框设置为圆形:绝大多数用户会把圆形的开
                      关理解为单选框。这个道理也适用于方形的单选框。



                                                                                           31 自定义复选框          151







          ඀ࠡ  JOEC
   177   178   179   180   181   182   183   184   185   186   187