好的,这似乎是不可能的。我有一个文本框和一个选择框。我希望它们的宽度完全相同,以便它们在左边距和右边距上对齐。
<!DOCTYPE html>
<html>
<head>
<style type="text/css">
input, select {
width: 200px;
}
</style>
</head>
<body>
<input type="text" value="ABC"><br>
<select>
<option>123</option>
</select>
</body>
</html>
你觉得这样就行了,对吧?没有。Firefox 中的选择框短了 6 像素。见截图。
好的,让我们编辑代码并制作两种样式。
<style type="text/css">
input {
width: 200px;
}
select {
width: 206px;
}
</style>
好的,这行得通!
哦,等等,在 Chrome 中进行更好的测试...
有人能告诉我如何在所有浏览器中排列这些吗?为什么我不能只做 width: 200px ,为什么所有浏览器都显示不同?另外,当我们在这里时,为什么文本框和选择框的高度不同?我们如何让它们达到相同的高度?尝试过 height 和 line-height 无济于事。
解决方案:
好的,我在以下答案的帮助下找到了解决方案。关键是使用box-sizing:border-box属性,这样当您指定包含边框和内边距的宽度时。在此处查看出色的解释。然后浏览器无法填充它。
代码如下,还将框的高度设置为相同的大小,并将框内的文本缩进,使其对齐。您还需要设置边框,因为 Chrome 有一个看起来非常奇怪的边框,它用于选择框,这会导致对齐错误。这将适用于 HTML5 网站(例如支持 IE9、Firefox、Chrome、Safari、Opera 等)。
<!DOCTYPE html>
<html>
<head>
<style type="text/css">
input, select {
width: 200px;
border: 1px solid #000;
padding: 0;
margin: 0;
height: 22px;
-moz-box-sizing: border-box;
-webkit-box-sizing: border-box;
box-sizing: border-box;
}
input {
text-indent: 4px;
}
</style>
</head>
<body>
<input type="text" value="ABC"><br>
<select>
<option>123</option>
<option>123456789 123123123123</option>
<option>123456789 123123123123 134213721381212</option>
</select>
</body>
</html>
只是最后一个警告,您可能不希望在此样式中包含输入按钮、复选框等,因此请使用input:not([type='button'])
不将其应用于某些类型或用于input[type='text'], input[type='password']
指定您确实希望将其应用于的类型。