这是困扰我的CSS小问题之一。

Stack Overflow周围的人如何在浏览器中始终垂直对齐复选框及其标签?

每当我在Safari中正确对齐它们(通常在输入上使用垂直对齐:基线),它们在Firefox和IE中就完全关闭了。

在Firefox中修复它,Safari和IE不可避免地被搞砸了。我每次编写表单时都在这上面浪费时间。

以下是我使用的标准代码:

<表单><div><label><input-type=“checkbox”/>标签文本</label></div></form>

我通常使用埃里克·迈耶的重置,所以表单元素相对来说没有覆盖。期待您提供的任何提示或技巧!


当前回答

硬编码复选框的高度和宽度,删除其填充,并使其高度加上垂直边距等于标签的行高度。如果标签文本是内联的,请浮动复选框。Firefox、Chrome和IE7+都以相同的方式呈现以下示例:http://www.kornea.com/css-checkbox-align

其他回答

这对我来说很好:

字段集{文本对齐:左侧;边框:无}字段集ol、字段集ul{填充:0;列表样式:无}字段集li{衬垫底部:1.5em;float:无;清除:左侧}标签{浮动:左侧;宽度:7em;右边距:1em}字段集复选框li{清晰:两者都有;衬垫:.75em}字段集复选框标签{边距:0 0 0 1em;宽度:20em}fieldset.checkboxes输入{浮动:左侧}<表单><fieldset class=“checkbox”><ul><li><input type=“checkbox”name=“happy”value=“yep”id=“happy“/><label for=“happy”>快乐</标签></li><li><input type=“checkbox”name=“饥饿”value=“yep”id=“饥饿”/>饿了吗</标签></li></ul></fieldset></form>

尝试垂直对齐:中间

而且你的代码看起来应该是:<表单><div><input id=“blah”type=“checkbox”><label for=“blah“>标签文本</label></div></form>

现在,所有现代浏览器都支持flexbox,这样的方式对我来说似乎更简单。

<style>
label {
  display: flex;
  align-items: center;
}
input[type=radio], input[type=checkbox]{
  flex: none;
}
</style>
<form>
  <div>
    <label><input type="checkbox" /> Label text</label>
  </div>
</form>

以下是完整的前缀版本演示:

标签{显示:-webkit框;显示:-webkit flex;显示:-ms flexbox;显示:柔性;-webkit框对齐:居中;-webkit对齐项目:中心;-ms flex align:中心;对齐项目:居中;}输入[类型=无线电],输入[类型=复选框]{-webkit box flex:0;-webkit flex:无;-ms flex:无;flex:无;右边距:10px;}/*仅演示(显示对齐)*/表单{最大宽度:200px}<表单><标签><input-type=“radio”checked>我是一个对齐的电台和标签</label><标签><input-type=“checkbox”已选中>我是一个对齐的复选框和标签</label></form>

以下内容为浏览器(甚至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。

此方法可能适用于不高于一行文本的所有输入类型。根据需要应用类型规则。

我还没有完全测试过我的解决方案,但它似乎很有效。

我的HTML很简单:

<label class="checkbox"><input type="checkbox" value="0000">0000 - 0100</label>

然后,我将高度和宽度的所有复选框设置为24px。为了使文本对齐,我使标签的行高度也为24px,并指定垂直对齐:top;像这样:

编辑:IE测试后,我添加了垂直对齐:底部;并更改了标签的CSS。你可能会发现你需要一个有条件的IE css案例来整理填充-但是文本和框是内联的。

输入[type=“checkbox”]{宽度:24px;高度:24px;垂直对齐:底部;}标签复选框{垂直对齐:顶部;线条高度:24px;边距:2px 0;显示:块;高度:24px;}<label class=“checkbox”><input type=“checkbox“value=“0000”>0000-0100</label><label class=“checkbox”><input type=“checkbox”value=“0100”>0100-0200</label><label class=“checkbox”><input type=“checkbox”value=“0200”>0200-0300</label><label class=“checkbox”><input type=“checkbox”value=“0300”>0300-0400</label>

如果有人发现这不起作用,请告诉我。以下是它的实际操作(在Chrome和IE中-道歉,因为屏幕截图是在视网膜上拍摄的,并使用了IE的类似物):