利用【伪元素】自定义复选框

默认状态下的复选框:

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

当 <label>元素与复选框关联之后,可以起到触发开关的作用。我们可以为它添加生成性的内容(伪元素),并基于复选框的状态来为其设置样式。然后再把真正的复选框隐藏起来。
接下来为它添加样式:

input[type="checkbox"] + label:before {
  content:"\a0";  /*不换行空格*/
  display:inline-block;
  vertical-align:0em;
  width:.75em;
  height:.75em;
  margin-right:.2em;
  border-radius:.2em;
  background:#ace;
  text-indent:.15em;
  line-height:.65;
}
复选框和 label 的样子

现在给复选框的勾选状态(checked)加上不同的样式:

input[type="checkbox"]:checked + label:before {
  content:"\2713";
  background:#fce;
}

checked 状态

现在,把原来的复选框以一种不损失可访问性的方式隐藏起来。这意味着不能使用display:none;因为那样会把它从键盘tab键切换焦点的队列中完全消除。

input[type="checkbox"] {
  position:absolute;
  clip:rect(0,0,0,0);  /*clip 属性剪裁绝对定位元素。*/
}

也可采用另一个方法:

input[type="checkbox"] {
  position:absolute;
  left:-9999px;  /*让当前元素跑到页面外面去*/
}

你还可以继续优化它,比如在它聚焦或禁用时改变它的样式,甚至可以用过渡或者动画来让各个状态更加平滑。


参考书籍:Lea Verou《CSS揭秘》

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 本文转载自:众成翻译译者:为之漫笔链接:http://www.zcfy.cc/article/239原文:http...
    极乐君阅读 7,397评论 1 62
  • 问答题47 /72 常见浏览器兼容性问题与解决方案? 参考答案 (1)浏览器兼容问题一:不同浏览器的标签默认的外补...
    _Yfling阅读 13,786评论 1 92
  • //------------------------- 第一章 认识JQuery ----------------...
    米塔塔阅读 745评论 0 9
  • 一、样式篇 第1章 初识jQuery (1)环境搭建 进入官方网站获取最新的版本 http://jquery.co...
    凛0_0阅读 3,441评论 0 44
  • 我们相约带笔流浪 却在半路迷失了方向 山高水远岁月情长 谁把思念折成月光 道一声故人可无恙 鲜活于记忆中的模样 曾...
    江离1998阅读 301评论 2 4