6-3 使用者体验 -- 自定义checkbox

  1. 这一小节对于我来说真的是福音,我一直很苦恼(对于checkbox)。在我未接触书本之前,我一直使用默认样式的checkbox,以前尝试修改它,给它定义宽度什么的都尼玛没有效果,这就让人很头疼了!

  2. 这一小节练习的还是伪元素,我们需要实现以下的checkbox

自定义checkbox

相对于每个浏览器都不一样的checkbox,chrome的默认样式还算可以接受


chrome默认样式

小测试

html

<input type="checkbox" id="awesome">
<label for="awesome">Awesome!</label>

第一步:
利用伪元素创建一个大小类似于原样式的方块

css

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

关于第一行的不换行空格,其实是个占位符

  content: '\a0';  /* non-break-block*/

具体想了解不换行空格,可以看看这篇文章,写的很具体

http://www.cnblogs.com/yjf512/p/3216392.html

效果:

第二步:
现在我们需要用符合可及性的方式来隐藏原来的checkbox,表示我们不能使用display:none,因为这样会把它完全从键盘Tab键里移动的顺序里移除。所以可以改用这种方式

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

效果:

第三步:
设置checked, focus样式

.checkbox input[type="checkbox"]:checked + label::before{  
  content: '\2713';    
  background: yellowgreen;
}
.checkbox input[type="checkbox"]:focus + label::before{  
  box-shadow: 0 0 0 1px #58a;
}
checked 状态

自定义checkbox完成


利用这个特性可以制作一些按钮状态(on和off不同的样式)

no checked
checked

当然这样的效果也可以用自定义属性(或者改变类)实现,不过需要一点JS代码。不过这种纯CSS实现方法更加有趣!

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 176,094评论 25 709
  • Bootstrap是什么? 一套易用、优雅、灵活、可扩展的前端工具集--BootStrap。GitHub上介绍 的...
    凛0_0阅读 13,744评论 3 184
  • 二娘的女儿养了十多年后竟然失去了!这事何二娘可没有想到过,她三十二岁时,嫁入了一个重男轻女思想严重的人家,真是怕什...
    旁观地阅读 1,666评论 0 0
  • 一 我划破长空,呼啸而来。 或割掉对手的脑袋,或穿透对手的身体,或拦腰把对手劈成两半。 我从不迟疑,也不言...
    天亦阅读 4,489评论 5 5

友情链接更多精彩内容