1.本文目地:分析bootstrap导航栏及其响应式的实现方式,提升自身css水平

先贴一个bootstrap的导航栏模板

http://v3.bootcss.com/examples/navbar-fixed-top/

2.代码如下

  1. <nav class="navbar navbar-default navbar-fixed-top">
  2. <div class="container-fluid">
  3. <div class="navbar-header">
  4. <button type="button" class="navbar-toggle collapsed" data-toggle="collapse" data-target="#navbar" aria-expanded="false" aria-controls="navbar">
  5. <span class="sr-only">Toggle navigation</span>
  6. <span class="icon-bar"></span>
  7. <span class="icon-bar"></span>
  8. <span class="icon-bar"></span>
  9. </button>
  10. <a class="navbar-brand" href="#">Project name</a>
  11. </div>
  12. <div id="navbar" class="navbar-collapse collapse">
  13. <ul class="nav navbar-nav">
  14. <li class="active"><a href="#">Home</a></li>
  15. <li><a href="#">About</a></li>
  16. <li><a href="#">Contact</a></li>
  17. <li class="dropdown">
  18. <a href="#" class="dropdown-toggle" data-toggle="dropdown" role="button" aria-haspopup="true" aria-expanded="false">Dropdown <span class="caret"></span></a>
  19. <ul class="dropdown-menu">
  20. <li><a href="#">Action</a></li>
  21. <li><a href="#">Another action</a></li>
  22. <li><a href="#">Something else here</a></li>
  23. <li role="separator" class="divider"></li>
  24. <li class="dropdown-header">Nav header</li>
  25. <li><a href="#">Separated link</a></li>
  26. <li><a href="#">One more separated link</a></li>
  27. </ul>
  28. </li>
  29. </ul>
  30. <ul class="nav navbar-nav navbar-right">
  31.  
  32. </ul>
  33. </div><!--/.nav-collapse -->
  34. </div><!--/.container-fluld -->
  35. </nav>

效果如下;

移动端:

3.代码分析

从外到内分析每一个标签及其样式的作用

3.1最外层的div容器(样式为navbar navbar-default navbar-fixed-top):

源码

  1. .navbar {
  2. position: relative;
  3. min-height: 50px;/**导航条最小宽度为50px**/
  4. margin-bottom: 20px;/****/
  5. border: 1px solid transparent;
  6. }
  7. @media (min-width: 768px) {/**>=768的设备,其实就是pc,移动设备width属性都小于768px**//**可能有很多人不理解,实际上移动端的width属性是以device-width来计量的,不是单纯的像数的概念,建议有疑问的同学自行搜索device-width关键字**/
  8. .navbar {
  9. border-radius: 4px;/****/
  10. }
  11. }
  12. .navbar-default {/**设备导航栏的配色**/
  13. background-color: #f8f8f8;
  14. border-color: #e7e7e7;
  15. }
  16. .navbar-fixed-top,
  17. .navbar-fixed-bottom {
  18. position: fixed;/**相对浏览器定位**/
  19. right:;
  20. left:;
  21. z-index:;/**样式层叠在上层的优先级**/
  22. }

由源码可见,最外层div容器主要的作用是创建一个最小高度为50px的条形容器(.navbar),相对于于浏览器定位(.navbar-fixed-top),确定导航栏的配色(.navbar-default)

关于device-width的相关知识,可参考这篇文章  http://www.tuicool.com/articles/ri2AJv

3.2 样式为navbar-header的div容器

其css源码如下

  1.  
  1. /**在pc端显示时向右浮动,在移动端此样式无效**/
  1. @media (min-width: 768px) {
  2. .navbar-header {
  3. float: left;
  4. }
  5. }

此div在pc端和移动端显示效果如下

pc端:

移动端:

可见在pc端时,浏览器宽度足够,此div仅作为一个小的块级元素存在;而在移动端时,由于屏幕宽度不够,故将导航栏的其他元素以下拉菜单的形式实现,此div单独填满父容器。

navbar-header下还有两个字元素:样式为navbar-toggle的<button>和为navbar-brand的<a>

其css源码如下:

  1. .navbar-toggle {/**在最右侧画了一个圆角矩形**/
  2. position: relative;
  3. float: right;
  4. padding: 9px 10px;
  5. margin-top: 8px;
  6. margin-right: 15px;
  7. margin-bottom: 8px;
  8. background-color: transparent;
  9. background-image: none;
  10. border: 1px solid transparent;
  11. border-radius: 4px;
  12. }
  13.  
  14. .navbar-toggle:focus {
  15. outline:;
  16. }
  17. @media (min-width: 768px) {/**此button在pc端不显示**/
  18. .navbar-toggle {
  19. display: none;
  20. }
  21. }
  22. .navbar-toggle .icon-bar {/**icon-bar负责在button盒子里画横线**/
  23. display: block;
  24. width: 22px;
  25. height: 2px;
  26. border-radius: 1px;
  27. }
  28.  
  29. .navbar-brand {
  30. float: left;
  31. height: 50px;
  32. padding: 15px 15px;
  33. font-size: 18px;
  34. line-height: 20px;
  35. }

至此,navbar-header组件我们就弄清楚了,这是一个响应式布局,在pc端,navbar-header只显示品牌文字,在移动端,navbar-header将独占整个导航栏navbar,其他部分将被隐藏。

3.3继续来看navbar-collapse collapse组件

源码:

  1. /**由于.navbar-collapse,.navbar-collapse.in,.collapse在(@meida min-width:768px)pc端均有定义,故一下的属性只对移动端有效**/
  1. .navbar-collapse {
  2. padding-right: 15px;
  3. padding-left: 15px;
  4. overflow-x: visible;
  5. -webkit-overflow-scrolling: touch;
  6. border-top: 1px solid transparent;
  7. -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, .1);
  8. box-shadow: inset 0 1px 0 rgba(255, 255, 255, .1);
  9. }
  10. .navbar-collapse.in {/**点击navbar-header的navbar-toggle的button后, navbar-collapse collapse会被js修改成。navbar-collapse collapse in**/
  11. overflow-y: auto;
  12. }
  13. .collapse {/**决定了本组件在移动端时不显示**/
  14. display: none;/**点击事件发生后将被覆盖**/
  15. }

.collapse.in {/**点击事件发生后,以块级元素显示,覆盖掉display:none**/
  display: block;
 }

  1. @media (min-width: 768px) {/**pc端**/
  2. .navbar-collapse {
  3. width: auto;
  4. border-top:;
  5. -webkit-box-shadow: none;
  6. box-shadow: none;
  7. }
  8. .navbar-collapse.collapse {
  9. display: block !important;/**作为块级显示,由于兄弟节点navbar-header是浮动元素,所以navbar-collapse会占满父元素的宽高**/
  10. height: auto !important;
  11. padding-bottom:;
  12. overflow: visible !important;
  13. }
  14. .navbar-collapse.in {
  15. overflow-y: visible;
  16. }
  17. .navbar-fixed-top .navbar-collapse,
  18. .navbar-static-top .navbar-collapse,
  19. .navbar-fixed-bottom .navbar-collapse {
  20. padding-right:;
  21. padding-left:;
  22. }
  23. }

至此,我们也弄明白了navbar-collapse collapse组件是如何在移动端时隐藏的navbar-collapse负责组件的外表样式,而.collapse负责整个组件是否显示(pc端正常显示,移动端出事不显示(display:none),点击事件发生后以块级元素显示)

4.总结

从bootstrap的导航栏源码分析,可以看出以下几点

4.1:bootstrap的尺寸样式和配色样式是分开设置的,可以想到这样设置可以随意组合,增加了代码的复用性,也可以随意的根据自己的需求修改配色。

4.2:导航栏的实现:导航栏的固定方式由navbar-fixed-top实现,其他值还有navbar-static-top以及默认值其显示效果也不一样(决定了整个导航栏的显示位置)

         颜色实现由navbar-default实现,可以通过修改navbar-defau来修改整个配色(决定了整个导航栏的配色)

         下拉菜单的实现也是样式和是否显示的样式分离

5.注:其中许多细节如margin padding的变化本文没有讨论,可以参考这篇文章http://www.cnblogs.com/zhangw1994/p/7124252.html

Bootstrap导航栏navbar源码分析的更多相关文章

  1. Bootstrap 过渡效果 transition.js源码分析

    前言: 阅读建议:去github下载一个完整dom然后把,本篇代码复制进去然后运行就好了以地址 Bootstrap 自带的 JavaScript 插件的动画效果几乎都是使用 CSS 过渡实现的,那么判 ...

  2. ceph-csi组件源码分析(1)-组件介绍与部署yaml分析

    更多ceph-csi其他源码分析,请查看下面这篇博文:kubernetes ceph-csi分析目录导航 ceph-csi组件源码分析(1)-组件介绍与部署yaml分析 基于tag v3.0.0 ht ...

  3. Bootstrap源码分析系列之整体架构

    作为一名合格的前端工程师,你肯定听说过Bootstarp框架.确实可以说Bootstrap框架是最流行的前端框架之一.可是也有人说Bootstrap是给后端和前端小白用的,我认为只要学习它能给我们前端 ...

  4. bootstrap源码分析之scrollspy(滚动侦听)

    源码文件: Scrollspy.js 实现功能 1.当滚动区域内设置的hashkey距离顶点到有效位置时,就关联设置其导航上的指定项2.导航必须是 .nav > li > a 结构,并且a ...

  5. Android8.1 MTK平台 SystemUI源码分析之 网络信号栏显示刷新

    SystemUI系列文章 Android8.1 MTK平台 SystemUI源码分析之 Notification流程 Android8.1 MTK平台 SystemUI源码分析之 电池时钟刷新 And ...

  6. BOOtstrap源码分析之 tooltip、popover

    一.tooltip(提示框) 源码文件: Tooltip.jsTooltip.scss 实现原理: 1.获取当前要显示tooltip的元素的定位信息(top.left.bottom.right.wid ...

  7. bootstrap源码分析之tab(选项卡)

    实现tab选项卡的应用,此插件相对比较简单 源码文件: tab.js 实现原理 1.单击一个元素时,首先将原来高亮的元素取消2.然后给被单击元素进行高亮3.如果单击元素是下拉框中某个选项,则选中本身, ...

  8. Bootstrap源码分析之dropdown

    源码分析: Dropdowns.scss:下拉框模块 Javascripts/bootstrap/dropdown.js:实现下拉框响应 实现功能及原理: 下拉选项卡,默认不能实现显示选中项的功能 原 ...

  9. Appium Server源码分析之作为Bootstrap客户端

    Appium Server拥有两个主要的功能: 它是个http服务器,它专门接收从客户端通过基于http的REST协议发送过来的命令 他是bootstrap客户端:它接收到客户端的命令后,需要想办法把 ...

随机推荐

  1. eclipse中查看java源码时,出现source not found问题

  2. vue可视化图表 基于Echarts封装好的v-charts简介

    **vue可视化图表 基于Echarts封装好的v-charts** 近期公司又一个新的需求,要做一个订单和销售额统计的项目,需要用到可视化图表来更直观的展示数据.首先我想到的是Echarts,众所周 ...

  3. Qt 学习之路 2(43):QStringListModel

    Qt 学习之路 2(43):QStringListModel 豆子 2013年2月13日 Qt 学习之路 2 38条评论 上一章我们已经了解到有关 list.table 和 tree 三个最常用的视图 ...

  4. Hibernate学习笔记(二)—— 实体规则&对象的状态&一级缓存

    一.持久化类 1.1 什么是持久化类? Hibernate是持久层的ORM映射框架,专注于数据的持久化工作.所谓的持久化,就是将内存中的数据永久存储到关系型数据库中.那么知道了什么是持久化,什么又是持 ...

  5. Android 开源项目使用指南

    1.日历项目 https://blog.csdn.net/iamchan/article/details/81214498

  6. vue 在使用v-html绑定的时候,里面的元素不会继承外部的css,解决方案

    问题 想用vue绑定父文本生成的HTML内容,但是发现CSS样式根本不生效,选择器没起作用 代码: <div class="announcedetailImg" v-html ...

  7. Spring 配置 Apache Commons Logging

    第一次用spring framework,刚配了个最简单的项目,启动出现如下错误,查了知道原来spring要依赖Apache common logging包.只需要添加到项目library中即可.可从 ...

  8. PIE SDK屏幕坐标和地图坐标转换

    1. 功能简介 屏幕坐标和地图坐标转换,就是字面意思,将电脑屏幕的坐标转换为带有空间信息的地图坐标,主要运用PIE SDK地图控件的ToMapPoint()方法,而地图坐标转换为设备坐标(屏幕),用的 ...

  9. PIE SDK定向滤波

    1. 算法功能简介 定向滤波又称为匹配滤波,是通过一定尺寸的方向模板对图像进行卷积计算,并以卷积值代替各像元点灰度值,强调的是某一些方向的地面形迹,例如水系.线性影像等. 方向模板是一个各元素大小按照 ...

  10. ansible 命令详解{图片详解}

    本文内容来至于http://www.zsythink.net 文件操作模块 命令操作模块 cron 包管理模块