Ian
Ian

Reputation: 935

Vertical Align text in a Label

I have been asked to vertically align the text in the labels for the fields in a form but I don't understand why they are not moving. I have tried putting in-line styles using vertical-align:top; and other attributes like bottom and middle but it doesn't work.

Any ideas?

<dd>
   <label class="<?=$email_confirm_class;?>" 
          style="text-align:right; padding-right:3px">Confirm Email</label>
   <input class="text" type="text" 
          style="border:none;" name="email_confirm" 
          id="email_confirm" size="18" value="<?=$_POST['email_confirm'];?>" 
          tabindex="4" /> 
   *
</dd>

Upvotes: 86

Views: 225783

Answers (19)

AntLink
AntLink

Reputation: 1

I needed to center the label on a radio button. What worked for me was:

vertical-align: top;
padding-top: 6px;

Upvotes: 0

Sivadass N
Sivadass N

Reputation: 927

Adding the display:flex property to the label will get the job done!

Upvotes: -1

Hemiacetal
Hemiacetal

Reputation: 121

Just set the vertical-align property of the label to top.

label {
  vertical-align: top;
}
 <label for="desc">Description</label>
 <textarea name="desc" id="desc" cols="30" rows="10"></textarea>

Upvotes: 0

tony gil
tony gil

Reputation: 9554

Lacking in elegance, pure html, no CSS solution:

<table>
   <tr>
      <td>
         <label></label>
      </td>
   </tr>
   <tr>
      <td>
         <input></input>
      </td>
   </tr>
</table>

Upvotes: -1

bob
bob

Reputation: 7985

Force relative positions to provide top/bottom adjustments

.whatever {
    position: relative;
}

.whatever .input {
    position: relative;
}

.whatever span {
    position: relative;
    top: -2px; /* adjust this up or down */
}
<label class="whatever">
    <input type="checkbox"><span>my thing</span>
</label>

Upvotes: 0

collapsinghrung
collapsinghrung

Reputation: 865

You have this:

<label class="styling_target">Label Text</label>
<input />

Do this instead:

<label>
  <span class="styling_target">Label Text</span>
  <input />
</label>

Styling a label doesn't really work, but you can have arbitrary HTML inside it, and you can style that.

Upvotes: 0

BAL3N
BAL3N

Reputation: 1

You don't have to add any padding or edit the line-height!

Instead, just make sure that when you have an HTML like this :

<label><input type="checkbox" name=""><span>Checkbox Text</span></label>

Just make sure that the input height and width are the same, and the the text has the same font size.

Then, it will look perfectly fine and looks centered.

Upvotes: -1

Aashutosh Taikar
Aashutosh Taikar

Reputation: 155

If your label is in table, padding may cause it to expand. To avoid this you may use margin:

div label {
    display: block;
    text-align: left;
    margin-bottom: -0.2%;
}

Upvotes: 0

Spencer Sullivan
Spencer Sullivan

Reputation: 575

None of these worked for me. I am using ASP.Net MVC with Bootstrap. I used the following successfully:

.label-middle { 
    padding-top:6px;
}

<label id="lblX" class="label-middle" ></label>

This vertically aligned the label with the textbox next to it.

Upvotes: -1

gekh
gekh

Reputation: 2114

You can use flexbox in 2018+:

.label-class {
    display: flex;
    align-items: center;
}

Browser support: https://caniuse.com/#search=flexbox

Upvotes: 94

psiclone
psiclone

Reputation: 11

Use css on your label.

For example:

label {line-height:1em; margin:2px 5px 3px 5px; padding:2px 5px 3px 5px;}

Notice that the line-height will adjust the height of the line itself, whereas margin will dictate how far out other elements will be outside the lable and padding will dictate any inner space from the outside edge of the label. The margin and padding work like this (clockwise: Top Right Bottom Left), so 2px 5px 3px 5px is:

2px Top 5px Right 3px Bottom 5px Left

Upvotes: 1

user7253564
user7253564

Reputation:

label {
        padding: 10px 0;
        position: relative;
    }

Add some padding-top and padding-bottom instead of height.

Upvotes: 1

Pablo
Pablo

Reputation: 2854

I had a similar problem and solved it wrapping the label into a div and setting the following styles:

<div style="display: table; vertical-align: middle">
  <label style="display: table-cell;" ... > ... </label>
</div>

Upvotes: 7

Mike Pateras
Mike Pateras

Reputation: 15015

I came across this trying to add labels o some vertical radio boxes. I had to do this:

<%: Html.RadioButton("RadioGroup1", "Yes") %><label style="display:inline-block;padding-top:2px;">Yes</label><br />
<%: Html.RadioButton("RadioGroup1", "No") %><label style="display:inline-block;padding-top:3px;">No</label><br />
<%: Html.RadioButton("RadioGroup1", "Maybe") %><label style="display:inline-block;padding-top:4px;">Maybe</label><br />

This gets them to display properly, where the label is centered on the radio button, though I had to increment the top padding with each line, as you can see. The code isn't pretty, but the result is.

Upvotes: 2

Robert Cabri
Robert Cabri

Reputation: 3981

To do this you should alter the vertical-align property of the input.

<dd><label class="<?=$email_confirm_class;?>" style="text-align:right; padding-right:3px">Confirm Email</label><input class="text" type="text" style="vertical-align: middle; border:none;" name="email_confirm" id="email_confirm" size="18" value="<?=$_POST['email_confirm'];?>" tabindex="4" /> *</dd>

Here is a more complete version. It has been tested in IE 8 and it works. see the difference by removing the vertical-align: middle from the input:

<html><head></head><body><dl><dt>test</dt><dd><label class="test" style="text-align:right; padding-right:3px">Confirm Email</label><input class="text" type="text" style="vertical-align: middle; font-size: 22px" name="email_confirm" id="email_confirm" size="28" value="test" tabindex="4" /> *</dd></dl></body></html>

Upvotes: 0

DisgruntledGoat
DisgruntledGoat

Reputation: 72510

Vertical alignment only works with inline or inline-block elements, and it's only relative to other inline[-block] elements. Because you float the label, it becomes a block element.

The simplest solution in your case is to set the label to display: inline-block and add vertical-align: middle to the labels and the inputs. (You might find that the height of the text is such that vertical align won't make any difference anyway.)

Upvotes: 43

Guffa
Guffa

Reputation: 700222

The vertical-align style is used in table cells, so that won't do anything for you here.

To align the labels to the input boxes, you can use line-height:

line-height: 25px;

Upvotes: 17

peirix
peirix

Reputation: 37741

This is what I usually do to "vertical align" text inside labels:

label {
   display: block;
   float: left;
   padding-top: 2px; /*This needs to be modified to fit */
}

It won't scale very nicely, but it works.

Upvotes: 5

Wabbitseason
Wabbitseason

Reputation: 5691

Have you tried line-height? It won't solve your problems if there are multiple row labels, but it can be a quick solution.

Upvotes: 27

Related Questions