大四党忙忙碌碌找工作,博客荒废久矣,可谓:终日昏昏醉梦间,忽闻春尽强登山。因过竹院逢僧话,偷得浮生半日闲。

这是个垂直的导航栏,可以有无限多层的子级菜单,看代码注释就够了:

 <!DOCTYPE html>
<head>
<meta charset="UTF-8">
<title>sidebarMenu</title>
</head> <ul id="menuid">
<li><a href="#">1</a></li>
<li>
<a href="#">2</a>
<ul>
<li><a href="#">Sub 2.1</a></li>
<li><a href="#">Sub 2.2</a></li>
</ul>
</li>
<li>
<a href="#">3</a>
<ul>
<li><a href="#">Sub 3.1</a></li>
<li>
<a href="#">Sub 3.2</a>
<ul>
<li><a href="#">Sub 3.2.1</a></li>
<li><a href="#">Sub 3.2.2</a></li>
<li><a href="#">Sub 3.2.3</a></li>
<li><a href="#">Sub 3.2.4</a></li>
</ul>
</li>
</ul>
</li>
</ul> <style type="text/css">
ul {margin:0;padding:0;width:180px;list-style-type:none;}
/* 要先设置为visibility:hidden(这时<ul>才有宽度,子<ul>才能计算左距),最后用JS处理它 */
ul ul {position:absolute;width:170px;top:0;visibility:hidden;}
li {position:relative;border-bottom:1px solid black;}
a {_height:1%;display:block;padding:6px;color:white;background:gray;text-decoration:none;}
a:hover {background:black;}
</style>
<script type="text/javascript">
initialMenu();
function initialMenu() {
var menuid = document.getElementById("menuid");
// 主<ul>下的所有<ul>,包括二级和三级的
var ultags = menuid.getElementsByTagName("ul");
for(var t=0,len=ultags.length;t<len;t++) {
// <ul>同胞<a>添加类,即hover该<a>会显示该<ul>
ultags[t].parentNode.getElementsByTagName("a")[0].className += "subfolderstyle";
if(ultags[t].parentNode.parentNode===menuid) {
// 如果该<ul>是第一层Submenu,左距等于主Mainmenu宽
ultags[t].style.left = ultags[t].parentNode.offsetWidth+'px';
} else {
// 如不是第一层Submenu,则父<ul>下的第一个<a>的宽度,也就是上一级Submenu的宽度
ultags[t].style.left = ultags[t-1].getElementsByTagName("a")[0].offsetWidth+'px';
}
// parentNode是该<ul>上层的<li>
ultags[t].parentNode.onmouseenter = function() {
this.getElementsByTagName("ul")[0].style.display = "block";
}
ultags[t].parentNode.onmouseleave = function() {
this.getElementsByTagName("ul")[0].style.display = "none";
}
}
// 呼应CSS中的注释,计算完各个<ul>的left后就可以不占文档位置了
for (var t=ultags.length-1; t>-1; t--){
ultags[t].style.visibility="visible";
ultags[t].style.display="none";
}
}
</script>

附上:

View Demo: http://xzh-loop.github.io/Manji/lab/demo/20141024-sidebarMenu.html

My Demo Catalogue:http://xzh-loop.github.io/Manji/lab/demo/catalogue.html

一个可以拓展的垂直多级导航栏 Demo的更多相关文章

  1. 基于jQuery垂直多级导航菜单代码

    基于jQuery垂直多级导航菜单代码是一款黑色风格的jQuery竖直导航菜单特效下载.效果图如下: 在线预览   源码下载 实现的代码. html代码: <ul class="ce&q ...

  2. CSS制作一个简单网页的下拉导航栏

    网页下拉导航栏的制作 网页下拉导航栏的制作很简单,只需要运用好CSS中伪选择器. 首先说明几个简单的伪选择器(比较常用的): link:连接平常的状态 visited:连接被访问过之后 hover:鼠 ...

  3. 使用bootstrap3.0搭建一个具有自定义风格的侧边导航栏

    由于工作变动,新的项目组,可能会涉及到更多的类似于后台管理系统这一类的项目,而且开发可能更加偏向于传统型的开发,希望今后能够在新的项目中能够用得上vuejs吧! 接手项目的时候,就是一个后台管理系统, ...

  4. 固定导航栏demo

    代码如下 <!DOCTYPE html> <html> <head lang="en"> <meta charset="UTF- ...

  5. 1+X学习日志——导航栏demo

    初级菜鸟的作品,各位大佬见笑了   <!DOCTYPE html> <html lang="en"> <head>     <meta c ...

  6. 巧妙使用checkbox制作纯css动态导航栏

    前提:很多时候.我们的网页都需要一个垂直的导航栏.可以分类.有分类.自然就有展开.关闭的功能.你还在使用jquery操作dom来制作吗?那你就out了! 方案:使用checkbox 的 checked ...

  7. CSS 导航栏

    实例: 导航栏 Home News Articles Forum Contact About 导航栏 熟练使用导航栏,对于任何网站都非常重要. 使用CSS你可以转换成好看的导航栏而不是枯燥的HTML菜 ...

  8. CSS:CSS 导航栏

    ylbtech-CSS:CSS 导航栏 1.返回顶部 1. CSS 导航栏 导航栏 熟练使用导航栏,对于任何网站都非常重要. 使用CSS你可以转换成好看的导航栏而不是枯燥的HTML菜单. 导航栏=链接 ...

  9. iOS导航栏的正确隐藏方式【转】

    简介:在项目中经常碰到首页顶部是无限轮播,需要靠最上面显示.有的设置导航栏为透明等一系列的方法,这个可以借助第三方.或者干脆简单粗暴的直接隐藏掉导航栏.可是push到下一个页面的时候是需要导航栏的,如 ...

随机推荐

  1. 关于JS变量和作用域

    ECMAScript 变量:1.基本类型值(简单数据段) 2.引用类型值(可能由过个值构成的对象) → 保存在内存中的对象 动态属性: 只能给引用型值动态添加新属性,以便将来使用. 复制变量值 : 基 ...

  2. c++STL之sort排序

    排序算法为竞赛中最常用的算法之一,我们可以利用C++自带的库函数进行排序.                                                                ...

  3. B - 敌兵布阵 线段树的点

    B - 敌兵布阵 Time Limit:1000MS     Memory Limit:32768KB     64bit IO Format:%I64d & %I64u Descriptio ...

  4. 容器vector的使用总结 容器stack(栈)

    0.头文件:#include<vector>; using namespace std; 1.定义: vector<type> vec; 2.迭代器 vector<typ ...

  5. View的工作原理(二)——layout

    1.当View的measure被确定后,会调用ViewGroup的layout方法,之后使用onLayout方法(同样也是系统未自动重写,要我们自己完成)遍历子View(根Measure的形式是一样得 ...

  6. SQL Server dbcc checkdb 做了什么。

    第一步: 读取系统元数据.读完这些数据后dbcc checkdb 就知道自己要检测的是一个怎样的数据库了.如果在这一步就出错了.dbcc 就直接出错 了.不会再运行下去. 第二步: 在dbcc che ...

  7. U盘开发之SCSI命令

    借助硬件USB协议分析仪,可以清楚的看到U盘启动时和上位机之间交互的USB协议流程,从get desciptor get congfiguration set configuration到scsi命令 ...

  8. windows下开发PHP扩展(无需Cygwin)

    第一步:准备 1.php源码包和windows下的二进制包,以及安装Visual C++,并把Microsoft Visual Studio/Common/MSDev98/Bin的绝对路径添加到win ...

  9. android textView 折叠 展开 ExpandableTextView

    项目过程中可能会用到可以折叠和展开的TextView , 这里给出一种实现思路,自定义控件. package com.example.expandtextviewdemo; import androi ...

  10. linux scp ssh命令不用输入密码

    把你的本地主机用户的ssh公匙文件复制到远程主机用户的~/.ssh/authorized_keys文件中 假设本地主机linux100,远程主机linux200 一,在linux100主机里的用户 运 ...