5-2 下拉菜单(原理分析)
本节编程练习不计算学习进度,请电脑登录imooc.com操作

下拉菜单(原理分析)

Bootstrap框架中的下拉菜单组件,其下拉菜单项默认是隐藏的,如下所示:

因为“dropdown-menu”默认样式设置了“display:none”,其详细源码请查看bootstrap.css文件第3010行~第3029行:

.dropdown-menu {
  position: absolute;/*设置绝对定位,相对于父元素div.dropdown*/
  top: 100%;/*让下拉菜单项在父菜单项底部,如果父元素不设置相对定位,该元素相对于body元素*/
  left: 0;
  z-index: 1000;/*让下拉菜单项不被其他元素遮盖住*/
  display: none;/*默认隐藏下拉菜单项*/
  float: left;
  min-width: 160px;
  padding: 5px 0;
  margin: 2px 0 0;
  font-size: 14px;
  list-style: none;
  background-color: #fff;
  background-clip: padding-box;
  border: 1px solid #ccc;
  border: 1px solid rgba(0, 0, 0, .15);
  border-radius: 4px;
  -webkit-box-shadow: 0 6px 12px rgba(0, 0, 0, .175);
  box-shadow: 0 6px 12px rgba(0, 0, 0, .175);
}

当用户点击父菜单项时,下拉菜单将会被显示出来,如下所示:

当用户再次点击时,下拉菜单将继续隐藏,如下所示:

原理分析:

现在我们来分析一下实现原理,非常简单,通过js技术手段,给父容器“div.dropdown”添加或移除类名“open”来控制下拉菜单显示或隐藏。也就是说,默认情况,“div.dropdown”没有类名“open”,当用户第一次点击时,“div.dropdown”会添加类名“open”;当用户再次点击时,“div.dropdown”容器中的类名“open”又会被移除。我们可以通过浏览器的firebug查看整个过程:

默认情况:

用户第一次点击:

用户再次点击:

在bootstrap.css文件第3076行~第3078行,我们可以很容易发现:

.open > .dropdown-menu {
  display: block;
}

任务

本小节没有代码任务,单击“提交”按钮进行下一个小节学习。

 

  1. <!DOCTYPE HTML>
  2. <html>
  3. <head>
  4. <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
  5. <title>下拉菜单</title>
  6. <link rel="stylesheet" href="//maxcdn.bootstrapcdn.com/bootstrap/3.2.0/css/bootstrap.min.css">
  7. </head>
  8. <body>
  9.  
  10. <div class="dropdown">
  11. <button class="btn btn-default dropdown-toggle" type="button" id="dropdownMenu1" data-toggle="dropdown">
  12. 下拉菜单
  13. <span class="caret"></span>
  14. </button>
  15. <ul class="dropdown-menu" role="menu" aria-labelledby="dropdownMenu1">
  16. <li role="presentation"><a role="menuitem" tabindex="-1" href="#">下拉菜单项</a></li>
  17. <li role="presentation"><a role="menuitem" tabindex="-1" href="#">下拉菜单项</a></li>
  18. <li role="presentation"><a role="menuitem" tabindex="-1" href="#">下拉菜单项</a></li>
  19. <li role="presentation"><a role="menuitem" tabindex="-1" href="#">下拉菜单项</a></li>
  20. </ul>
  21. </div>
  22. <script src="https://www.imooc.com/static/lib/jquery/1.9.1/jquery.js"></script>
  23. <script src="//maxcdn.bootstrapcdn.com/bootstrap/3.2.0/js/bootstrap.min.js"></script>
  24. </body>
  25. </html>
下一节