zoukankan      html  css  js  c++  java
  • CSS+JS下拉菜单和纯CSS下拉菜单

    下拉菜单

    (思路:先把二级定位到屏幕外,鼠标悬停重新定位回来;另一个就是ul浮动,li也浮动)

    下拉菜单的一般思路就是把子导航嵌套在无序列表中,把列表定位到屏幕之外,当鼠标悬停在其父列表项上时,重新定位它。

    有两个问题需要注意,

    第一个问题,列表项设置了float浮动,因此列表也要浮动已防止列表收缩:

    ul.nav,ul.nav ul{float:left}

    ul.nav li{float:left}

    第二个问题,子导航的定位

    ul.nav li ul{position:absolute;left:-999em}

    ul.nav li:hover ul{left:auto}

    一、CSS+JS下拉菜单

    原理:一级菜单的li中包含二级菜单ul。在鼠标没有移上去时,二级菜单的ul是display:none的状态,鼠标一移上去变成display:block。改变这个display属性值是通过JS来实现。鼠标hover时,把整个二级菜单的ul给display出来,用到的事件onmouseonver。鼠标移出又把整个二级菜单的ul 给隐藏掉。

    nav-js.html文件

    <!DOCTYPE html >
    <html>
    <head>
    <meta charset="utf-8" />
    <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
    <title></title>
    <link href="nav-js.css" rel="stylesheet">
    <script type="text/javascript">
        //显示子菜单
        function showSubMenu(li){
            var subMenu = li.getElementsByTagName("ul")[0];
            subMenu.style.display = "block";
        }
    
        //隐藏子菜单
        function hideSubMenu(li){
            var subMenu = li.getElementsByTagName("ul")[0];
            subMenu.style.display = "none";
        }
    </script>
    </head>
    <body>
        <ul id="navigation">
            <li><a href="#">首页</a></li>
            <li onmouseover="showSubMenu(this)" onmouseout="hideSubMenu(this)"><a href="#">我们的服务</a>
                <ul>
                    <li><a href="#">服务一</a></li>
                    <li><a href="#">服务二</a></li>
                    <li><a href="#">服务三</a></li>
                    <li><a href="#">服务四</a></li>
                    <li><a href="#">服务五</a></li>
                </ul>
            </li>
            <li onmouseover="showSubMenu(this)" onmouseout="hideSubMenu(this)"><a href="#">我们的团队</a>
                <ul>
                    <li><a href="#">服务一</a></li>
                    <li><a href="#">服务二</a></li>
                    <li><a href="#">服务三</a></li>
                    <li><a href="#">服务四</a></li>
                    <li><a href="#">服务五</a></li>
                </ul>
            </li>
            <li><a href="#">我们的方向</a></li>
            <li><a href="#">关于我们</a></li>
        </ul>
    </body>
    </html>
    View Code

    nav-css.css文件

     1 @charset "UTF-8";
     9  *{
    10      margin: 0;
    11      padding: 0;
    12  }
    13 
    14 body{
    15     font-size: 14px;
    16     font-family: sans-serif;
    17 }
    18 #navigation,#navigation li ul{
    19     list-style-type: none;
    20 }
    21 #navigation li{
    22     float: left;
    23     text-align: center;
    24     position: relative;
    25 }
    26 #navigation li a:link,#navigation li a:visited{
    27     display: block;
    28     text-decoration: none;
    29     color: #000;
    30     width: 120px;
    31     height: 40px;
    32     line-height: 40px;
    33     border: 1px solid #fff;
    34     background: #c5dbf2;
    35     border-width: 1px 1px 0 0; 
    36 }
    37 #navigation li a:hover{
    38     color: #fff;
    39     background: #2687eb;
    40 }
    41 #navigation li ul li{
    42     float: none;    
    43 }
    44 #navigation li ul{
    45     display: none;
    46     position: absolute;       /*二级ul使用绝对定位,宽度大于一级菜单时,才不会撑大一级*/
    47 
    48 }
    49 #navigation li ul li a:link,#navigation li ul li a:visited{
    50     display: block;
    51     width: 160px;
    52 }

     在46行,如果一级li的宽度小于二级li的宽度,那么就会撑大一级li的宽度,如图:

     显示和隐藏二级UL的JS函数:

    //显示子菜单
        function showSubMenu(li){
            var subMenu = li.getElementsByTagName("ul")[0];                  /*传了一个参数li进来,表示当前鼠标经过的li,
    再通过查找当前li下面的第一个ul,注意数组从0开始*/ subMenu.style.display
    = "block"; } //隐藏子菜单 function hideSubMenu(li){ var subMenu = li.getElementsByTagName("ul")[0]; subMenu.style.display = "none"; }

    做到了兼容所有的主流浏览器。

    二、纯CSS实现的下拉菜单

    纯CSS写的下拉菜单,其他浏览器都可以兼容,唯独IE6这家伙不怎么听话不兼容,所以当时IE6时,采用table布局,来达到IE6兼容的目的。

    HTML文件

    <!DOCTYPE html>
    <html>
        <head>
            <meta charset="utf-8" />
            <title>纯css下拉菜单,兼容IE6</title>
            <link rel="stylesheet" type="text/css" href="nav-css3.css">
    <!--[if lte IE 6]>
    <style tpye="text/css">
    table{
        border-collapse: collapse;
        margin: 0;
        padding: 0;
    }
    .menu ul li a.hide,.menu ul li a:visited.hide{
        display: none;
    }
    .menu ul li a:hover{
        color:#fff;
        background: #b3ab79;
    }
    .menu ul li a:hover ul{
        display: block;
        position: absolute;
        top: 32px;
        left: 0;
         105px;
    }
    .menu ul li a:hover ul li a{
        background: #faeec7;
        color: #000;
        160px;
    }
    .menu ul li a:hover ul li a:hover{
        background: #dfc184;
        color: #000;
    }
    </style>
    <![endif]-->
        </head>
        <body>
            <div class="menu">
                <ul>
                    <li><a class="hide" href="#">我们的服务</a>
                        <!--[if lte IE 6]>
                        <a href="#">我们的服务
                        <table><tr><td>
                        <![endif]-->
                        <ul>
                            <li><a href="#">服务一</a></li>
                            <li><a href="#">服务一</a></li>
                            <li><a href="#">服务一</a></li>
                            <li><a href="#">服务一</a></li>
                            <li><a href="#">服务一</a></li>
                        </ul>
                        <!--[if lte IE 6]>
                        </td></tr></table>
                        </a>
                        <![endif]-->
                    </li>
                    <li><a class="hide" href="#">我们的服务</a>
                        <!--[if lte IE 6]>
                        <a href="#">我们的服务
                        <table><tr><td>
                        <![endif]-->
                        <ul>
                            <li><a href="#">服务一</a></li>
                            <li><a href="#">服务一</a></li>
                            <li><a href="#">服务一</a></li>
                            <li><a href="#">服务一</a></li>
                            <li><a href="#">服务一</a></li>
                        </ul>
                        <!--[if lte IE 6]>
                        </td></tr></table>
                        </a>
                        <![endif]-->
                    </li>
                    <li><a class="hide" href="#">我们的服务</a>
                        <!--[if lte IE 6]>
                        <a href="#">我们的服务
                        <table><tr><td>
                        <![endif]-->
                        <ul>
                            <li><a href="#">服务一</a></li>
                            <li><a href="#">服务一</a></li>
                            <li><a href="#">服务一</a></li>
                            <li><a href="#">服务一</a></li>
                            <li><a href="#">服务一</a></li>
                        </ul>
                        <!--[if lte IE 6]>
                        </td></tr></table>
                        </a>
                        <![endif]-->
                    </li>
                </ul>
            </div>
        </body>
    </html>

    CSS文件 

    *{
        margin: 0;
        padding: 0;
    }
    .menu{
        font-family: arial,sans-serif;
        font-size: 14px;
        width: 750px;
    }
    .menu ul{
        padding: 0;
        margin: 0;
        list-style-type: none;
    }
    .menu ul li{
        float: left;
        position: relative;
    }
    
    .menu ul li a, .menu ul li a:visited{
        display: block;
        text-align: center;
        text-decoration: none;
        width: 104px;
        height: 30px;
        color: #000;
        border: 1px solid #fff;
        border-width: 1px 1px 0 0;
        background: #c9c9a7;
        line-height: 30px;
        font-size: 11px;
    }
    /*隐藏二级菜单ul*/
    .menu ul li ul{
        display: none;
    }/*隐藏结束*/
    
    .menu ul li:hover a{                  /*????????????尝试修改此处*/
        color: #fff;
        background: #b3ab79;
    }
    /*显示二级菜单*/
    .menu ul li:hover ul{
        display: block;
        position: absolute;
        top: 31px;
        left: 0px;
        width: 105px;
    }/*结束*/
    
    /*添加二级菜单鼠标移过的样式*/
    .menu ul li:hover ul li a{
        display: block;
        background: #faeec7;
        color: #000;
        width: 160px;
    }
    .menu ul li:hover ul li a:hover{
        background: #dfc184;
        color: #000;
    }

    ok,这样IE6也达到兼容。

  • 相关阅读:
    C#的访问修饰符
    C#的数据类型
    iOS--小结系列八(继续)
    ios--小结系列八 控制器管理
    ios--小结系列八 程序启动原理
    ios--小结系列七 通知机制
    ios--小结系列六继续-UITableViewCell
    ios--小结系列六
    ios--小结系列五
    ios--小结系列四
  • 原文地址:https://www.cnblogs.com/wuyinghong/p/3832844.html
Copyright © 2011-2022 走看看