Bootstrap源码解读导航条(7)
源码解读Bootstrap导航条
基础导航条
要制作一个基础导航条,要在制作导航的列表<ulclass="nav">基础上添加类名“navbar-nav”,然后在列表外部添加一个容器(div),并且使用类名“navbar”和“navbar-default”。例如:
<divclass="navbarnavbar-default"role="navigation"> <ulclass="navnavbar-nav"> <liclass="active"><ahref="##">首页</a></li> <li><ahref="##">网站内容</a></li> <li><ahref="##">关于我们</a></li> </ul> </div>
“.navbar”样式的主要功能就是设置左右padding和圆角等效果,实现源码如下:
.navbar{
position:relative;
min-height:50px;
margin-bottom:20px;
border:1pxsolidtransparent;
}
导航条的颜色都是通过“.navbar-default”来进行控制,实现源码如下:
.navbar-default{
background-color:#f8f8f8;
border-color:#e7e7e7;
}
“.navbar-nav”样式是在导航“.nav”的基础上重新调整了菜单项的浮动与内外边距。而颜色和其他样式是通过配合父容器“navbar-default”来一起实现。实现源码如下:
.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-header”和“navbar-brand”来实现,例如:
<divclass="navbarnavbar-default"role="navigation"> <divclass="navbar-header"> <ahref="##"class="navbar-brand">标题</a> </div> <ulclass="navnavbar-nav"> ... </ul> </div>
主要是加大了字体设置,并且设置了最大宽度,实现源码如下:
.navbar-brand{
float:left;
height:50px;
padding:15px15px;
font-size:18px;
line-height:20px;
}
.navbar-brand:hover,
.navbar-brand:focus{
text-decoration:none;
}
.navbar-brand>img{
display:block;
}
@media(min-width:768px){
.navbar>.container.navbar-brand,
.navbar>.container-fluid.navbar-brand{
margin-left:-15px;
}
}
在默认导航条(navbar-default)下,对navbar-brand也做了颜色处理,实现源码如下:
.navbar-default.navbar-brand{
color:#777;
}
.navbar-default.navbar-brand:hover,
.navbar-default.navbar-brand:focus{
color:#5e5e5e;
background-color:transparent;
}
带表单的导航条
在navbar容器中放置一个带有“navbar-form”类名的表单,例如:
<divclass="navbarnavbar-default"role="navigation"> <ulclass="navnavbar-nav"> ... </ul> <formaction="##"class="navbar-formnavbar-left"rol="search"> <divclass="form-group"> <inputtype="text"class="form-control"placeholder="请输入关键词"/> </div> <buttontype="submit"class="btnbtn-default">搜索</button> </form> </div>
实现源码如下:
.navbar-form{
padding:10px15px;
margin-top:8px;
margin-right:-15px;
margin-bottom:8px;
margin-left:-15px;
border-top:1pxsolidtransparent;
border-bottom:1pxsolidtransparent;
-webkit-box-shadow:inset01px0rgba(255,255,255,.1),01px0rgba(255,255,255,.1);
box-shadow:inset01px0rgba(255,255,255,.1),01px0rgba(255,255,255,.1);
}
@media(min-width:768px){
.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.form-control-static{
display:inline-block;
}
.navbar-form.input-group{
display:inline-table;
vertical-align:middle;
}
.navbar-form.input-group.input-group-addon,
.navbar-form.input-group.input-group-btn,
.navbar-form.input-group.form-control{
width:auto;
}
.navbar-form.input-group>.form-control{
width:100%;
}
.navbar-form.control-label{
margin-bottom:0;
vertical-align:middle;
}
.navbar-form.radio,
.navbar-form.checkbox{
display:inline-block;
margin-top:0;
margin-bottom:0;
vertical-align:middle;
}
.navbar-form.radiolabel,
.navbar-form.checkboxlabel{
padding-left:0;
}
.navbar-form.radioinput[type="radio"],
.navbar-form.checkboxinput[type="checkbox"]{
position:relative;
margin-left:0;
}
.navbar-form.has-feedback.form-control-feedback{
top:0;
}
}
@media(max-width:767px){
.navbar-form.form-group{
margin-bottom:5px;
}
.navbar-form.form-group:last-child{
margin-bottom:0;
}
}
@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-left”可以让导航条里的表单左浮动,“navbar-right”为右浮动。实现源码如下:
@media(min-width:768px){
.navbar-left{
float:left!important;
}
.navbar-right{
float:right!important;
}
}
固定导航条
要将导航条固定在浏览器顶部或底部,只需要在制作导航条最外部容器navbar上追加对应的类名即可:
.navbar-fixed-top:导航条固定在浏览器窗口顶部
.navbar-fixed-bottom:导航条固定在浏览器窗口底部
例如:<divclass="navbarnavbar-defaultnavbar-fixed-top"role="navigation">...</div>
实现原理就是在navbar-fixed-top和navbar-fixed-bottom使用了position:fixed属性,并且设置navbar-fixed-top的top值为0,而navbar-fixed-bottom的bottom值为0。实现源码如下:
.navbar-fixed-top,
.navbar-fixed-bottom{
position:fixed;
right:0;
left:0;
z-index:1030;
}
@media(min-width:768px){
.navbar-fixed-top,
.navbar-fixed-bottom{
border-radius:0;
}
}
.navbar-fixed-top{
top:0;
border-width:001px;
}
.navbar-fixed-bottom{
bottom:0;
margin-bottom:0;
border-width:1px00;
}
不过我们可以发现,页面主内容顶部和底部都被固定导航条给遮住了。我们可以在body上加上样式:padding-top:70px;或padding-bottom:70px;来避免这种情况。
响应式导航条
响应式导航条比较复杂,宽屏是水平平铺显示,窄屏时收缩垂直显示,使用方法如下:
1.把在窄屏时需要折叠的内容包裹在带一个div内,并且为这个div追加“collapse”、“navbar-collapse”两个类名。最后为这个div添加一个class类名或者id名。
2.定制在窄屏时要显示的图标样式。
3.为button添加data-target=”.类名”或data-target=”#id名”,是类名还是id名由需要折叠的div来决定。
完整示例如下:
<divclass="navbarnavbar-default"role="navigation"> <divclass="navbar-header"> <!--.navbar-toggle样式用于toggle收缩的内容,即nav-collapsecollapse样式所在元素--> <buttonclass="navbar-toggle"type="button"data-toggle="collapse"data-target=".navbar-responsive-collapse"> <spanclass="sr-only">ToggleNavigation</span> <spanclass="icon-bar"></span> <spanclass="icon-bar"></span> <spanclass="icon-bar"></span> </button> <!--确保无论是宽屏还是窄屏,navbar-brand都显示--> <ahref="##"class="navbar-brand">Bootstrap中文网</a> </div> <!--屏幕宽度小于768px时,div.navbar-responsive-collapse容器里的内容都会隐藏,显示icon-bar图标,当点击icon-bar图标时,再展开。屏幕大于768px时,默认显示。--> <divclass="collapsenavbar-collapsenavbar-responsive-collapse"> <ulclass="navnavbar-nav"> <liclass="active"><ahref="##">Bootstrap2</a></li> <li><ahref="##">Bootstrap3</a></li> <li><ahref="##">Bootstrap4</a></li> <li><ahref="##">网站实例</a></li> </ul> </div> </div>
反色导航条
将navbar-deafult类名换成navbar-inverse即可。只是导航条的背景色和文本做了修改。
带页码的分页导航
在ul标签上加入pagination方法即可。例如:
<ulclass="pagination"> <li><ahref="#">«第一页</a></li> <li><ahref="#">2</a></li> <li><ahref="#">3</a></li> <liclass="active"><ahref="#">4</a></li> <li><ahref="#">5</a></li> <liclass="disabled"><ahref="#">最后一页»</a></li> </ul>
实现源码如下:
.pagination>.active>a,
.pagination>.active>span,
.pagination>.active>a:hover,
.pagination>.active>span:hover,
.pagination>.active>a:focus,
.pagination>.active>span:focus{
z-index:2;
color:#fff;
cursor:default;
background-color:#428bca;
border-color:#428bca;
}
.pagination>.disabled>span,
.pagination>.disabled>span:hover,
.pagination>.disabled>span:focus,
.pagination>.disabled>a,
.pagination>.disabled>a:hover,
.pagination>.disabled>a:focus{
color:#999;
cursor:not-allowed;
background-color:#fff;
border-color:#ddd;
}
在ul上追加“pagination-lg”可以让分页导航变大,“pagination-sm”可以让分页导航变小。实现源码如下:
.pagination-lg>li>a,
.pagination-lg>li>span{
padding:10px16px;
font-size:18px;
}
.pagination-lg>li:first-child>a,
.pagination-lg>li:first-child>span{
border-top-left-radius:6px;
border-bottom-left-radius:6px;
}
.pagination-lg>li:last-child>a,
.pagination-lg>li:last-child>span{
border-top-right-radius:6px;
border-bottom-right-radius:6px;
}
.pagination-sm>li>a,
.pagination-sm>li>span{
padding:5px10px;
font-size:12px;
}
.pagination-sm>li:first-child>a,
.pagination-sm>li:first-child>span{
border-top-left-radius:3px;
border-bottom-left-radius:3px;
}
.pagination-sm>li:last-child>a,
.pagination-sm>li:last-child>span{
border-top-right-radius:3px;
border-bottom-right-radius:3px;
}
翻页分页导航
为ul标签加入pager类即可。例如:
<ulclass="pager"> <li><ahref="#">«上一页</a></li> <li><ahref="#">下一页»</a></li> </ul>
实现源码如下:
.pager{
padding-left:0;
margin:20px0;
text-align:center;
list-style:none;
}
.pagerli{
display:inline;
}
.pagerli>a,
.pagerli>span{
display:inline-block;
padding:5px14px;
background-color:#fff;
border:1pxsolid#ddd;
border-radius:15px;
}
.pagerli>a:hover,
.pagerli>a:focus{
text-decoration:none;
background-color:#eee;
}
导航默认居中,如果要一个居左一个居右,可以在li分别上追加previous和next类名。实现源码如下:
.pager.next>a,
.pager.next>span{
float:right;
}
.pager.previous>a,
.pager.previous>span{
float:left;
}
本文系列教程整理到:Bootstrap基础教程专题中,欢迎点击学习。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。