Bootstrap: 表单组中的垂直居中标签
Bootstrap: Vertically center label in form-group
我在水平表单中有一个表单组。在这个表单组中,右边的元素高于左边的元素。出于这个原因,我想将左侧元素在其行中垂直居中。例如:
<form class="form-horizontal">
<div class="form-group">
<label for="inputEmail3" class="col-sm-2 control-label">Email1</label>
<div class="col-sm-10"> <!-- higher element -->
<input type="email" class="form-control" id="inputEmail3" placeholder="Email">
<br>Random stuff
</div>
</div>
<div class="form-group">
<label for="inputEmail3" class="col-sm-2 control-label">Email2</label>
<div class="col-sm-10">
<input type="email" class="form-control" id="inputEmail3" placeholder="Email">
</div>
</div>
</form>
Email1
当前显示在其自身行的顶部,如 this plunker snippet.
中所示
编辑:为了阐明我的意图,这是当前状态:
这就是我想要的(蓝色区域就是前面提到的"row"):
如果您只是想让 label1 像您的图像一样下拉,您不能只添加一个 class 给它一些 padding-top 吗?喜欢这个 jsfiddle
不清楚您是要全部下拉还是仅 label1。
CSS
.label1{padding-top:35px !important}
HTML
<form class="form-horizontal">
<div class="form-group">
<label for="inputEmail3" class="label1 col-sm-2 control-label">Email1</label>
<div class="col-sm-10"> <!-- higher element -->
<input type="email" class="form-control" id="inputEmail3" placeholder="Email">
<br>Random stuff
</div>
</div>
<div class="form-group">
<label for="inputEmail3" class="col-sm-2 control-label">Email2</label>
<div class="col-sm-10">
<input type="email" class="form-control" id="inputEmail3" placeholder="Email">
</div>
</div>
</form>
你可以这样做:
.form-horizontal .form-group {
transform-style: preserve-3d;
}
.form-horizontal .vertically-aligned-label {
position: relative;
top: 50%;
transform: translateY(50%);
}
您可以将行高设置为等于使用 CSS 的高度。
另外,不要重复域 ID,您只能使用 id="inputEmail3" 一次。我更改了两个 ID 以适合文本。
CSS
label[for="inputEmail3"]{
height: 74px;
line-height: 74px;
}
HTML
<form class="form-horizontal">
<div class="form-group">
<label for="inputEmail3" class="col-sm-2 control-label">Email1</label>
<div class="col-sm-10"> <!-- higher element -->
<input type="email" class="form-control" id="inputEmail1" placeholder="Email">
<br>Random stuff
</div>
</div>
<div class="form-group">
<label for="inputEmail3" class="col-sm-2 control-label">Email2</label>
<div class="col-sm-10">
<input type="email" class="form-control" id="inputEmail2" placeholder="Email">
</div>
</div>
</form>
如果您准备放弃对某些 "old" 浏览器的支持,您可以使用 flexbox 功能(参见 caniuse.com flex)
<div class="form-group flex-group">
<label for="inputEmail3" class="col-sm-2 control-label">Email1</label>
<div class="col-sm-10">
<input type="email" class="form-control" id="inputEmail3" placeholder="Email">
<br>Random stuff
</div>
</div>
@media (min-width: 768px) {
.flex-group {
display: -webkit-flex;
display: flex;
-webkit-align-items: center;
align-items: center;
}
.form-horizontal .flex-group .control-label {
padding-top: 0;
}
}
如果在小型设备上查看,您还需要控制它,因为标签将位于输入的顶部。
我添加了更多内容 bootstrap 来为您介绍这一点。
见此Fiddle.
<div class="container block ">
<div class="col-md-6 col-md-offset-3 col-sm-7 col-sm-offset-2 col-xs-11 col-xs-offset-0">
<form class="form-horizontal">
<div class="row block bg-info form-group">
<label for="inputEmail3" class="label1 col-sm-2 col-xs-2 control-label">Email1</label>
<div class="col-md-8 col-sm-9 col-xs-9 col-xs-push-1"> <!-- higher element -->
<input type="email" class="form-control" id="inputEmail3" placeholder="Email">
<br>Random stuff
<br>Random stuff
<br>Random stuff
</div>
</div>
<div class="row block bg-info form-group">
<label for="inputEmail3" class="label2 col-sm-2 col-xs-2 control-label">Email2</label>
<div class="col-md-8 col-sm-9 col-xs-9 col-xs-push-1">
<input type="email" class="form-control" id="inputEmail3" placeholder="Email">
</div>
</div>
</form>
</div>
</div>
我在水平表单中有一个表单组。在这个表单组中,右边的元素高于左边的元素。出于这个原因,我想将左侧元素在其行中垂直居中。例如:
<form class="form-horizontal">
<div class="form-group">
<label for="inputEmail3" class="col-sm-2 control-label">Email1</label>
<div class="col-sm-10"> <!-- higher element -->
<input type="email" class="form-control" id="inputEmail3" placeholder="Email">
<br>Random stuff
</div>
</div>
<div class="form-group">
<label for="inputEmail3" class="col-sm-2 control-label">Email2</label>
<div class="col-sm-10">
<input type="email" class="form-control" id="inputEmail3" placeholder="Email">
</div>
</div>
</form>
Email1
当前显示在其自身行的顶部,如 this plunker snippet.
编辑:为了阐明我的意图,这是当前状态:
这就是我想要的(蓝色区域就是前面提到的"row"):
如果您只是想让 label1 像您的图像一样下拉,您不能只添加一个 class 给它一些 padding-top 吗?喜欢这个 jsfiddle
不清楚您是要全部下拉还是仅 label1。
CSS
.label1{padding-top:35px !important}
HTML
<form class="form-horizontal">
<div class="form-group">
<label for="inputEmail3" class="label1 col-sm-2 control-label">Email1</label>
<div class="col-sm-10"> <!-- higher element -->
<input type="email" class="form-control" id="inputEmail3" placeholder="Email">
<br>Random stuff
</div>
</div>
<div class="form-group">
<label for="inputEmail3" class="col-sm-2 control-label">Email2</label>
<div class="col-sm-10">
<input type="email" class="form-control" id="inputEmail3" placeholder="Email">
</div>
</div>
</form>
你可以这样做:
.form-horizontal .form-group {
transform-style: preserve-3d;
}
.form-horizontal .vertically-aligned-label {
position: relative;
top: 50%;
transform: translateY(50%);
}
您可以将行高设置为等于使用 CSS 的高度。 另外,不要重复域 ID,您只能使用 id="inputEmail3" 一次。我更改了两个 ID 以适合文本。
CSS
label[for="inputEmail3"]{
height: 74px;
line-height: 74px;
}
HTML
<form class="form-horizontal">
<div class="form-group">
<label for="inputEmail3" class="col-sm-2 control-label">Email1</label>
<div class="col-sm-10"> <!-- higher element -->
<input type="email" class="form-control" id="inputEmail1" placeholder="Email">
<br>Random stuff
</div>
</div>
<div class="form-group">
<label for="inputEmail3" class="col-sm-2 control-label">Email2</label>
<div class="col-sm-10">
<input type="email" class="form-control" id="inputEmail2" placeholder="Email">
</div>
</div>
</form>
如果您准备放弃对某些 "old" 浏览器的支持,您可以使用 flexbox 功能(参见 caniuse.com flex)
<div class="form-group flex-group">
<label for="inputEmail3" class="col-sm-2 control-label">Email1</label>
<div class="col-sm-10">
<input type="email" class="form-control" id="inputEmail3" placeholder="Email">
<br>Random stuff
</div>
</div>
@media (min-width: 768px) {
.flex-group {
display: -webkit-flex;
display: flex;
-webkit-align-items: center;
align-items: center;
}
.form-horizontal .flex-group .control-label {
padding-top: 0;
}
}
如果在小型设备上查看,您还需要控制它,因为标签将位于输入的顶部。
我添加了更多内容 bootstrap 来为您介绍这一点。
见此Fiddle.
<div class="container block ">
<div class="col-md-6 col-md-offset-3 col-sm-7 col-sm-offset-2 col-xs-11 col-xs-offset-0">
<form class="form-horizontal">
<div class="row block bg-info form-group">
<label for="inputEmail3" class="label1 col-sm-2 col-xs-2 control-label">Email1</label>
<div class="col-md-8 col-sm-9 col-xs-9 col-xs-push-1"> <!-- higher element -->
<input type="email" class="form-control" id="inputEmail3" placeholder="Email">
<br>Random stuff
<br>Random stuff
<br>Random stuff
</div>
</div>
<div class="row block bg-info form-group">
<label for="inputEmail3" class="label2 col-sm-2 col-xs-2 control-label">Email2</label>
<div class="col-md-8 col-sm-9 col-xs-9 col-xs-push-1">
<input type="email" class="form-control" id="inputEmail3" placeholder="Email">
</div>
</div>
</form>
</div>
</div>