【问题标题】:Mysterious extra left padding on input[type="search"]输入[type="search"] 上的神秘额外左填充
【发布时间】:2015-07-16 09:15:55
【问题描述】:

有人知道是什么导致了input 上的这个额外的左侧“填充”吗?检查员没有报告实际上是什么原因造成的。不能说我以前遇到过这个问题……

顶部字段是文本input(搜索),底部字段是select

显然HTML代码是解决问题的关键,给你:

<input type="search" placeholder="Search" />
<select>
  <option value="ir35">IR35</option>
</select>

编辑添加:

我有点傻,但问题仍然存在。在试验不同的输入类型时,我创建了两个模板。问题实际上是在input[type="search"] - 不是文本。这是搜索类型的问题。但是我已经在申请-webkit-appearance: textfield 我还有什么遗漏吗?实际上没有“东西”导致填充、文本缩进、填充等。它只是“那里”。

编辑:

我的解决方案将放弃搜索以支持文本 - 这是一种解决方法,但它会做。

【问题讨论】:

  • 给我们html代码
  • @NathanHornby 如果您想要正确的响应,无论如何都需要 html 代码...
  • 好吧,你可以自己保留css和html。我不是这里有错误的人...
  • 你应该花时间写下不显示 html 和 css 的理由来制作一个实际的mvce,而这个问题会在 20 分钟前发现。
  • 你应该退后一步,从不同的角度看待这个请求。您寻求帮助,但没有采取任何措施使您的问题可重现,并且对那些要求资源能够帮助您的人表现得很傲慢。发布代码不是规则,但应该是常识和良好的礼仪。事实上,你是这样浪费人们时间的人。无论如何,祝你好运。

标签: html css


【解决方案1】:

select 元素和input 元素在不同的盒子模型下运行,我相信。

box-sizing:border-boxselect 元素的默认值。

您可以在使用开发者工具时通过查看“Computed Styles”来检查这一点

在两者上设置box-sizing:border-box 应该可以解决它。

没有演示

select,
input {
  display: block;
  width: 200px;
}
<select name='options'>
  <option value='option-1'>Option 1</option>
  <option value='option-2'>Option 2</option>
  <option value='option-3'>Option 3</option>
</select>

<input type="text" />

使用演示

select, input {
  display: block;
  width: 200px;
  box-sizing:border-box;
}
<select name='options'>
  <option value='option-1'>Option 1</option>
  <option value='option-2'>Option 2</option>
  <option value='option-3'>Option 3</option>
</select>  

<input type="text" />

【讨论】:

  • 在 chrome 上,sn-p 没有按照作者的要求做......它修复了两个元素的宽度(在第一个元素中,选择更窄)但“填充”是不固定
  • @Paulie_D 我无耻地重新利用了你的 sn-p,谢谢!
  • 没有麻烦...很乐意提供帮助。
【解决方案2】:

某些表单元素(如inputselect)的样式未在CSS 规范中指定,由浏览器开发人员自行决定,因此不同浏览器的样式会略有不同。

在 Firefox 中,您可以进行一些硬编码的样式调整来解决您看到的填充问题。

例如,如果您在输入字段中添加padding-left: 3px,则文本值将与选择框中显示的选项值对齐。

但是,由于填充不能为负数,您可以消除 select 元素中的左侧填充,尽管您可以在 option 元素中消除。

select,
input {
  display: block;
  width: 200px;
  box-sizing: border-box;
}
select {
  padding-left: 0px;
}
input {
  padding-left: 3px;
}
<input type="text" value="Option 1" />

<select name='options'>
  <option value='option-1'>Option 1</option>
  <option value='option-2'>Option 2</option>
  <option value='option-3'>Option 3</option>
</select>

【讨论】:

  • 但这不是-webkit-appearance textfield 的目的吗?要删除该浏览器样式? (至少在 webkit 浏览器中)。
  • 这里甚至是解决方案:stackoverflow.com/questions/11127891/… 但它并没有解决问题
  • 我的猜测是-webkit-appearance: textfield 可能会改变浏览器中元素的内部类型,但随后,该元素将响应与浏览器关联的默认样式表。
  • 但是没有添加样式 - 计算的样式没有提供任何信息 - 我不应该能够看到导致缩进的原因吗?
  • 我认为表单控件元素的默认样式在浏览器中是硬编码的,并且它们不会使用浏览器附带的检查工具(例如检查元素)出现。从用户体验的角度来看,我认为这是一个材料限制,您最好的希望是使用填充来解决它。你的问题是探索性的,这很好,但也涉及到一个很难令人满意地回答的学科领域。
猜你喜欢
  • 1970-01-01
  • 2013-01-11
  • 2010-12-23
  • 1970-01-01
  • 1970-01-01
  • 2010-10-08
  • 2011-03-01
  • 1970-01-01
  • 2014-06-22
相关资源
最近更新 更多