前端开发过程中,由于不同浏览器间的不兼容性,相同的标签在不同的浏览器中显示不同的效果。尤其在移动端开发中,安卓与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>
作者: 朽梨
链接:https://www.imooc.com/article/15815
来源:慕课网