如何获得相等的输入宽度和选择字段

luk*_*443 107 html css html-select border-box

在表单上,​​我有一个选择和两个输入字段.这些元素垂直对齐.不幸的是,我无法获得这些元素的相等宽度.

这是我的代码:

<select name="name1" style="width:198px">
  <option>value1</option>
  <option>value2</option>
</select><br/>
<input type="text" name="id1" style="width:193px"><br/>
<input type="text" name="id2" style="width:193px">
Run Code Online (Sandbox Code Playgroud)

对于上面的例子,select元素的最佳宽度是198或199 px(当然我尝试了193px,但差别很大).我认为,这取决于各种计算机和浏览器的分辨率,因为这些元素没有相同的宽度(有时我认为差异大约是1或2像素).我试图在div或table行中设置这些元素,但它没有帮助.

问:我如何才能获得这些元素的精确宽度?

Gab*_*oli 132

更新的答案

以下是如何更改input/textarea/select元素使用的框模型,以便它们的行为方式相同.您需要使用box-sizing为每个浏览器使用前缀实现的属性

-ms-box-sizing:content-box;
-moz-box-sizing:content-box;
-webkit-box-sizing:content-box; 
box-sizing:content-box;
Run Code Online (Sandbox Code Playgroud)

这意味着我们之前提到的2px差异不存在..

http://www.jsfiddle.net/gaby/WaxTS/5/上的示例

注意: 在IE上,它适用于版本8及更高版本.


原版的

如果你重置边框,那么select元素总是比input元素小2个像素.

例如:http://www.jsfiddle.net/gaby/WaxTS/2/

  • 也许您的意思是指定 box-sizing: border-box?我想这就是你的意思。Content-box 是默认设置,padding+margins 添加到宽度。 (3认同)
  • 它确实应该是:-ms-box-sizing:content-box; -moz-box-sizing:内容框;-webkit-box-sizing:内容框;框大小:内容框;标准语法应该放在最后,遵循渐进增强方法,以便将来当标准广泛实施时,用户代理将默认使用标准语法,您可以删除带前缀的版本。 (2认同)

tom*_*msv 116

我尝试了Gaby的答案(+1),但它只是部分解决了我的问题.相反,我使用了以下CSS,其中content-box被更改为border-box:

input, select {
    -webkit-box-sizing: border-box;
       -moz-box-sizing: border-box;
            box-sizing: border-box;
}
Run Code Online (Sandbox Code Playgroud)

  • 更多信息:https://developer.mozilla.org/en-US/docs/Web/CSS/box-sizing (4认同)
  • 这是一个很好的[为什么你应该使用`box-sizing:border-box`]的论据(https://css-tricks.com/international-box-sizing-awareness-day/).要获得良好的通用实现,请考虑[在顶级html元素上设置然后继承下来](https://css-tricks.com/inheriting-box-sizing-probably-slightly-better-best-practice/)所以它可以很容易地被覆盖. (2认同)

151*_*291 8

在 css 中添加以下代码:

 select, input[type="text"]{
      width:100%;
      box-sizing:border-box;
    }
Run Code Online (Sandbox Code Playgroud)