Page 183 - css揭秘
P. 183

试一试 play.csssecrets.io/checkboxes



                                                    向 Ryan Seddon(http://thecssninja.com)脱帽致敬,感谢他最先提
                                                出这个效果。这个技巧现在被大家称作复选框 hack(http://thecssninja.

                                                com/css/custom-inputs-using-css)。Ryan 曾用这个创意实现了各种需要保持
                                                状态的 UI 组件(http://labs.thecssninja.com/bootleg),比如模态对话框、下
                                  致 敬
                                                拉菜单、标签页、跑马灯等,不过像这样滥用复选框很容易导致可访问性
                                                上的问题。


                                              开关式按钮


                                                  说到开关式按钮,HTML 并没有提供一种原生的方式来生成它,但我们
                                              可以利用“复选框 hack”的思路来模拟它。开关式按钮与复选框的行为十分
                                              相似,可以用来切换某个选项的开关状态:启用时,它是被按下的状态;停
                                              用时,它就是浮起的状态。在语义上,开关式按钮和复选框并没有本质上的
                                              差别,因此可以放心地使用这个技巧,不用担心语义上有问题。

                                                  如果想用这个技巧来生成开关式按钮,其实只需要把 label 设置为按钮
                    图 6-12                    的样式即可,并不需要用到伪元素。具体来说,要生成图 6-12 中的开关式
                    开关式按钮的两种状态                按钮,代码可以这样写:

                                                  input[type="checkbox"] {
                                                      position: absolute;
                                                      clip: rect(0,0,0,0);
                                                  }

                                                  input[type="checkbox"] + label {
                                                      display: inline-block;
                                                      padding: .3em .5em;
                                                      background: #ccc;
                                                      background-image: linear-gradient(#ddd, #bbb);
                                                      border: 1px solid rgba(0,0,0,.2);
                                                      border-radius: .3em;
                                                      box-shadow: 0 1px white inset;
                                                      text-align: center;
                                                      text-shadow: 0 1px 1px white;
                                                  }

                                                  input[type="checkbox"]:checked + label,
                                                  input[type="checkbox"]:active + label {
                                                      box-shadow: .05em .1em .2em rgba(0,0,0,.6) inset;
                                                      border-color: rgba(0,0,0,.3);
                                                      background: #bbb;
                                                  }

                                                  不过,在使用开关式按钮时仍需慎重。在绝大多数场景下,开关式按钮
                                              对可用性有负面作用,因为它们很容易与普通按钮混淆,让人误以为按下它
                                              会触发某个动作。




                  152   第 6 章 用户体验







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