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

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

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

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

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

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

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

其他回答

所以我知道这已经得到了很多次的回答,但我觉得我有一个比已经提供的解决方案更优雅的方法。不仅有一个优雅的解决方案,还有两个单独的解决方案来满足您的需求。话虽如此,你需要知道和看到的一切都包含在2 JS Fiddle的评论中。


解决方案#1依赖于给定浏览器的本机“复选框”,尽管有一点扭曲。。。它包含在一个div中,该div更易于跨浏览器定位,并带有一个溢出:隐藏以剪切超过1px的拉伸复选框(这样你就看不到FF的丑陋边框)

简单HTML:(按照链接查看带有注释的css,代码块是为了满足stackoverflow)http://jsfiddle.net/KQghJ/

<label><div class="checkbox"><input type="checkbox" /></div> Label text</label>

解决方案#2使用“Checkbox Toggle Hack”来切换DIV的CSS状态,该状态已在浏览器中正确定位,并使用一个简单的精灵设置复选框未选中和选中状态。所有需要的是用所述复选框切换哈克调整背景位置。在我看来,这是一个更优雅的解决方案,因为您可以更好地控制复选框和收音机,并可以确保它们在浏览器中看起来相同。

简单HTML:(点击链接查看带有注释的CSS,代码块满足StackOverflow)http://jsfiddle.net/Sx5M2/

<label><input type="checkbox" /><div class="checkbox"></div>Label text</label>

如果有人不同意这些方法,请给我留言,我希望听到一些反馈,说明为什么其他人没有找到这些解决方案,或者如果他们有,为什么我在这里看不到关于这些解决方案的答案?如果有人看到这些方法中的一个失败了,那也很高兴看到,但这些方法已经在最新的浏览器中进行了测试,并且依赖于HTML/CSS方法,这些方法在我看来是非常古老的,而且是通用的。

现在,所有现代浏览器都支持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>

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

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

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

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

尝试我的解决方案,我在IE 6、FF2和Chrome中尝试过,它在所有三种浏览器中逐像素渲染。

* {填充:0px;边距:0px;}#世界银行{宽度:15px;高度:15px;浮动:左侧;}#某人标签{浮动:左侧;左侧填充:3px;}<div><input id=“wb”type=“checkbox”/><label for=“wb”id=“somelabel”>Web浏览器</label></div>