3.5.2 内联表单

有的时候,我们可能需要一个所有控件都在一行中的表单,比如图3-21所示的登录。要实现这种内联样式效果,只需要在普通的form元素上应用一个.form-inline样式,即可将表单内的元素设置为内联样式。

3.5.2 内联表单 - 图1 图3-21 内联表单运行效果

水平线上的唯一因素就是要控制元素的显示方式为display: inline-block,所以只需要为相应的子元素设置display属性即可。但需要注意的是,该.form-inline样式只能在大于768像素的浏览器上才能应用。源码如下:

  1. // 源码1927行
  2. @media (min-width: 768px) { /* 大于768像素的浏览器才生效*/
  3. .form-inline .form-group {
  4. display: inline-block; /* 内联样式显示*/
  5. margin-bottom: 0;
  6. vertical-align: middle;
  7. }
  8. .form-inline .form-control {
  9. display: inline-block;
  10. /* 内联样式显示,但由于form-control样式设置了100%的宽度,所以没什么用*/
  11. width: auto;
  12. vertical-align: middle;
  13. }
  14. .form-inline .radio,
  15. .form-inline .checkbox {
  16. display: inline-block;
  17. padding-left: 0;
  18. margin-top: 0; /* 确保上下居中*/
  19. margin-bottom: 0;
  20. vertical-align: middle;
  21. }
  22. .form-inline .radio input[type="radio"],
  23. .form-inline .checkbox input[type="checkbox"] {
  24. float: none; /* 不使用浮动定位*/
  25. margin-left: 0;
  26. }
  27. .form-inline .has-feedback .form-control-feedback { top: 0; }
  28. }

要注意,由于默认的样式为.form-control,且其input、select和textarea的宽度都是100%,所以在使用内联表单的时候是无效的,需要对这些控件元素单独设置宽度width,或者外面再加上一层带有.form-group样式的div元素。示例如下:

  1. <form class="form-inline">
  2. <div class="form-group">
  3. <input type="text" class="form-control" placeholder="请输入你的用户名">
  4. </div>
  5. <div class="form-group">
  6. <input type="text" class="form-control" placeholder="请输入你的密码">
  7. </div>
  8. <div class="checkbox">
  9. <label><input type="checkbox">记住密码</label>
  10. </div>
  11. <button type="submit" class="btn btn-default">登录</button>
  12. </form>

但这种情况下,如果再设置一个label的话,input又换行了。所以如果非要label的话,那就只能在input所在div元素的上边再加一个div元素用于包含label标签。比如:

  1. <div class="form-group">
  2. <label>用户名:</label>
  3. </div>
  4. <div class="form-group">
  5. <input type="text" class="form-control" placeholder="请输入你的用户名">
  6. </div>

注意

如果没有为每个输入控件设置label,屏幕阅读器将无法正确识别。对于这种内联表单,可以通过为label设置.sr-only样式将其隐藏。比如:

  1. <div class="form-group">
  2. <label class="sr-only" for="account">登录用户名</label>
  3. <input type="text" class="form-control" id="account" placeholder="请输入你的用户名">
  4. </div>