您的位置:首页 > Web前端 > CSS

CSS 实现:checkbox

2016-05-14 10:10 567 查看


<div class="wrap">
<label>性别:</label>

<div class="cb-wrap">   <!-- 整体为一个checkbox,用div包裹 -->
<input type="radio" name="sex1" value="男"></input>   <!-- 需要隐藏,置于最上层 -->
<span class="cb-icon"></span>   <!-- 加伪元素,模拟checkbox样式 -->
<span class="cb-label">男</span>     <!-- 当选中时,字体颜色也得改变 -->
</div>

<div class="cb-wrap">
<input type="radio" name="sex1" value="女"></input>
<span class="cb-icon"></span>
<span class="cb-label">女</span>
</div>

</div>

css实现:

.wrap {
label {
display: inline-block;
width: 50px;
text-align: right;
margin-right: 15px;
}
}

.cb-wrap {
display: inline-block;  // 将div元素设置成行内元素,不然尽管设置的宽度较小,还是会占据一行

width: 50px;
height: 30px;
margin-right: 15px;
line-height: 30px;

position: relative; // 设置定位

input {
opacity: 0; // 设置透明度为0
width: 100%; // 设置宽度为一个checkbox(.cb-wrap)的宽度
height: 100%;
z-index: 2; // 置于最上层
position: absolute; // 相对于.cb-wrap定位
top: 0;
left: 0;
}

// 用伪类:checked,实现checkbox选中状态时改变其它元素样式
input:checked + span {  // 用“相邻兄弟选择器”,改变模拟checkbox的颜色
background: red;
}

input:checked ~ .cb-label { // 用“同级元素通用选择器”,改变字体的颜色
color: red;
}

.cb-icon {  // 实现模拟checkbox
display: inline-block;  // span设宽,必须得设置成块级元素!
width: 16px;
height: 16px;
border: 1px solid #ddd;
border-radius: 8px;
position: relative; // 相对于自身原来的位置定位,使其与字体对齐
top: 3px;

&:after {   // 伪元素实现对勾(√)部分
content: "";
display: inline-block;
width: 9px;
height: 6px;
border-left: 1px solid #fff;
border-bottom: 1px solid #fff;
transform: rotate(-45deg);
position: absolute;
top: 3px;
right: 3px;
}
}
}




(示例2相对实例1较为简单,不需要用为元素实现模拟的checkbox,也少了一个
span
元素,区别在于
cb-icon
的实现不同)

<div class="wrap">
<label>性别:</label>

<div class="cb-wrap">
<input type="radio" name="sex2" value="男"></input>
<span class="cb-icon">男</span>
</div>

<div class="cb-wrap">
<input type="radio" name="sex2" value="女"></input>
<span class="cb-icon">女</span>
</div>

</div>

css实现:

.cb-wrap {
display: inline-block;

width: 50px;
height: 30px;
margin-right: 15px;
line-height: 30px;
position: relative;

input {
opacity: 0;
width: 100%;
height: 100%;
z-index: 2;
position: absolute;
top: 0;
left: 0;
}

input:checked + span {
background: orange;
color: #fff;
}

.cb-icon {
display: inline-block;
width: 50px;
height: 25px;
border: 1px solid #ddd;
text-align: center;
line-height: 25px;
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: