Vertically align text within input field of fixed-height without display: table or padding?

后端 未结 16 2369
Happy的楠姐
Happy的楠姐 2020-12-01 01:27

The line-height property usually takes care of vertical alignment, but not with inputs. Is there a way to automatically center text without playing around with padding?

相关标签:
16条回答
  • 2020-12-01 01:32

    In my opinion, the answer on this page with the most votes is the best answer, but his math was wrong and I couldn't comment on it.

    I needed a text input box to be exactly 40 pixels high including a 1 pixel border all the way around. Of course I wanted the text vertically aligned in the center in all browsers.

    1 pixel border top
    1 pixel border bottom
    8 pixel top padding
    8 pixel bottom padding
    22 pixel font size

    1 + 1 + 8 + 8 + 22 = 40 pixels exactly.

    One thing to remember is that you must remove your css height property or those pixels will get added to your total above.

    <input type="text" style="padding-top:8px; padding-bottom:8px; margin: 0; border: solid 1px #000000; font-size:22px;" />
    

    This is working in Firefox, Chrome, IE 8, and Safari. I can only assume that if something simple like this is working in IE8, it should work similarly in 6, 7, and 9 but I have not tested it. Please let me know and I'll edit this post accordingly.

    0 讨论(0)
  • 2020-12-01 01:33

    I ran into this problem myself. I found that not specifying an input height, but using the font-height and padding combined, results in vertically aligned text.

    For instance, lets say you want to have a 42px tall input box, with a font-size of 20px. You could simply find the difference between the input height and the font-size, divide it by two, and set your padding to that amount. In this case, you would have 22px total worth of padding, which is 11px on each side.

    <input type="text" style="padding: 11px 0px 11px 0px; font-size: 20px;" />
    

    That would give you a 42px tall input box with perfect vertical alignment.

    Hope that helps.

    0 讨论(0)
  • 2020-12-01 01:33

    I know I'm late to the party but hopefully this'll help anyone looking for a concise answer that does work across all major browsers (except IE6, we have decided to stop supporting that browser so I refuse to even look at it anymore).

        #search #searchbox {
        height: 21px;
        line-height: 21px;
    }
    

    cheers! JP

    0 讨论(0)
  • 2020-12-01 01:33

    After much searching and frustration a combo of setting height, line height and no padding worked for me when using a fixed height (24px) background image for a text input field.

    .form-text {
        color: white;
        outline: none;
        background-image: url(input_text.png);
        border-width: 0px;
        padding: 0px 10px 0px 10px;
        margin: 0px;
        width: 274px;
        height: 24px;
        line-height: 24px;
        vertical-align: middle;
    }
    
    0 讨论(0)
  • 2020-12-01 01:35

    The inner vertical alignment will depend on font height and input height, so, it can be adjusted using padding !!!

    Try some like :

    .InVertAlign {
       height: 40px;
       line-height: 40px;
       font-size: 2em;
       padding: 0px 14px 3px 5px;
    }
    

    ...

    <input type="text" class="InVertAlign" />
    

    Remember to adjust the values on css class according to your needs !

    0 讨论(0)
  • 2020-12-01 01:38

    Go for line-height.

    The vertical-align tag works fine for the submit button but not for the text in the input field. Setting line-height to the height of the input field works on all browsers. Incl IE7.

    0 讨论(0)
提交回复
热议问题