[英]Vertically align label with input
我目前正在将旧的HTML表单转换为不使用表格。 标签需要固定的宽度,我已经使用本网站的答案实现了这一点。 目前的代码如下:
HTML
<div id="form">
<label for="field1">Name </label>
<input type="text" id="field1" value="default name" />
</div>
CSS
label {
float: left;
width: 50px;
white-space: nowrap;
}
input {
display: block;
overflow: hidden;
width: *;
}
#field1 {
width: 150px;
}
目前,标签在顶部垂直对齐。 如何将标签和字段垂直对齐到中心?
编辑 :我得到了很多答案,基本上通过指定的像素数将标签填充到正确的位置。 我不想这样做,因为它基本上是硬编码而不是真正的垂直对齐到中间。
根据我在这里收到的一些建议,我已经清理了一些代码。 请参阅以上编辑的代码。
我试过vertical-align: middle;
在label
但它不起作用。 请注意,用户的平台将是IE。
如果我做对了,你希望label
和input
垂直居中对齐WRT而不是页面。 为此,有几种方法。
如果您想使用CSS世界中的新东西并准备好未来,请使用flexbox。 示例 -
.fieldHeading { width: 50px; } .fieldSpan { overflow: hidden; } #field1 { width: 150px; } /*flexbox approach. * height and background added for clarity. */ #form { height: 100px; background: #bada55; display: flex; align-items: center; }
<div id="form"> <label for="field1" class="fieldHeading">Name </label> <span class="fieldSpan"><input type="text" id="field1" value="default name" /></span> </div>
vertical-align
方式 当一行上的label
和input
作为inline-block
元素时,这很有效。 示例 -
.fieldHeading { width: 50px; vertical-align:middle; } .fieldSpan { overflow: hidden; vertical-align:middle; } #field1 { width: 150px; }
<div id="form"> <label for="field1" class="fieldHeading">Name </label> <span class="fieldSpan"><input type="text" id="field1" value="default name" /></span> </div>
height
和line-height
Duo 这也很有效,但如果你的标签很大并且有可能包裹成多行,那就太可怕了。 示例 -
.fieldHeading { width: 50px; } .fieldSpan { overflow: hidden; } #field1 { width: 150px; } /*line-height and height be same for parent * background added for clarity. */ #form { line-height: 40px; height: 40px; background: #bada55; }
<div id="form"> <label for="field1" class="fieldHeading">Name </label> <span class="fieldSpan"><input type="text" id="field1" value="default name" /></span> </div>
我希望这些不仅可以解决这个问题,还可以解决所有其他垂直对齐问题。
您可以使用line-height
或margin-bottom
直到获得满意的结果。
例
#form label {
line-height:1.4;
margin-bottom:2px;
}
这会将选择器应用于表单下的所有标签。 如果您想要具体,可以使用特定的css类,如.fieldHeading
而不是#form label
。
你需要这样的吗?
<div id="form">
<div class="valign">
<label for="field1" class="fieldHeading">Name </label>
<span class="fieldSpan"><input type="text" id="field1" value="default name" /></span>
</div>
</div>
<style>
.fieldHeading {
float: left;
width: 50px;
}
.fieldSpan {
display: block;
overflow: hidden;
width: *;
}
#field1 {
width: 150px;
}
#form {display: table;height:100%;}
.valign {
display: table-cell;
vertical-align: middle;
}
</style>
我认为,解决方案边缘底部,使用你想要的任何px
.fieldHeading {
float: left;
width: 50px;
margin-bottom: 3px;
}
采用:
.fieldHeading {
display: inline-block;
width: 50px;
vertical-align: middle;
}
#field1 { width: 150px; }
设span为内联类型。
你真的不需要用于封闭输入元素的span。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.