我希望我的标签与我的输入字段垂直对齐

时间:2013-03-04 02:51:29

标签: html css forms input label

到目前为止,我的工作是:

http://jsfiddle.net/2RCBQ/

<div id="main">
<form>
    <label>First Name:<input type="text" id="firstname"></label><br/>
    <label>Last Name:<input type="text" id="lastname"></label><br>
    <label>E-Mail:<input type="text" id="email"></label><br/>
    <label>Phone:<input type="text" id="phone"></label><br/>
</form>
</div>

CSS

#main {
    width:300px;

}  

#main input {
    float:right;
    display:inline;
}

#main label {
    color: #2D2D2D;
    font-size: 15px;
    width:250px;
    display: block;
}

目前,标签(左侧)有点朝向输入字段的顶部(右侧)。我想垂直对齐它们,因此在输入字段的中间是标签。

我尝试过纵向对齐,但它不起作用。请帮我解决问题。感谢。

5 个答案:

答案 0 :(得分:19)

我觉得嵌套<span>会增加很多不必要的标记。

display: inline-block<label><input>坐在一起,就像float: right一样,但不会破坏文档流程。此外,如果您(或用户的屏幕阅读器)想要更改font-size,它会更加灵活,并允许更多地控制对齐。

修改:jsfiddle

label, input {
    display: inline-block;
    vertical-align: baseline;
    width: 125px;
}

label {
    color: #2D2D2D;
    font-size: 15px;
}

form, input {
    box-sizing: border-box;
    -moz-box-sizing: border-box;
    -webkit-box-sizing: border-box;
}

form {
    width: 300px;
}
<form>
    <label for="firstname">First Name:</label><input type="text" id="firstname">
    <label for="lastname">Last Name:</label><input type="text" id="lastname">
    <label for="email">E-Mail:</label><input type="text" id="email">
    <label for="phone">Phone:</label><input type="text" id="phone">
</form>

答案 1 :(得分:5)

您可以使用flexbox css进行垂直对齐。

只需包装父元素display-flex

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

答案 2 :(得分:1)

HTML:

我在标签中添加了span,以便我们可以添加特定于文本标签的样式:

<div id="main">
    <form>
        <label><span>First Name:</span><input type="text" id="firstname"></label><br/>
        <label><span>Last Name:</span><input type="text" id="lastname"></label><br>
        <label><span>E-Mail:</span><input type="text" id="email"></label><br/>
        <label><span>Phone:</span><input type="text" id="phone"></label><br/>
    </form>
</div>

的CSS:

#main label span {
    position:relative;
    top:2px;
}

demo

答案 3 :(得分:0)

您可以将<label>元素括在一个范围内,并将范围vertical-align设置为middle

<强> HTML

<div id="main">
    <form> <span><label>First Name:<input type="text" id="firstname" /></label></span>
        <br/> <span><label>Last Name:<input type="text" id="lastname" /></label></span>
        <br/> <span><label>E-Mail:<input type="text" id="email" /></label></span>
        <br/> <span><label>Phone:<input type="text" id="phone" /></label></span>
        <br/>
    </form>
</div>

<强> CSS

#main {
    width:300px;
}
#main input {
    float:right;
    display:inline;
}
#main label {
    color: #2D2D2D;
    font-size: 15px;
}
#main span {
    display: table-cell;
    vertical-align: middle;
    width:250px;
}

http://jsfiddle.net/2RCBQ/2/

答案 4 :(得分:0)

我认为以下是适用于所有输入类型的唯一方法

UserController->deleteUserAction()
label { display: flex; align-items: center; }
input { margin: 0; padding: 0; }

我放<label><input type="checkbox">&nbsp; HTML</label> <label><input type="radio">&nbsp; JS</label> <label>CSS &nbsp;<input type="text"></label> <label>Framework &nbsp; <select><option selected>none</option></select> </label>因为它似乎是对齐不同输入类型的最简单方法;但是,保证金工作得很好。