iOS 5.0 Safari not vertically centering placeholder in text box
Asked Answered
A

5

29

I want to vertically center the text entered in input text boxes on the page.

Typical way to achieve this is to set the line-height and height equal. This works on pre iOS 5.0 Safari.

However; on iOS 5, Safari displays the typed text vertically centered... But the placeholder text and the cursor appear top aligned.

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

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

Anyone else facing this issue?

Absently answered 19/12, 2011 at 8:8 Comment(1)
Duplicate of #4920180Almund
E
36

Setting line-height: 1; seems to fix this.

Exposure answered 18/4, 2012 at 18:38 Comment(4)
how come this works... what is the logic behind this one? I am confused.Kolodgie
This cuts placeholders for Chrome and IE10. Downvoted!Quintessence
This does not work across the board. See andychukse's answer below for a working solution.Cecilla
See Marcel's answer for the correct solution. Do not use andychukse's answer, as that has problems as well.Laurynlausanne
O
40

For me there is only one solution that appears close to perfect in all browsers I tested (Chrome, FF, Safari (+iOS), IE10):

line-height: normal;

Solutions like line-height: 100% and line-height: 1; seem to be aligned towards the top of the input, especially in Chrome.

http://jsfiddle.net/5Vc3z/

Comparison:

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

Oba answered 26/3, 2014 at 10:11 Comment(4)
I agree with this. line-height: normal; is the only solution that worked in chrome for the placeholder. line-height: 1; had no effect.Heather
This is the correct answer. I had issues with line-height: 100% and line-height: 1; in Chrome, and this is the only answer that worked for me.Laurynlausanne
yes, this should be correct answer. I've also tried line-height with px, but only this answer worksThreonine
this should be the selected answerEntrap
E
36

Setting line-height: 1; seems to fix this.

Exposure answered 18/4, 2012 at 18:38 Comment(4)
how come this works... what is the logic behind this one? I am confused.Kolodgie
This cuts placeholders for Chrome and IE10. Downvoted!Quintessence
This does not work across the board. See andychukse's answer below for a working solution.Cecilla
See Marcel's answer for the correct solution. Do not use andychukse's answer, as that has problems as well.Laurynlausanne
S
7

You should use percentage for the line-height.

.txtBox {
       line-height: 100%;
       height: 3em;
    }
<input type="text" class="txtBox" placeholder="Name"></input>
Suzansuzann answered 13/5, 2013 at 13:5 Comment(4)
Works flawlessly. You can also use any percentage value, not only 100%. This should be the accepted answer.Limonite
This ought to be the accepted answer. For example, if we need to vertically center the text (by setting line-height equal to height), this renders that scenario correclty.Finder
line-height: normal; is the better way to go, as shown in Marcel's answer. As he mentions in his answer, solutions like line-height: 100% and line-height: 1; seem to be aligned towards the top of the input, especially in Chrome.Laurynlausanne
line-height: 100% worked perfectly for me in old and new browsers alikeCamass
B
2

Assuming you are just trying to make the input field appear larger then you could use padding:

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

Also, your input field should be:

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

Edit

Sorry, took a little while. It appears that placeholder can be styled individually and / or inherit styles from the parent. Unfortunately there are quite a lot of styles that are not supported by Safari at this time.

The following blog has details about the styling techniques and which are / are not supported within certain browsers:

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

Badillo answered 19/12, 2011 at 9:40 Comment(1)
Updated my question... actually its the placeholder text that is not appearing centered.Absently
I
1

I got stuck on this issue for a long time despite using

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

It turns out the having a line-height in the input element by itself was breaking my input::webkit-input-placeholder line-height.

Solution extended:

I removed the line-height in my input style and it fixed my issue.

Insufferable answered 13/6, 2016 at 21:11 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.