今天和大家分享一个不使用图片美化复选框的方式。来看下效果图吧,如下是3种不同状态下的效果:
一. 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;
}
/* 将原生 checkbox 设置成完全透明 */
.icheck{
opacity: 0;
}
/* 绝对定位遮盖住checkbox */
.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. 将原有的 checkbox 标签透明度设为0;
2. label:after 的宽高设置 20px 是因为 border 占据了4px;
3. checkbox 的 indeterminate 状态大家用的可能比较少(效果图中的第2个状态),只能通过 js 进行设置,这种情况通常用在树型结构或多选表格中,表示部分选中。