这是困扰我的CSS小问题之一。
Stack Overflow周围的人如何在浏览器中始终垂直对齐复选框及其标签?
每当我在Safari中正确对齐它们(通常在输入上使用垂直对齐:基线),它们在Firefox和IE中就完全关闭了。
在Firefox中修复它,Safari和IE不可避免地被搞砸了。我每次编写表单时都在这上面浪费时间。
以下是我使用的标准代码:
<表单><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>
为了与浏览器中的表单字段保持一致,我们使用:框大小调整:边框框
button, checkbox, input, radio, textarea, submit, reset, search, any-form-field {
-moz-box-sizing: border-box;
-webkit-box-sizing: border-box;
box-sizing: border-box;
}
警告这个答案太老了,在现代浏览器上不起作用。
我不是这个答案的海报,但在写这篇文章时,这是迄今为止在正面和负面投票中投票最多的答案(+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非常相似。根据您的文本大小,您无疑需要调整相对位置、宽度、高度等,以使内容看起来正确。
除了今天早上我在做的项目之外,我还没有在其他项目上尝试过这种特定的技术,所以如果你找到更稳定的方法,一定要闭嘴。
警告这个答案太老了,在现代浏览器上不起作用。
根据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>