4.7.1 基础导航条
基础导航条是在普通导航的基础上进行改进实现的,但实现原理复杂得多。我们先来看一个普通的例子,首先在普通导航的ul元素上应用.navbar-nav样式,然后在外部父元素容器上应用.navbar样式以及.navbar-default样式即可实现。示例代码如下:
- <nav class="navbar navbar-default" role="navigation">
- <div class="navbar-header">
- <a class="navbar-brand" href="#">Brand</a>
- </div>
- <ul class="nav navbar-nav">
- <li class="active"><a href="#">active</a></li>
- <li><a href="#">Link</a></li>
- <li class="disabled"><a href="#">disabled</a></li>
- <li><a href="#">Link</a></li>
- </ul>
- </nav>
运行效果如图4-39所示。上述代码里有一个.navbar-brand样式的链接,表示该元素是导航条的名称,起到提醒的目的。
图4-39 基础导航条运行效果
注意
要增强可访问性,一定要给每个导航条加上role="navigation"。
在讲解源码之前,我们先大概说一下整个navbar的原理。在整个设计中,.nav、.navbar、
.navbar-nav等是控制大小、内外边距、行距等方面的样式,而颜色则是由.navbar-default和.navbar-inverse这两大风格所控制(本节会讲述.navbar-default风格样式,而.navbar-inverse会放到另一小节讲)。另外由于Bootstrap新版是一个移动先行的前端框架,所以该导航条不仅支持普通的宽屏浏览器,也支持手机的窄屏浏览器,也就是说上述所有的样式,在窄屏和宽屏下都有不同的设置(通过媒体查询实现的)。所以在讲解的时候,先讲解普通的宽屏,然后在另外一个小节“响应式导航条”里再单独讲解窄屏下的实现方式。
.navbar样式的主要功能是设置左右padding、圆角等,但不设置与颜色相关的内容,因为与颜色相关的内容是由.navbar-default样式来控制的。.navbar样式主要源码如下:
- // 源码3649行
- .navbar {
- position: relative; /* 相对定位 */
- min-height: 50px; /* 最小高度 */
- margin-bottom: 20px; /* 底部的外边距 */
- border: 1px solid transparent; /* 边框透明 */
- }
- @media (min-width: 768px) {
- .navbar { border-radius: 4px; /* 宽屏时,才设置圆角 */ }
- }
- @media (min-width: 768px) {
- .navbar-header { float: left; /* 宽屏时,header为左浮动 */ }
- }
.navbar-nav样式,是在原有.nav样式的基础上(nav和navbar-nav要一起使用),重新调整设置了菜单项链接的浮动和内外边距的设置(不包括颜色,颜色依然是由.navbar-default和.navbar-inverse两大样式设置)。下面是.navbar-nav样式的源码:
- // 源码3822行
- @media (min-width: 768px) { /*宽屏情况下*/
- .navbar-nav {
- float: left; /* 左浮动*/
- margin: 0;
- }
- .navbar-nav > li {
- float: left; /*菜单项左浮动*/
- }
- .navbar-nav > li > a { /*加大上下方向的内边距*/
- padding-top: 15px;
- padding-bottom: 15px;
- }
- .navbar-nav.navbar-right:last-child {
- margin-right: -15px; /*向右对齐时最后一个子元素,设置负的margin值*/
- }
- }
而作为提醒功能的navbar-brand样式,则主要是加大了字体设置,并控制最大宽度显示。
- // 源码3746行
- .navbar-brand {
- float: left; /*左浮动*/
- height: 20px;
- padding: 15px 15px;
- font-size: 18px;
- line-height: 20px; /*增大行间距*/
- }
- .navbar-brand:hover,
- .navbar-brand:focus {
- text-decoration: none;
- }
基础的导航条功能,不仅能看到各种各样的菜单定义,还包括当前活动的菜单(active样式)、当前已禁用的菜单(disabled样式),下拉菜单也可以放在里面,如图4-40所示。这是一个比较复杂的基础导航条,我们就这个效果,来一步一步分析.navbar-default样式风格是如何定义的。
图4-40 基础导航条的综合应用
完整的.navbar-default风格的源码和注释如下,请大家一定要仔细看注释,并对照查看示例效果。
- // 源码3944行
- .navbar-default { /*设置背景颜色和边框颜色*/
- background-color: #f8f8f8;
- border-color: #e7e7e7;
- }
- .navbar-default .navbar-brand { color: #777; /*设置navbar-brand的文本颜色*/}
- .navbar-default .navbar-brand:hover,
- .navbar-default .navbar-brand:focus {
- color: #5e5e5e; /*navbar-brand移动或焦点时的文本颜色和背景颜色*/
- background-color: transparent;
- }
- .navbar-default .navbar-text { color: #777; /*设置navbar-text的文本颜色,下节讲*/}
- .navbar-default .navbar-nav > li > a { color: #777; /*设置菜单项链接的文本颜色*/}
- .navbar-default .navbar-nav > li > a:hover,
- .navbar-default .navbar-nav > li > a:focus {
- color: #333; /*设置菜单项链接在移动或焦点时的文本颜色*/
- background-color: transparent;
- }
- .navbar-default .navbar-nav > .active > a,
- .navbar-default .navbar-nav > .active > a:hover,
- .navbar-default .navbar-nav > .active > a:focus {
- color: #555; /*设置当前活动的菜单项链接的文本颜色和背景颜色*/
- background-color: #e7e7e7;
- }
- .navbar-default .navbar-nav > .disabled > a,
- .navbar-default .navbar-nav > .disabled > a:hover,
- .navbar-default .navbar-nav > .disabled > a:focus {
- color: #ccc; /*设置当前已禁用的菜单项链接的文本颜色和背景颜色*/
- background-color: transparent;
- }
- .navbar-default .navbar-toggle { border-color: #ddd; /*响应式按钮的边框颜色,
- 在4.7.6一节会讲*/}
- .navbar-default .navbar-toggle:hover,
- .navbar-default .navbar-toggle:focus {
- background-color: #ddd; /*响应式按钮在移动或者焦点时的背景颜色*/
- }
- .navbar-default .navbar-toggle .icon-bar { background-color: #888;
- /*响应式按钮里的icon的背景颜色*/}
- .navbar-default .navbar-collapse,
- .navbar-default .navbar-form {
- border-color: #e7e7e7; /*折叠边框或者表单样式的边框颜色*/
- }
- .navbar-default .navbar-nav > .open > a,
- .navbar-default .navbar-nav > .open > a:hover,
- .navbar-default .navbar-nav > .open > a:focus {
- color: #555; /*下拉菜单打开时,链接项的文本颜色和背景颜色*/
- background-color: #e7e7e7;
- }
- @media (max-width: 767px) {
- .navbar-default .navbar-nav .open .dropdown-menu > li > a {
- color: #777; /*下拉菜单打开时,其里面的子菜单项链接的文本颜色*/
- }
- .navbar-default .navbar-nav .open .dropdown-menu > li > a:hover,
- .navbar-default .navbar-nav .open .dropdown-menu > li > a:focus {
- color: #333; /*下拉菜单打开时,其里面的子菜单项链接的文本颜色(移动或焦点时)*/
- background-color: transparent;
- }
- .navbar-default .navbar-nav .open .dropdown-menu > .active > a,
- .navbar-default .navbar-nav .open .dropdown-menu > .active > a:hover,
- .navbar-default .navbar-nav .open .dropdown-menu > .active > a:focus {
- color: #555; ; /*下拉菜单打开时,其里面的当前活动的子菜单项链接的文本颜色*/
- background-color: #e7e7e7;
- }
- .navbar-default .navbar-nav .open .dropdown-menu > .disabled > a,
- .navbar-default .navbar-nav .open .dropdown-menu > .disabled > a:hover,
- .navbar-default .navbar-nav .open .dropdown-menu > .disabled > a:focus {
- color: #ccc; /*下拉菜单打开时,里面的当前已禁用的子菜单项链接的文本颜色*/
- background-color: transparent;
- }
- }
- .navbar-default .navbar-link { color: #777; /*内部链接的文本颜色*/ }
- .navbar-default .navbar-link:hover { color: #333; /*内部链接在鼠标移动时的文本颜色*/ }