手记

通过css3实现checkbox选择样式

前端开发过程中,由于不同浏览器间的不兼容性,相同的标签在不同的浏览器中显示不同的效果。尤其在移动端开发中,安卓与iOS表单元素显示各不相共,所以在前端页面开发过程中,需要统一相关样式,前端er需要自己开发相应组件去实现对应标签功能。
知识点: css3中before与after选择器,兄弟选择器,checked选择器
本示例通过css3实现浏览器下checkbox选中与未选中效果。
实现效果示例

1、html结构

<div class='checkbox'>
    <input type='checkbox' id='checkbox1' name='checkboox[]'>
    <label for='checkbox1'>篮球</label>
</div>

结构比较简单,通过一个div,包含一个ckeckbox选择框,一个label
2、给这三个标签添加样式

.checkbox {
    position: relative;
    height: 30px;
}

checkbox选择框设置opacity为0,及用户不能直接感受到它的存在

.checkbox input[type='checkbox'] {
    position: absolute;
    left: 0;
    top: 0;
    width: 20px;
    height: 20px;
    opacity: 0;
}
.checkbox label {
    position: absolute;
    left: 30px;
    top: 0;
    height: 20px;
    line-height: 20px;
}

通过label的before与after实现圆点未选中效果,设置before为圆圈,after实现选中后对勾的效果,设置after为长方形,顺时针旋转45deg,设置右边框与下边框,色值为白色。

.checkbox label:before {
    content: '';
    position: absolute;
    left: -30px;
    top: 0;
    width: 20px;
    height: 20px;
    border: 1px solid #ddd;
    border-radius: 50%;
    transition: all 0.3s ease;
    -webkit-transition: all 0.3s ease;
    -moz-transition: all 0.3s ease;
}

.checkbox label:after {
    content: '';
    position: absolute;
    left: -22px;
    top: 3px;
    width: 6px;
    height: 12px;
    border: 0;
    border-right: 1px solid #fff;
    border-bottom: 1px solid #fff;
    background: #fff;
    transform: rotate(45deg);
    -webkit-transform: rotate(45deg);
    -moz-transform: rotate(45deg);
    -ms-transform: rotate(45deg);
    transition: all 0.3s ease;
    -webkit-transition: all 0.3s ease;
    -moz-transition: all 0.3s ease;
}

添加input选中时的效果,设置before与after的背景色相同,由于after元素有背景色为白色的边框,即可实现相关效果

.checkbox input[type='checkbox']:checked + label:before {
    background: #4cd764;
    border-color: #4cd764;
}
.checkbox input[type='checkbox']:checked + label:after {
    background: #4cd764;
}

完整实例

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
    <title>Examples</title>
    <meta content="width=device-width, initial-scale=1.0, minimum-scale=1.0, maximum-scale=1.0,user-scalable=no" name="viewport"/>
    <meta name="description" content="">
    <meta name="keywords" content="">
    <link href="" rel="stylesheet">
</head>
<style>

.checkbox {
    position: relative;
    height: 30px;
}
.checkbox input[type='checkbox'] {
    position: absolute;
    left: 0;
    top: 0;
    width: 20px;
    height: 20px;
    opacity: 0;
}
.checkbox label {
    position: absolute;
    left: 30px;
    top: 0;
    height: 20px;
    line-height: 20px;
}
.checkbox label:before {
    content: '';
    position: absolute;
    left: -30px;
    top: 0;
    width: 20px;
    height: 20px;
    border: 1px solid #ddd;
    border-radius: 50%;
    transition: all 0.3s ease;
    -webkit-transition: all 0.3s ease;
    -moz-transition: all 0.3s ease;
}

.checkbox label:after {
    content: '';
    position: absolute;
    left: -22px;
    top: 3px;
    width: 6px;
    height: 12px;
    border: 0;
    border-right: 1px solid #fff;
    border-bottom: 1px solid #fff;
    background: #fff;
    transform: rotate(45deg);
    -webkit-transform: rotate(45deg);
    -moz-transform: rotate(45deg);
    -ms-transform: rotate(45deg);
    transition: all 0.3s ease;
    -webkit-transition: all 0.3s ease;
    -moz-transition: all 0.3s ease;
}

.checkbox input[type='checkbox']:checked + label:before {
    background: #4cd764;
    border-color: #4cd764;
}
.checkbox input[type='checkbox']:checked + label:after {
    background: #4cd764;
}
</style>
<body>
<div class='checkbox'>
    <input type='checkbox' id='checkbox1' name='checkboox[]'>
    <label for='checkbox1'>篮球</label>
</div>
<div class='checkbox'>
    <input type='checkbox' id='checkbox2' name='checkboox[]'>
    <label for='checkbox2'>乒乓球</label>
</div>
<div class='checkbox'>
    <input type='checkbox' id='checkbox3' name='checkboox[]' checked>
    <label for='checkbox3'>足球</label>
</div>

</body>
</html>

通过css3实现开关选择按钮

16人推荐
随时随地看视频
慕课网APP

热门评论

一定要label,换成其他的,为啥不行

有很多个checkbox怎么办,每个都设置Id吗?

老大,写的不错,不过不能留段怎么样取选择状态,或者全选/全否功能的代码么?是留的课后作业?

查看全部评论