alignment文本和select框在CSS中相同的宽度?

好吧,这似乎不可能得到正确的。 我有一个文本框和一个select框。 我希望他们是相同的宽度,所以他们排列在左边距和右边距。

<!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中的select框较短6px。 看截图。 在Firefox中截图

好吧,让我们编辑代码并制作两种样式。

 <style type="text/css"> input { width: 200px; } select { width: 206px; } </style> 

好的,这工作!

在Firefox中修复

哦,等等,在Chrome中更好的testing…

铬的截图

FFFFFFFUUUUUUUUUUUU

有人能告诉我如何排列在所有浏览器? 为什么我不能只做width:200px,为什么所有的浏览器都以不同的方式显示呢? 同时,我们为什么是文本框和select框不同的高度? 我们如何让他们达到相同的高度? 已经尝试了高度和线高无不可用。


解:

好吧,我find了解决scheme,并从下面的答案中获得了一些帮助。 关键在于使用box-sizing:border-box属性,以便在指定包含边框和填充的宽度时使用。 在这里看到很好的解释 然后浏览器不能把它填满。

代码如下所示,还将框的高度设置为相同的大小,并缩小框内的文本,使其排成一行。 您还需要设置边框为Chrome浏览器有一个非常奇怪的外观边框,用于select框将抛出alignment。 这将适用于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> 

只是最后一个警告,你可能不希望inputbutton,checkbox等被包含在这个样式中,所以使用input:not([type='button'])不适用于某些types或使用input[type='text'], input[type='password']来指定你想要应用的。

这是因为<input type="text" />元素与<select>元素具有稍微不同的默认样式,例如边界,填充和边距值可能不同。

您可以通过元素检查器(例如Firefox的Firebug或Chrome的内置检查器)观察这些默认样式。 而且,这些默认样式表在浏览器和浏览器之间是不同的。

你有两个select:

  1. 显式设置边界,填充和边距值对于这两个元素都是相同的
  2. 一个CSS重置样式表要包含在自己的CSS样式表之前

我会select1,因为选项2需要大量的工作,你最终会得到大量不必要的CSS。 但是一些networking开发人员喜欢从头开始,并有完全的控制权。

这会让你接近,但是这种精确度几乎是不可能的。

 <div style="width: 200px"><input type="text" style="width: 100%; margin: 0; padding: 0" /></div> <div style="width: 200px"> <select id="Select1" style="width: 100%; margin: 0; padding: 0"> <option>1</option> </select> </div> 

不同的浏览器默认应用不同的样式。 我发现将margin和padding重置为0会使Firefox和Chrome中的两个元素的宽度相等。

 <html> <head> <title>Test</title> <style type="text/css"> input, select { margin: 0; padding: 0; width: 200px; } </style> </head> <body> <input type="text" value="ABC"><br /> <select> <option>123</option> </select> </body> </html> 

我个人喜欢在尝试使devise在多个浏览器中看起来很棒之前,使用像YUI CSS Reset这样的最小的CSS重置样式表。

添加一个类到select和input标签问题即:

 <input class='custom-input'/> <select class='custom-input'></select> 

然后修改下面的CSS来适合你的devise:

 .custom-input { width:140px; border:1px solid #ccc; margin:1px; padding:3px; box-sizing: border-box; -moz-box-sizing: border-box; -webkit-box-sizing: border-box; -ms-box-sizing:content-box; -moz-box-sizing:content-box; -webkit-box-sizing:content-box; box-sizing:content-box; } 

obvs这是一个支持浏览器的修复程序

如果你使用表4input你可以使用下面的解决scheme – 也与ie7兼容:

 <tr style="width:1px;"><td style="width:inherit;position:relative;"> <select style="width:100%;"> </select> </td></tr> <tr><td> <input type="text" style="width:150px;"/> </td></tr> 

这样,表单元格宽度将固定为input的宽度,

因此,select将总是采取剩余的宽度,并与dinput完美的排队。

尝试从两个元素中删除默认边框:

 select, input { border:0; } 

是的,非常令人沮丧。 然而,我从来没有遇到过这个问题,直到我在HTML页面的顶部放置了一个“<!DOCTYPE html>”标签。 我的网页在我可以testing的所有平台上正确呈现,直到我将该标记放在文档的顶部。

虽然这是“真正的规格”,但似乎是这些alignment问题的根源。 FWIW,我使用HTML5元素,内联CSS等,都没有该标签来指定HTML5。 因人而异。