首页 > 代码库 > form radio & checkbox解决方案
form radio & checkbox解决方案
orm radio & checkbox 的对齐一直是个问题,不仅不同浏览器不同,不同的字体,不同的文字大小也会表现不一样,相信纠结了一大批人,如果没有好好整理总结下得出一个经验,相信每次碰到这个鬼东西都是比较纠结的,很头疼啊
重置form radio & checkbox
因为不同浏览器解析不一样,有些默认margin,有些是默认padding,还有ie6,7连margin和padding即使设置为0后,所占的空间还是比较大,所以还是有必须重置下,一下就能解决很多麻烦
Css Code
/*reset form elements*/input, select, label { vertical-align:middle;}/*reset form radio & checkbox*/.form-radio,.form-checkbox{ margin:0 5px 0 0;/*与右侧文字的间距*/ padding:0; width:13px; height:13px; vertical-align:middle; font:13px Helvetica, Arial, sans-serif;}
demo 1 12px
demo 2 13px
demo 3 14px
demo 4 16px
Html Code
<form id="demo1" class="demo" name="form1" method="post" action="#"> <div class="form-item"> <label>举报类型:</label> <div class="form-special-wrap"> <label><input type="radio" checked="checked" value="1" class="form-radio" name="reportType">垃圾广告</label><label><input type="radio" value="2" class="form-radio" name="reportType">色情</label><label><input type="radio" value="3" class="form-radio" name="reportType">虚假广告</label><label><input type="radio" value="4" class="form-radio" name="reportType">其他</label> </div> </div> </form>
Css Code
.form-item label{ font-weight:bold;}.form-special-wrap{ display:inline-block;*display:inline;*zoom:1;}.form-special-wrap label{ font-weight:normal;}#demo2{ font-size:13px;}#demo3{ font-size:14px;}#demo4{ font-size:16px;}
总:从上面四个实例我们可以看出对比的明显效果,在这里我们除了重置之外,只是设置了字体大小。各个浏览器都表现不一样,其中ie7表现最佳了,看起来是居中的哦呵呵。火狐默认的form-radio的line-height为15px(即字体大小加上3像素),在css中使用line-height不能覆盖这个默认的行高,而谷歌和ie8,9浏览器看起来是设置的line-height,可是根本不管用啊,这个还只有ie7表现良好呵呵,line-height不能解决这个对齐问题,那只好用vertical-align来试试了
实验性解决
这个鬼东西确实挺复杂的,所以我也不能确定这样就ok了,只能提出一个实验性的解决方案,第一步当然就是reset喽,第二步根据自己设置的字体大小来设置form-radio的vertical-align,最后对ie6进行对齐修正,打上bug。(这个修订版本是后加了,为了简单)
demo 1 12px 修正版
demo 2 13px 修正版
demo 3 14px 修正版
demo 4 16px 修正版
Css Code
#demo1fix .form-radio{ vertical-align:-2px; *vertical-align:middle;/*ie7 ie6*/ _vertical-align:3px;/*ie6*/}#demo2fix .form-radio{ vertical-align:-2px; *vertical-align:middle;/*ie7 ie6*/ _vertical-align:3px;/*ie6*/}#demo3fix .form-radio{ vertical-align:-1px; *vertical-align:middle;/*ie7 ie6*/ _vertical-align:2px;/*ie6*/}#demo4fix .form-radio{ vertical-align:0; *vertical-align:middle;/*ie7 ie6*/ _vertical-align:3px;/*ie6*/}
form checkbox
checkbox和radio应该是亲兄弟了,既然搞定了radio,那么就借机搞定下checkbox吧,我们把上面的radio的类型改成checkbox,然后把class改为form-checkbox就可以了,这次我们给出一个对齐的最终demo
demo 5 16px
Css Code
#demo5{ font-size:16px;}#demo5 .form-checkbox{ vertical-align:0;/*根据不同的font-size设置不同的具体值*/ *vertical-align:middle;/*ie7 ie6*/ _vertical-align:3px;/*ie6 根据不同的font-size设置不同的具体值*/}
相信看了上面的案例,大家都表示非常纠结吧,使用vertical来调那简直是折磨啊,不过这也是一种办法,能解决问题哈哈。下面我们介绍另一种方法,那就是float方法,当然如果为了好控制我们得标签可能得相对多那么一点。这个的思路就是把文字用span包裹起来,然后设置checkbox和span都float,然后再设置checkbox的margin-top就可以了,很是方便的,同理radio了。当然重置还是得要的啊
Html Code
<form id="demo6" class="demo form-horizontal" name="demo6" method="post" action="#"> <div class="form-item form-radio-checkbox-wrap"> <label>兴趣爱好:</label> <div class="form-field"> <label><input type="checkbox" checked="checked" value="1" class="form-checkbox" name=""><span>音乐</span></label> <label><input type="checkbox" value="2" class="form-checkbox" name=""><span>小说</span></label> <label><input type="checkbox" value="3" class="form-checkbox" name=""><span>上网</span></label> </div> </div> </form>
Css Code
#demo6{ overflow:auto;*zoom:1;}.form-horizontal label{ float: left; text-align: right; font-weight:bold; width:100px; font-size:16px; line-height:24px;}.form-horizontal .form-field{ float:left;}.form-radio-checkbox-wrap .form-field label{ text-align: left; width: auto; font-weight:normal; margin:0 10px 0 0; float:left; display:inline;}.form-radio-checkbox-wrap .form-checkbox,.form-radio-checkbox-wrap span{ float:left; display:inline;}.form-radio-checkbox-wrap .form-checkbox{ margin-right:5px; margin-top:5px;}
form radio & checkbox解决方案