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

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

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

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

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

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

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


当前回答

警告这个答案太老了,在现代浏览器上不起作用。

我不是这个答案的海报,但在写这篇文章时,这是迄今为止在正面和负面投票中投票最多的答案(+1035-17),它仍然被标记为接受答案(可能是因为问题的原始海报是写这个答案的人)。

正如评论中多次指出的那样,这个答案在大多数浏览器上都不起作用了(自2013年以来似乎一直无法做到这一点)。


经过一个多小时的调整、测试和尝试不同风格的标记,我想我可能有一个不错的解决方案。该特定项目的要求如下:

输入必须在自己的线路上。复选框输入需要在所有浏览器中与标签文本垂直对齐(如果不相同)。如果标签文本换行,则需要缩进(因此复选框下面没有换行)。

在我做出任何解释之前,我只给你代码:

标签{显示:块;向左填充:15px;文本缩进:-15px;}输入{宽度:13px;高度:13px;填充:0;边距:0;垂直对齐:底部;位置:相对;顶部:-1px;*溢出:隐藏;}<表单><div><label><input-type=“checkbox”/>标签文本</label></div></form>

这里是JSFiddle中的工作示例。

这段代码假设您使用的是类似于EricMeyer的重置,它不会覆盖表单输入边距和填充(因此在输入CSS中设置边距和填充重置)。显然,在实际环境中,您可能会嵌套/覆盖支持其他输入元素的内容,但我希望保持简单。

需要注意的事项:

*溢出声明是一个内联IE黑客(星属性黑客)。IE 6和7都会注意到它,但Safari和Firefox会适当地忽略它;只是为了简单起见使用它。据我所知,在浏览器中唯一一致的垂直对齐语句是垂直对齐:底部。在Safari、Firefox和IE中,设置此项并相对向上定位的行为几乎相同,只有一两个像素的差异。使用对齐的主要问题是IE在输入元素周围留下了一堆神秘的空间。它不是填充或边距,它是该死的持久性。在复选框上设置一个宽度和高度,然后溢出:由于某种原因隐藏,会切断额外的空间,并允许IE的定位与Safari和Firefox非常相似。根据您的文本大小,您无疑需要调整相对位置、宽度、高度等,以使内容看起来正确。

除了今天早上我在做的项目之外,我还没有在其他项目上尝试过这种特定的技术,所以如果你找到更稳定的方法,一定要闭嘴。


警告这个答案太老了,在现代浏览器上不起作用。

其他回答

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

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

输入类型复选框包装在标签内并向左浮动,如下所示:

<label for="id" class="checkbox">
    <input type="checkbox" id="id">
    <span>The Label</span>
</label>

这对我有用:

label.checkbox {
    display: block;
}
.checkbox input {
    float: left;
    height: 18px;
    vertical-align: middle;
}
.checkbox span {
    float: left;
    line-height: 18px;
    margin: 0 0 0 20px;
}

确保的高度与(块级别)的线高度相同。

谢谢!这也一直让我发疯。

在我的特殊情况下,这对我很有用:

input {
    width: 13px;
    height: 13px;
    padding: 0;
    margin:0;
    vertical-align: top;
    position: relative;
    *top: 1px;
    *overflow: hidden;
}
label {
    display: block;
    padding: 0;
    padding-left: 15px;
    text-indent: -15px;
    border: 0px solid;
    margin-left: 5px;
    vertical-align: top;
}

我正在使用reset.css,这可能会解释一些差异,但这似乎对我很有用。

在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/

希望有人觉得这很有用!

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

我的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的类似物):