【问题标题】:<select> has extra padding compared to <input> with same border-width and padding<select> 与具有相同边框宽度和填充的 <input> 相比具有额外的填充
【发布时间】:2016-09-28 15:46:48
【问题描述】:

input, select { padding: 2px; border: solid 1px red; }
<input value="Foo">
<select><option>bar!</option></select>

即使它们都具有相同的paddingborder-width,生成的&lt;select&gt; 明显高于其对应的&lt;input&gt;。 (在 Firefox 中测试)

你能解释一下身高差背后的原因吗?如果我删除 paddingborder-width 规则,那么问题就会消失。不幸的是,这对我的项目来说不是一个好的解决方案。

我希望拥有跨浏览器一致的像素完美布局,即使使用移动浏览器也是如此。到目前为止,我一直为&lt;select&gt; 维护一个与&lt;input&gt; 不同的padding,但如果我可以对两者都使用一个设置,我会更喜欢。

我们找到了一个简单的 CSS 规则来解决 similar question in regarding &lt;button&gt;s in Firefox。我知道&lt;select&gt; 可能没有那么简单,我发布了这个问题来确定。

【问题讨论】:

标签: css html-select padding


【解决方案1】:

你真的不能用 css 为 &lt;select&gt; 元素设置样式,并期望它们在不同的浏览器上看起来相同 - 或者甚至期望你的规则适用于这个问题。浏览器都以自己特殊的方式处理表单元素——如果你想要在任何地方看起来都一样的东西,我建议你尝试Select2 或类似的替换插件。

例如,即使是您的 sn-p,在 OS X 10.8 上的 Chrome 中,&lt;input&gt; 实际上也比 &lt;select&gt; 高,并且与您的屏幕截图不同:

【讨论】:

  • 我已经知道它们看起来不会完全一样,但我确实认为它们总是更高。有趣的是,在 OS X 中选择实际上更短。
  • 似乎&lt;select&gt; 在 Windows 上的 Chrome 和 Firefox 以及 Android/Chrome OS 上的 Chrome 中更高。如果有一些隐藏的 CSS 规则我可以​​禁用(即类似于我们在 researching &lt;button&gt; padding 时发现的规则),那么我会对这种一致性水平感到非常满意。考虑到当前的标准化水平,在 OS X 中存在较小的显示差异(受众百分比比前面提到的要小)是可以接受的。
  • 这只是前端网页设计中令人讨厌的事情之一,完全是抛硬币。它因浏览器和操作系统而异 - 即使是 相同操作系统的不同版本 也可以呈现不同的高度、宽度、边框等。尽管它可能很麻烦,但这就是为什么我建议使用 Select2 或类似的东西。
【解决方案2】:

每个浏览器都有其默认 CSS,因此您不能信任显示的高度和边距以及其他属性,除非您清除所有默认样式并设置自己的值。我建议添加heightbox-sizing 以及vertical-align 以获得您自己的结果:

input, select { 
  padding: 2px; border: solid 1px red;
  height:20px;
  box-sizing:border-box;
  vertical-align:middle;
}
<input value="Foo">
<select><option>bar!</option></select>

【讨论】:

  • 我希望根据字体大小自动调整高度。在您的 sn-p 中,选择的文本被部分裁剪:i.stack.imgur.com/bg6Xe.png。我希望有一个规则可以禁用额外的(特定于浏览器的)间距。
  • 再次查看您的帖子,我确实喜欢使用更大(不太可能被裁剪)height,然后删除垂直填充的想法。这与vertical-align: middle 一起提供了一种非常酷的方式来获得一致性,但我不确定vertical-align&lt;select&gt;&lt;input&gt; 之间以及其他浏览器之间的兼容性。
  • 输入文本和选择字段自动垂直对齐。但是同时使用line-heightheight 更安全。 vertical-align:middle 进行输入并选择保持在同一基线。
猜你喜欢
  • 2012-07-19
  • 2019-04-16
  • 1970-01-01
  • 1970-01-01
  • 2016-07-24
  • 2012-04-08
  • 1970-01-01
  • 2012-11-19
相关资源
最近更新 更多