本源代码来自http://cssdeck.com/labs/css-checkbox-styles
我只是将其进行分析。css
<!-- Rounded ONE --> <div class="roundedOne"> <input type="checkbox" value="None" id="roundedOne" name="check" /> <label for="roundedOne"></label> </div>
点击前 点击后
web
在这里我只一段段分析。源地址有源代码,我就不粘了。spa
根节点 roundedOnecode
在这里我只一段段分析。源地址有源代码,我就不粘了。orm
.roundedOne { width: 28px; height: 28px; background: #fcfff4; background: -webkit-linear-gradient(top, #fcfff4 0%, #dfe5d7 40%, #b3bead 100%); background: -moz-linear-gradient(top, #fcfff4 0%, #dfe5d7 40%, #b3bead 100%); background: -o-linear-gradient(top, #fcfff4 0%, #dfe5d7 40%, #b3bead 100%); background: -ms-linear-gradient(top, #fcfff4 0%, #dfe5d7 40%, #b3bead 100%); background: linear-gradient(top, #fcfff4 0%, #dfe5d7 40%, #b3bead 100%); filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#fcfff4', endColorstr='#b3bead',GradientType=0 ); margin: 20px auto; -webkit-border-radius: 50px; -moz-border-radius: 50px; border-radius: 50px; -webkit-box-shadow: inset 0px 1px 1px white, 0px 1px 3px rgba(0,0,0,0.5); -moz-box-shadow: inset 0px 1px 1px white, 0px 1px 3px rgba(0,0,0,0.5); box-shadow: inset 0px 1px 1px white, 0px 1px 3px rgba(0,0,0,0.5); position: relative;// 当这个是relative,子级是absolute时,子级的TLBR是根据这个的原始点为原始点。 }
.roundedOne
只是给了它一个那个白色的圈。
假如把.roundedOne
的width,height,background
都删除,就是这样:position: relative;
// 当这个是relative,子级是absolute时,子级的TLBR是根据这个的原始点为原始点。图片
roundedOne的子节点labelci
.roundedOne label { cursor: pointer; position: absolute; width: 20px; height: 20px; -webkit-border-radius: 50px; -moz-border-radius: 50px; border-radius: 50px; left: 4px; top: 4px; -webkit-box-shadow: inset 0px 1px 1px rgba(0,0,0,0.5), 0px 1px 0px rgba(255,255,255,1); -moz-box-shadow: inset 0px 1px 1px rgba(0,0,0,0.5), 0px 1px 0px rgba(255,255,255,1); box-shadow: inset 0px 1px 1px rgba(0,0,0,0.5), 0px 1px 0px rgba(255,255,255,1); background: -webkit-linear-gradient(top, #222 0%, #45484d 100%); background: -moz-linear-gradient(top, #222 0%, #45484d 100%); background: -o-linear-gradient(top, #222 0%, #45484d 100%); background: -ms-linear-gradient(top, #222 0%, #45484d 100%); background: linear-gradient(top, #222 0%, #45484d 100%); filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#222', endColorstr='#45484d',GradientType=0 ); }
我观察到,label就是按钮中间的黑色点点。cursor: pointer;
这个属性是定义了鼠标移动上去的光标;position: absolute;
上一步已经说过了;width: 20px;height: 20px;
定义这个块的大小;border-radius: 50px;
圆角;left: 4px;top: 4px;
很少说;background: -webkit-linear-gradient(top, #222 0%, #45484d 100%);
颜色为线性渐变。
总之它就是定义了一个黑色的圆形。
roundedOne的label:afterget
.roundedOne label:after { -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=0)"; filter: alpha(opacity=0); opacity: 0; content: ''; position: absolute; width: 16px; height: 16px; background: #00bf00; background: -webkit-linear-gradient(top, #00bf00 0%, #009400 100%); background: -moz-linear-gradient(top, #00bf00 0%, #009400 100%); background: -o-linear-gradient(top, #00bf00 0%, #009400 100%); background: -ms-linear-gradient(top, #00bf00 0%, #009400 100%); background: linear-gradient(top, #00bf00 0%, #009400 100%); -webkit-border-radius: 50px; -moz-border-radius: 50px; border-radius: 50px; top: 2px; left: 2px; -webkit-box-shadow: inset 0px 1px 1px white, 0px 1px 3px rgba(0,0,0,0.5); -moz-box-shadow: inset 0px 1px 1px white, 0px 1px 3px rgba(0,0,0,0.5); box-shadow: inset 0px 1px 1px white, 0px 1px 3px rgba(0,0,0,0.5); }
只有一点要注意opacity: 0;
不透明度为0,也就是不显示。而在后面应该会看到有一个地方把这个设置为1,我以为应该就是当被checked时,opacity就会被设置为1.input
.roundedOne input[type=checkbox]:checked + label:after { opacity: 1; }
roundedOne的label:hover::afterit
.roundedOne label:hover::after { -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=30)"; filter: alpha(opacity=30); opacity: 0.3; }
很少说。
roundedOne的input
.roundedOne input[type=checkbox]:checked + label:after { -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=100)"; filter: alpha(opacity=100); opacity: 1; }
加号,是CSS 相邻兄弟选择器。