14

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

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;
}

目前,标签(左侧)有点靠近输入字段的顶部(右侧)。我想将它们垂直对齐,以便标签位于输入字段的中间。

我试过垂直对齐,但它不起作用。请帮助我尝试找出问题所在。谢谢。

4

5 回答 5

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>

于 2013-03-04T04:16:37.740 回答
10

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

只需包装父元素display-flex

.display-flex {
    display: flex;
    align-items: center;
}
于 2017-01-16T10:47:08.280 回答
1

html:

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

<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;
}

演示

于 2013-03-04T03:06:43.077 回答
0

您可以将<label>元素包含在跨度中并将跨度设置vertical-alignmiddle

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/

于 2013-03-04T03:02:56.577 回答
0

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

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>

我放&nbsp;是因为它似乎是对齐不同输入类型的最简单方法;但是,边距工作得很好。

于 2017-03-30T01:17:01.580 回答