今天和大家分享一个不使用图片美化复选框的方式。来看下效果图吧,如下是3种不同状态下的效果:

checkbox.png


一. Html结构

<div class="check-wrap">
     <input type="checkbox" class="icheck" id="icheck" />
     <label for="icheck" class="ilabel"></label>
</div>

注: label 标签的 for 属性值必须指定为 input 的 id 名称。


二. CSS 代码

.check-wrap{
     position: relative;
     height: 24px;
     width: 24px;
}
.icheck{
     opacity: 0;
}
.ilabel{        
     border-radius: 3px;    
     cursor: pointer;
     display: block;
     position: absolute;
     top: 0;
     left: 0;
     width: 100%;
     height: 100%;
}
.ilabel:after{
     content: " ";
     border: 2px solid #DDD;        
     display: block;
     font-weight: bold;
     text-align: center;
     border-radius: 3px;
     width: 20px;
     height: 20px;
 }
 .icheck:checked + .ilabel:after{
     content: "✓";
     border-color: #3f51b5;
     background-color: #3f51b5;
     color: #fff;
  }
  .icheck:indeterminate + .ilabel:after{
     content: "■";
     color: #3f51b5;
     background-color: #FFF;
     border-color: #3f51b5;
  }


1 - 将原有的 input 标签透明度设为 0

2 - label:after 的宽高设置 20px 是因为 border 占据了 4px

3 - checkbox 的 indeterminate 状态大家用的可能比较少(效果图中的第2个状态),只能通过 js 进行设置,这种情况通常用在树型结构(即:子节点有选中但并未全部选中的时候父节点的状态)

<script>
     const icheck = document.getElementById("icheck");
     icheck.indeterminate = true;
</script>


代码量真的挺少的,不明白的话请留言,谢谢.... :)

本文最后更新于 2023-12-07 13:36:07HTML/CSS
天生我材必有用,千金散尽还复来~~
作者:鄢云峰 YYF声明:转载请注明文章出处地址:https://yanyunfeng.com/article/26
评论
提交
Comments | 4 条评论
微笑2023-12-11 09:23:59
#1 回复
好棒哦,之前就在考虑说有什么好办法可以解决关于表单的样式,一直没考虑到通过before与after
起飞2023-12-12 14:05:21
#2 回复
美化后果然是好看些些啊
鄢云峰站长2023-12-13 09:54:17
#3 回复
@起飞 对呀,系统的默认风格一般,框子也很小😂
鄢云峰站长2023-12-13 09:54:51
#4 回复
@微笑 欢迎多来我博客逛逛,哈哈哈