css+html+js实现下拉及多级弹出菜单

本文将使用css+html+js实现横向菜单,具有下拉的多级弹出菜单。

首先我们来看看效果图:

首先应该写html部分的代码,代码比较简单,代码如下:

<body>

    <div id="menu">
      <ul>
        <li><a href="#" id="current">首页</a></li>
        <li><a href="#">网页版式</a>
          <ul>
            <li><a href="#">自适应宽度</a></li>
            <li><a href="#">固定宽度</a></li>
          </ul>
        </li>

        <li><a href="#">web教程</a>
          <ul>
            <li><a href="#">新手入门</a></li>
            <li><a href="#">视频教程</a></li>
            <li><a href="#">常见问题</a></li>
          </ul>
        </li>

        <li><a href="#">web实例</a></li>
        <li><a href="#">常用代码</a></li>
      </ul>
    </div>

    <div  id="s1">
      <ul>
         <li><a href="#">软件工程</a>
           <ul>
            <li><a href="#">java ee</a></li>
            <li><a href="#">c</a></li>
           </ul>
         </li>

         <li><a href="#">程序语言</a>
           <ul>
            <li><a href="#">android</a></li>
            <li><a href="#">java</a></li>
           </ul>
         </li>

      </ul>
    </div>

  </body>

接着写css的代码,代码中都有注释,方便阅读和理解:

<style type="text/css">

body {
  font-family: Verdana; /*  字体*/
  font-size: 12px; /*  字体大小*/
  line-height: 1.5; /*行高  */
  }

a {
  color: #000; /* 正常时的颜色 */
  text-decoration: none; /*取消下划线  */
  }

a:hover {
color: #F00; /* 鼠标经过时显示的颜色 */
}

#menu {
  width:500px; /* div的宽度 */
  height:28px; /* 高度 */
  margin:0 auto; /* 水平居中 */
  border-bottom:3px solid #E10001;/*设置底端线  */
  }

#menu ul {
  list-style: none; /* 取消列表样式 */
  margin: 0px; /*外边距为0  */
  padding: 0px; /*内边距为0  */
  }

#menu ul li {
  float:left; /* 水平浮动 */
  margin-left:2px;/*左边外边距为2px  */
  }

#menu ul li a {
  display:block;
  width:87px;
  height:28px;
  line-height:28px;
  text-align:center;
  background:url(./m14.jpg) 0 0 no-repeat;
  font-size:14px;
  }

#menu ul li a:hover {
  background:url(./m13.jpg) 0 0 no-repeat;
  }

#menu ul li a#current {
  background:url(./m12.jpg) 0 0 no-repeat;
  font-weight:bold;
  color:#fff;
  }

#menu ul li ul {
  border:1px solid #ccc;
  display:none;
  position:absolute;
  }

#menu ul li ul li {
  float:none;
  width:87px;
  background:#eee;
  margin:0;
  }

#menu ul li ul li a {
  background:none;
  }

#menu ul li ul li a:hover {
  background:#333;
  color:#fff;
  }

#menu ul li:hover ul {
  display:block;
  }

#menu ul li.sfhover ul {
  display:block;
  }

#s1{
   background-color: pink;
   width:180px;
   border:2px solid red;
   position:relative;
   left:200px;
   top:190px;
   height:60px;
}

#s1 ul li{
  list-style-type: none;
  height:25px;
  width:50px;
  background-color: #0ff;
  float:left;
  margin:10px;
}

#s1 ul li ul{
  display:none;
  position:absolute;
}

#s1 ul li:HOVER ul{
    display:block;
    background-color: blue;
    margin:0px;
    padding:0px;
    /* width:100px; */
}

#s1 ul li.sfhover ul {
  display:block;
  margin:0px;
  padding:0px;
  }

#s1 ul li ul li{
   border:1px solid red;
   float:none;
   margin:0px;
   width:50px;

} 

</style>

完成上面的步骤后,可以进行测试了,你会发现,上面的代码只在谷歌浏览器可以操作正常,能够实现下拉菜单,但是在ie和其他的浏览器,不能正常使用下拉菜单,浏览器不兼容引起的,所以为了写出兼容所有浏览器的菜单,还需js代码的控制。js代码如下;

<script type="text/javascript">
  function menuFix() {
      var sfEls = document.getElementById("menu").getElementsByTagName("li");
      var sfEls2 = document.getElementById("s1").getElementsByTagName("li");
      for (var i=0; i<sfEls.length; i++) {
           sfEls[i].onmouseover=function() {
           this.className+=(this.className.length>0? " ": "") + "sfhover";
       };
           sfEls[i].onMouseDown=function() {
           this.className+=(this.className.length>0? " ": "") + "sfhover";
         };
          sfEls[i].onMouseUp=function() {
         this.className+=(this.className.length>0? " ": "") + "sfhover";
        };
        sfEls[i].onmouseout=function() {
        this.className=this.className.replace(new RegExp("( ?|^)sfhover\\b"),
             "");
          };
          }

          for (var i=0; i<sfEls2.length; i++) {
           sfEls2[i].onmouseover=function() {
           this.className+=(this.className.length>0? " ": "") + "sfhover";
       };
           sfEls2[i].onMouseDown=function() {
           this.className+=(this.className.length>0? " ": "") + "sfhover";
         };
          sfEls2[i].onMouseUp=function() {
         this.className+=(this.className.length>0? " ": "") + "sfhover";
        };
        sfEls2[i].onmouseout=function() {
        this.className=this.className.replace(new RegExp("( ?|^)sfhover\\b"),
             "");
          };
          }

 }
window.onload=menuFix;

</script>

现在就可以运行正常了,会出现本文开始显示的效果,由于是做测试的,所以有些css代码没有去掉,主要是方便调试

时间: 2024-10-27 00:05:11

css+html+js实现下拉及多级弹出菜单的相关文章

Web标准:八、下拉及多级弹出菜单

Web标准:八.下拉及多级弹出菜单 知识点: 1.带下拉子菜单的导航菜单 2.绝对定位和浮动的区别和运用 3.CSS自适应宽度滑动门菜单 1)带下拉子菜单的导航菜单 带下拉子菜单的就是在一级导航下加一个二级菜单.这个在上一节第七节课上我已经做出来了,这里就不再写了.再重温一下注意点:如果要在一级菜单下增加二级菜单,二级菜单需要加一个float:none;来去掉浮动,否则二级菜单也会浮动到一行上去了. 2)绝对定位和浮动的区别和运用 绝对定位:它的位置将依据浏览器左上角开始计算或相对于父容器(在父

多级弹出菜单jQuery插件ZoneMenu

ZoneMenu是一个菜单jQuery插件,只需占用页面上的一个小区域,却可以实现多级菜单. 在线体验:http://keleyi.com/jq/zonemenu/ 点击这里下载 完整HTML文件代码: <!DOCTYPE html > <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <titl

纯css和js版下拉菜单

<!doctype html> <html> <head> <meta charset="utf-8"> <title>css版下拉菜单</title> <style type="text/css"> div,body,ul,li{padding:0;margin:0; list-style:none;} .all{width:550px; height:30px; backgrou

【selenium】下拉框和弹出框处理

#-*-coding=utf-8 from selenium import webdriver import os,time driver= webdriver.Firefox() driver.get("http://www.baidu.com") #进入搜索设置页 driver.find_element_by_link_text("设置").click() #设置每页搜索结果为100条 driver.find_element_by_link_text("

css+html+js实现多级下拉和弹出菜单

本文将使用css+html+js实现横向菜单.具有多级弹出菜单下拉. 首先我们来看看效果图: watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvajkwMzgyOTE4Mg==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" > 首先应该写html部分的代码,代码比較简单,代码例如以下: <body> <div id="men

纯CSS实现的二级下拉菜单效果代码实例

纯CSS实现的二级下拉菜单效果代码实例:二级下拉是最为常用的效果之一,当前的此效果一般哟结合js实现,本章节介绍一个使用纯CSS实现的二级下拉菜单效果,希望能够给需要的朋友带来一定的帮助,不过此代码也有一点浏览器兼容问题,那就是在IE6中不兼容.代码如下: <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <meta name="author" conten

vue10行代码实现上拉翻页加载更多数据,纯手写js实现下拉刷新上拉翻页不引用任何第三方插件

vue10行代码实现上拉翻页加载更多数据,纯手写js实现下拉刷新上拉翻页不引用任何第三方插件/库 一提到移动端的下拉刷新上拉翻页,你可能就会想到iScroll插件,没错iScroll是一个高性能,资源占用少,无依赖,多平台的javascript滚动插件.iScroll不仅仅是 滚动.它可以处理任何需要与用户进行移动交互的元素.在你的项目中包含仅仅4kb大小的iScroll,你的项目便拥有了滚动,缩放,平移,无限滚动,视差滚动,旋转功能.iScroll的强大毋庸置疑,本人也非常欢迎大家使用iScr

纯CSS实现的二级下拉导航菜单实例代码

纯CSS实现的二级下拉导航菜单实例代码:二级下拉菜单在众多的网站都有应用,不但能够有效的组织分类导航,并且能够节省大量的网站空间,也能够实现网站的动态化效果,大多数二级导航菜单都是结合javascript实现,本章节介绍一下使用纯css实现的下拉菜单.代码如下: <!DOCTYPE html> <html> <head> <meta charset=" utf-8"> <meta name="author" co

用JS让下拉框改变网页背景颜色

<HTML> <HEAD> <TITLE>石家庄渣浆泵配件</TITLE> </HEAD> <SCRIPT> <!-- function bgChange(selObj) { newColor = selObj.options[selObj.selectedIndex].text; document.bgColor = newColor; selObj.selectedIndex = -1; } //--> </SC