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

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

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

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

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

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

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


当前回答

label {
    display: inline-block;
    padding-right: 10px;
}
input[type=checkbox] {
    position: relative;
    top: 2px;
}

其他回答

我通常将复选框保留为未标记,然后将其“标签”设置为单独的元素。这是一种痛苦,但复选框及其标签的显示方式(正如您所注意到的)在跨浏览器之间存在很大差异,这是我接近控制所有内容外观的唯一方法。

出于同样的原因,我最终也在winforms开发中这样做。我认为复选框控件的根本问题是它实际上是两个不同的控件:框和标签。通过使用复选框,您可以让控件的实现者来决定这两个元素如何彼此相邻地显示(而且他们总是出错,其中错误=不是您想要的)。

我真的希望有人能更好地回答你的问题。

我通常使用线条高度来调整静态文本的垂直位置:

标签{线条高度:18px;}输入{宽度:13px;高度:18px;字体大小:12px;线条高度:12px;}<表单><div><label><input-type=“checkbox”/>标签文本</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>

根据One Crayon的解决方案,我有一些适合我的更简单的方法:

.font2{font-family:Arial;字体大小:32px}/*示例字体*/输入[type=复选框],输入[type=radio]{垂直对齐:中间;位置:相对;底部:1px;}输入[类型=无线电]{底部:2px;} <label><input-type=“checkbox”/>标签文本</label><p class=“font2”><label><input-type=“checkbox”/>标签文本</label></p>

在Safari(我相信它的基线)中,像素对像素的渲染是一样的,Firefox和IE7都很好。它还适用于各种大小的标签字体。现在,为了修复IE在选择和输入上的基线。。。


更新:(第三方编辑)

正确的底部位置取决于字体系列和字体大小!我发现使用底部:.08em;对于checkbox和radio元素是一个很好的通用值。我在Chrome/Firefox/IE11中使用Arial&Calibri字体在windows中使用几种小/中/大字体进行了测试。

.font2,.font2输入{font-family:Arial;字体大小:32px}/*示例字体*/输入[type=复选框],输入[type=radio]{垂直对齐:中间;位置:相对;底部:.08em;/*对于不同的字体,这是一个更好的值*/}<label><input-type=“checkbox”/>标签文本</label><p class=“font2”><label><input-type=“checkbox”/>标签文本</label></p>

也许有些人也犯了和我一样的错误?这是。。。我为输入框设置了一个宽度,因为它们大多是“文本”类型,但后来忘记了覆盖复选框的宽度,所以我的复选框试图占据大量多余的宽度,因此很难在旁边对齐标签。

.checkboxlabel {
    width: 100%;
    vertical-align: middle;
}
.checkbox {
    width: 20px !important;
}
<label for='acheckbox' class='checkboxlabel'>
    <input name="acheckbox" id='acheckbox' type="checkbox" class='checkbox'>Contact me</label>

早在IE6(使用类选择器)以及Firefox、Safari和Chrome的最新版本中,提供了可点击的标签和正确的对齐方式