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

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

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

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

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

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

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


当前回答

在Chrome28OSX中,我选择了400+支持率的答案,这对我来说并不适用,可能是因为它没有在OSX中进行测试,或者在2008年回答这个问题时,它确实适用。

时代已经改变,新的CSS3解决方案现在是可行的。我的解决方案使用伪元素创建自定义复选框。因此,规定(无论你怎么看,是赞成还是反对)如下:

仅适用于现代浏览器(FF3.6+、IE9+、Chrome、Safari)依赖于自定义设计的复选框,该复选框将在每个浏览器/操作系统中呈现完全相同。这里我只是选择了一些简单的颜色,但你可以总是添加线性渐变,这样可以让它更具冲击力。调整为特定的字体/字体大小,如果更改,您只需更改复选框的位置和大小,使其看起来垂直对齐。如果调整正确,最终结果在所有浏览器/操作系统中应该仍然接近完全相同。无垂直对齐财产,无浮动在我的示例中必须使用所提供的标记,如果结构像问题一样,它将不起作用,但是,布局基本上看起来是一样的。如果您想四处移动,还必须移动关联的CSS

div.复选框{位置:相对;字体系列:Arial;字体大小:13px;}标签{位置:相对;向左填充:16px;}标签::之前{内容:“”;显示:内联块;宽度:10px;高度:10px;背景色:白色;边框:实心1px#9C9C9C;位置:绝对;顶部:1px;左:0px;}标签::之后{内容:“”;宽度:8px;高度:8px;背景色:#666666;位置:绝对;左:2px;顶部:3px;显示:无;}输入[类型=复选框]{可见性:隐藏;位置:绝对;}input[类型=复选框]:选中+标签::之后{显示:块;}输入[类型=复选框]:活动+标签::之前{背景色:#DDDDD;}<表单><div class=“checkbox”><input id=“check_me”type=checkbox/><label for=“check_me”>复选框的标签</label></div></form>

此解决方案隐藏复选框,并将伪元素添加到标签并设置其样式,以创建可见的复选框。由于标签与隐藏的复选框绑定,因此输入字段仍将更新,值将随表单一起提交。

如果你感兴趣,这里是我对单选按钮的看法:http://jsfiddle.net/DtKrV/2/

希望有人觉得这很有用!

其他回答

input {
    margin: 0;
}

真的很管用

我不喜欢相对定位,因为它使元素呈现在其级别上的所有其他元素之上(如果您有复杂的布局,它可以在某些元素之上)。

我发现垂直对齐:sub使复选框在Chrome、Firefox和Opera中看起来足够对齐。由于我没有MacOS,IE10稍有问题,所以无法检查Safari,但我发现它对我来说已经足够好了。

另一个解决方案可能是尝试为每个浏览器制作特定的CSS,并使用%/pixel/EM中的垂直对齐方式对其进行微调:http://css-tricks.com/snippets/css/browser-specific-hacks/

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

如果您使用的是Twitter Bootstrap,您可以只使用<label>上的复选框类:

<label class="checkbox">
    <input type="checkbox"> Remember me
</label>

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

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

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