纯CSS复选框样式(不支持ie婊)

这篇为什么不支持ie呢?因为我现在服软了。。。

开始正题

首先说一下大概思路

html代码:

<!-- 偷梁换柱 -->
<div id="wrap"><!-- 只是一个包裹器,为了将按钮放在中间 -->
    <input type="checkbox" id="checkbox" /><!-- 真正的复选框,但是不做显示,作为核心,表现的事情留给下面的span大佬 -->
    <span id="myCheckbox"></span><!-- 撑门面,显示给你看的家伙 -->
</div>

然后就是实操了(真实的操zuo)

首先将 #wrap 居中

/*****************************
*	将框框放在中间好看一点
******************************/
#wrap {
box-sizing: border-box;
position: absolute;
top: 0;
right: 0;
left: 0;
bottom: 0;
margin: auto;
width: 200px;
height: 200px;
border: 1px solid #ccc;
}

然后定位 #checkbox和#myCheckbox 两个元素

/* - 将两个元素叠在一起 - */
#checkbox, #myCheckbox{
	position: absolute;
}

#checkbox 复选框样式

/**************************************************
*	初始化 checkbox样式 ———— 隐藏元素
*	如果 display 不为 block 时,会产生边距
*	设置隐藏样式
*	提升层级,确保checkbox在 myCheckbox之上,为什么呢?
*	不然怎么点的到嘛!!!
***************************************************/
#checkbox {
	/* - 行内元素有不知名的边距,各浏览器样式都有可能不同,所以为了不给布局产生不稳定因素,将 inline-block -> block 较为安全 - */
	display: block;
	z-index: 1;
	opacity: 0;
	outline: none;
	/* 火狐和谷歌里面,给复选框设置宽高,呈现的也不一样 */
	height: 30px;
	width: 30px;
}
/* - 值得一提的时,将 #checkbox 和 #myCheckbox 的大小设置一样,为什么呢?我不告诉你 - */

#myCheckbox:after 样式

/* - 为什么要使用after,而不直接使用元素自身呢?因为我们需要改变元素的内容,比如 小勾勾 “√” - */		
/* - 这个使用content就能实现 - */
#myCheckbox:after{
	content: "";
	display: block;
	height: 30px;
	width: 30px;
	/* - ie 不支持 rgba - */
	/* background-color: rgba(255,0,0,0.5); */
	background: #FF0000;
	/** - 作为一个前端,我们至少得假装美化一下界面吧。。。。 - **/
	font-size: 30px;
	line-height: 30px;
	text-align: center;
	font-weight: 600;
	color: #fff;
}

最后就是选中时的样式了

#checkbox:checked + #myCheckbox:after{ /* + 兄弟选中器 */
	content: "√";
	background-color: pink;
}

接下来是附上全码

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title>复选框样式 —— 完美版</title>
		<style type="text/css">
			* {
				margin: 0;
				padding: 0;
			}

			#wrap {
				box-sizing: border-box;
				position: absolute;
				top: 0;
				right: 0;
				left: 0;
				bottom: 0;
				margin: auto;
				width: 200px;
				height: 200px;
				border: 1px solid #ccc;
			}

			#checkbox,
			#myCheckbox {
				position: absolute;
			}

			#checkbox {
				display: block;
				z-index: 1;
				opacity: 0;
				outline: none;
				height: 30px;
				width: 30px;
			}

			#myCheckbox:after {
				content: "";
				display: block;
				height: 30px;
				width: 30px;
				background: #FF0000;
				font-size: 30px;
				line-height: 30px;
				text-align: center;
				font-weight: 600;
				color: #fff;
			}

			#checkbox:checked+#myCheckbox:after {
				content: "√";
				background-color: pink;
			}
		</style>
	</head>
	<body>

		<div id="wrap">
			<!-- 只是一个包裹器,为了将按钮放在中间 -->
			<input type="checkbox" id="checkbox" /><!-- 真正的复选框,但是不做显示,作为核心,表现的事情留给下面的span大佬 -->
			<span id="myCheckbox"></span><!-- 撑门面,显示给你看的家伙 -->
		</div>
	</body>

</html>

为什么不支持ie呢?因为 ie 不支持兄弟选择器 "+"&"~" 这两者有什么区别呢?我不说。

当我上can I use 查的时候,说的是IE7以上就支持了,结果。。。。。。真棒!!!

too much选择器IE都不支持。。。。。为以后的日子感到心酸。

在网上看到 “selectivizr.js” 这个东西可以解决IE6,IE8选择器兼容的问题,结果原谅我智商不够。。。。

附上官网:忘大佬解决http://www.selectivizr.com/

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值