iOS 5.0 Safari 不在文本框中垂直居中占位符

Posted

技术标签:

【中文标题】iOS 5.0 Safari 不在文本框中垂直居中占位符【英文标题】:iOS 5.0 Safari not vertically centering placeholder in text box 【发布时间】:2012-01-23 10:08:03 【问题描述】:

我想将页面上输入文本框中输入的文本垂直居中。

实现此目的的典型方法是将行高和高度设置为相等。这适用于 ios 5.0 之前的 Safari。

但是;在 iOS 5 上,Safari 将键入的文本垂直居中显示...但占位符文本和光标显示为顶部对齐。

.txtBox 
    line-height: 3em;
    height: 3em;

<input type="text" class="txtBox" placeholder="Name"></input>

还有其他人面临这个问题吗?

【问题讨论】:

***.com/questions/4919680/… 的副本 【参考方案1】:

对我来说,在我测试的所有浏览器(Chrome、FF、Safari (+iOS)、IE10)中,只有一种解决方案看起来接近完美:

line-height: normal;

line-height: 100%line-height: 1; 之类的解决方案似乎与输入的顶部对齐,尤其是在 Chrome 中。

http://jsfiddle.net/5Vc3z/

比较:

http://jsfiddle.net/5Vc3z/1/

【讨论】:

我同意这一点。 line-height: normal; 是唯一在 chrome 中为占位符工作的解决方案。 line-height: 1; 无效。 这是正确答案。我在 Chrome 中遇到了 line-height: 100%line-height: 1; 的问题,这是唯一对我有用的答案。 是的,这应该是正确的答案。我也试过line-heightpx,但只有这个答案有效 这应该是选择的答案【参考方案2】:

设置line-height: 1; 似乎可以解决这个问题。

【讨论】:

这是怎么回事……这背后的逻辑是什么?我很困惑。 这会减少 Chrome 和 IE10 的占位符。投反对票! 这并不适用。请参阅下面的 andychukse 的答案以获得有效的解决方案。 查看马塞尔的答案以获得正确的解决方案。不要使用 andychukse 的答案,因为这也有问题。【参考方案3】:

您应该使用百分比作为行高。

.txtBox 
       line-height: 100%;
       height: 3em;
    
<input type="text" class="txtBox" placeholder="Name"></input>

【讨论】:

完美运行。您还可以使用任何百分比值,而不仅仅是 100%。这应该是公认的答案。 这应该是公认的答案。例如,如果我们需要将文本垂直居中(通过将 line-height 设置为 height ),这会使该场景正确呈现。 line-height: normal; 是更好的方法,如 Marcel 的回答所示。正如他在回答中提到的那样,line-height: 100%line-height: 1; 之类的解决方案似乎与输入的顶部对齐,尤其是在 Chrome 中。 line-height: 100% 在新旧浏览器中都非常适合我【参考方案4】:

假设您只是想让输入字段看起来更大,那么您可以使用padding:

.txtBox 
    font-size: 1em;
    padding: 1em auto;

此外,您的输入字段应为:

<input type="text" class="txtBox" placeholder="Name" />

编辑

抱歉,耽误了一点时间。 placeholder 似乎可以单独设置样式和/或从父级继承样式。不幸的是,目前 Safari 不支持很多样式。

以下博客详细介绍了样式技术以及某些浏览器支持/不支持的技术:

http://blog.ajcw.com/2011/02/styling-the-html5-placeholder/

【讨论】:

更新了我的问题...实际上它的占位符文本没有出现居中。【参考方案5】:

尽管使用了,但我在这个问题上卡了很长时间

input::-webkit-input-placeholder line-height:normal!important;

事实证明,输入元素中的行高本身就破坏了我的 input::webkit-input-placeholder 行高。

解决方案扩展:

我删除了输入样式中的行高,它解决了我的问题。

【讨论】:

以上是关于iOS 5.0 Safari 不在文本框中垂直居中占位符的主要内容,如果未能解决你的问题,请参考以下文章

相对于文本框中的文本块垂直居中控件

为啥文本元素不在视图内垂直居中?

如何让word文本框中的文字垂直上下居中

TextBlock 文本不在 DataGridCell 内垂直居中

如何在具有(流体高度)的响应框中垂直居中文本[重复]

iOS Safari 中的垂直居中 flexbox 覆盖