这是困扰我的CSS小问题之一。
Stack Overflow周围的人如何在浏览器中始终垂直对齐复选框及其标签?
每当我在Safari中正确对齐它们(通常在输入上使用垂直对齐:基线),它们在Firefox和IE中就完全关闭了。
在Firefox中修复它,Safari和IE不可避免地被搞砸了。我每次编写表单时都在这上面浪费时间。
以下是我使用的标准代码:
<表单><div><label><input-type=“checkbox”/>标签文本</label></div></form>
我通常使用埃里克·迈耶的重置,所以表单元素相对来说没有覆盖。期待您提供的任何提示或技巧!
为了与浏览器中的表单字段保持一致,我们使用:框大小调整:边框框
button, checkbox, input, radio, textarea, submit, reset, search, any-form-field {
-moz-box-sizing: border-box;
-webkit-box-sizing: border-box;
box-sizing: border-box;
}
以下内容为浏览器(甚至IE9)提供了完美的像素一致性:
这种方法非常明智,显而易见:
创建输入和标签。将它们显示为块,以便您可以随意浮动它们。将高度和线高度设置为相同的值,以确保它们居中并垂直对齐。对于em测量,要计算元素的高度,浏览器必须知道这些元素的字体高度,并且它本身不能在em测量中设置。
这导致了一个全球适用的通用规则:
input, label {display:block;float:left;height:1em;line-height:1em;}
字体大小可根据表单、字段集或元素进行调整。
#myform input, #myform label {font-size:20px;}
在Mac、Windows、Iphone和Android上的最新Chrome、Safari和Firefox中进行了测试。以及IE9。
此方法可能适用于不高于一行文本的所有输入类型。根据需要应用类型规则。
所以我知道这已经得到了很多次的回答,但我觉得我有一个比已经提供的解决方案更优雅的方法。不仅有一个优雅的解决方案,还有两个单独的解决方案来满足您的需求。话虽如此,你需要知道和看到的一切都包含在2 JS Fiddle的评论中。
解决方案#1依赖于给定浏览器的本机“复选框”,尽管有一点扭曲。。。它包含在一个div中,该div更易于跨浏览器定位,并带有一个溢出:隐藏以剪切超过1px的拉伸复选框(这样你就看不到FF的丑陋边框)
简单HTML:(按照链接查看带有注释的css,代码块是为了满足stackoverflow)http://jsfiddle.net/KQghJ/
<label><div class="checkbox"><input type="checkbox" /></div> Label text</label>
解决方案#2使用“Checkbox Toggle Hack”来切换DIV的CSS状态,该状态已在浏览器中正确定位,并使用一个简单的精灵设置复选框未选中和选中状态。所有需要的是用所述复选框切换哈克调整背景位置。在我看来,这是一个更优雅的解决方案,因为您可以更好地控制复选框和收音机,并可以确保它们在浏览器中看起来相同。
简单HTML:(点击链接查看带有注释的CSS,代码块满足StackOverflow)http://jsfiddle.net/Sx5M2/
<label><input type="checkbox" /><div class="checkbox"></div>Label text</label>
如果有人不同意这些方法,请给我留言,我希望听到一些反馈,说明为什么其他人没有找到这些解决方案,或者如果他们有,为什么我在这里看不到关于这些解决方案的答案?如果有人看到这些方法中的一个失败了,那也很高兴看到,但这些方法已经在最新的浏览器中进行了测试,并且依赖于HTML/CSS方法,这些方法在我看来是非常古老的,而且是通用的。