3.5.2 内联表单
有的时候,我们可能需要一个所有控件都在一行中的表单,比如图3-21所示的登录。要实现这种内联样式效果,只需要在普通的form元素上应用一个.form-inline样式,即可将表单内的元素设置为内联样式。
图3-21 内联表单运行效果
水平线上的唯一因素就是要控制元素的显示方式为display: inline-block,所以只需要为相应的子元素设置display属性即可。但需要注意的是,该.form-inline样式只能在大于768像素的浏览器上才能应用。源码如下:
- // 源码1927行
- @media (min-width: 768px) { /* 大于768像素的浏览器才生效*/
- .form-inline .form-group {
- display: inline-block; /* 内联样式显示*/
- margin-bottom: 0;
- vertical-align: middle;
- }
- .form-inline .form-control {
- display: inline-block;
- /* 内联样式显示,但由于form-control样式设置了100%的宽度,所以没什么用*/
- width: auto;
- vertical-align: middle;
- }
- .form-inline .radio,
- .form-inline .checkbox {
- display: inline-block;
- padding-left: 0;
- margin-top: 0; /* 确保上下居中*/
- margin-bottom: 0;
- vertical-align: middle;
- }
- .form-inline .radio input[type="radio"],
- .form-inline .checkbox input[type="checkbox"] {
- float: none; /* 不使用浮动定位*/
- margin-left: 0;
- }
- .form-inline .has-feedback .form-control-feedback { top: 0; }
- }
要注意,由于默认的样式为.form-control,且其input、select和textarea的宽度都是100%,所以在使用内联表单的时候是无效的,需要对这些控件元素单独设置宽度width,或者外面再加上一层带有.form-group样式的div元素。示例如下:
- <form class="form-inline">
- <div class="form-group">
- <input type="text" class="form-control" placeholder="请输入你的用户名">
- </div>
- <div class="form-group">
- <input type="text" class="form-control" placeholder="请输入你的密码">
- </div>
- <div class="checkbox">
- <label><input type="checkbox">记住密码</label>
- </div>
- <button type="submit" class="btn btn-default">登录</button>
- </form>
但这种情况下,如果再设置一个label的话,input又换行了。所以如果非要label的话,那就只能在input所在div元素的上边再加一个div元素用于包含label标签。比如:
- <div class="form-group">
- <label>用户名:</label>
- </div>
- <div class="form-group">
- <input type="text" class="form-control" placeholder="请输入你的用户名">
- </div>
注意
如果没有为每个输入控件设置label,屏幕阅读器将无法正确识别。对于这种内联表单,可以通过为label设置.sr-only样式将其隐藏。比如:
- <div class="form-group">
- <label class="sr-only" for="account">登录用户名</label>
- <input type="text" class="form-control" id="account" placeholder="请输入你的用户名">
- </div>