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

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

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

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

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

<表单><div><label><input-type=“checkbox”/>标签文本</label></div></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>

其他回答

这不是解决问题的最佳方式

vertical-align: middle

将style=“position:relative;top:2px;”添加到输入框会将其向下移动2px。因此,根据您的字体大小,您可以移动它。

尝试垂直对齐:中间

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

CSS:

.threeCol .listItem {
    width:13.9em;
    padding:.2em;
    margin:.2em;
    float:left;
    border-bottom:solid #f3f3f3 1px;
}
.threeCol input {
    float:left;
    width:auto;
    margin:.2em .2em .2em 0;
    border:none;
    background:none;
}
.threeCol label {
    float:left;
    margin:.1em 0 .1em 0;
}

HTML格式:

<div class="threeCol">
    <div class="listItem">
        <input type="checkbox" name="name" id="id" value="checkbox1" />
        <label for="name">This is your checkBox</label>
    </div>
</div>

上面的代码将把你的列表项放在三列中,只需改变宽度即可。

我发现唯一能将它们对齐的方法是使用绝对位置作为输入。摆弄输入的顶部变量得到了我想要的结果。

div {
  clear:    both;
  float:    none;
  position: relative;
}

input {
  left:     5px;
  position: absolute;
  top:      3px;
}

label {
  display:     block;
  margin-left: 20px;
}

我从来没有这样做的问题:

<form>
  <div>
    <input type="checkbox" id="cb" /> <label for="cb">Label text</label>
  </div>
</form>