4.7.2 导航条中的表单
很多情况下,我们想把表单元素放在导航条里,以起到导航效果,比如支持搜索等。Bootstrap专门提供了一个附件样式.navbar-form来实现图4-41所示的效果。
图4-41 表单在导航条中的运行效果
使用方式是,在.navbar容器内放置form元素,然后在form元素上应用.navbar-form样式即可。同时左右浮动的样式(.navbar-left和.navbar-right)也可以使用,以便控制左右对齐。示例如下:
- <nav class="navbar navbar-default" role="navigation">
- <div class="navbar-header"><a class="navbar-brand" href="#">Brand</a></div>
- <form class="navbar-form navbar-left" role="search">
- <div class="form-group"><input type="text" class="form-control"
- placeholder="Search"></div>
- <button type="submit" class="btn btn-default">左按钮</button>
- </form>
- <form class="navbar-form navbar-right" role="search">
- <div class="form-group"><input type="text" class="form-control"
- placeholder="Search"></div>
- <button type="submit" class="btn btn-default">右按钮</button>
- </form>
- </nav>
在源码实现上,主要是确保所有的表单控件元素都设置成内联块(inline-block)的形式显示,并且确保特殊的radio和checkbox元素垂直居中即可。源码如下:
- // 源码3846行
- .navbar-form {
- padding: 10px 15px;
- margin-top: 8px; /* 减少margin值 */
- margin-right: -15px;
- margin-bottom: 8px;
- margin-left: -15px;
- border-top: 1px solid transparent;
- border-bottom: 1px solid transparent;
- -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, .1), 0 1px 0 rgba(255,
- 255, 255, .1);
- box-shadow: inset 0 1px 0 rgba(255, 255, 255, .1), 0 1px 0 rgba(255,
- 255, 255, .1);
- }
- @media (min-width: 768px) { /* input、select、textarea、radio、checkbox都设置为
- 内联块显示 */
- .navbar-form .form-group { display: inline-block; margin-bottom: 0;
- vertical-align: middle; }
- .navbar-form .form-control { display: inline-block; width: auto;
- vertical-align: middle; }
- .navbar-form .control-label { margin-bottom: 0; vertical-align: middle; }
- .navbar-form .radio,
- .navbar-form .checkbox {
- display: inline-block; padding-left: 0;
- margin-top: 0; margin-bottom: 0; vertical-align: middle;
- }
- .navbar-form .radio input[type="radio"],
- .navbar-form .checkbox input[type="checkbox"] {
- float: none; margin-left: 0;
- }
- .navbar-form .has-feedback .form-control-feedback { top: 0; }
- }
- @media (max-width: 767px) { /* 窄屏浏览器下,设置底部外边距*/
- .navbar-form .form-group { margin-bottom: 5px; }
- }
- @media (min-width: 768px) { /* 普通宽屏浏览器下*/
- .navbar-form {
- width: auto;
- padding-top: 0; /* 去除上下内边距*/
- padding-bottom: 0;
- margin-right: 0; /*去除左右外边距*/
- margin-left: 0;
- border: 0;
- -webkit-box-shadow: none; /* 取消阴影*/
- box-shadow: none;
- }
- .navbar-form.navbar-right:last-child {
- margin-right: -15px; /* 最后一个元素,设置负的margin,以便对齐*/
- }
- }
注意
如果在表单内没有为输入框添加label标签,屏幕阅读器将会遇到问题。对于导航条内的表单,可以通过.sr-only样式来隐藏label标签。