zoukankan      html  css  js  c++  java
  • CSS二级菜单

     0.需求:当鼠标hover到按钮上时,出现下拉菜单导航条。

    1.问题拆解:
    (1)HTML应该如何组织比较方便合理
    因为题中要求下拉菜单位于按钮的正下方,可以使用列表<li>中嵌套无序列表<ul>的方式,设置<ul>padding值为0。
    (2)如何实现下拉菜单在鼠标没有hover到按钮上时不出现
    使用定位隐藏,设置下拉菜单为绝对定位,设置一个负的很大的值。
    (3)如何实现下拉菜单在鼠标hover时出现
    设置鼠标hover时,<ul>列表的left值。
    <body>
    
        <li class="btn"><a class="btn1" href="#">按钮</a>
    
            <ul>
    
                <li><a href="#">下拉菜单项</a></li>
    
                <li><a href="#">下拉菜单项</a></li>
    
                <li><a href="#">下拉菜单项</a></li>
    
                <li><a class="last" href="#">下拉菜单项</a></li>
    
            </ul>
    
        </li>
    
    </body>

    (1)首先重置默认的<li>,<a>标签样式

            li,
    
            li a {
    
                text-decoration: none;
    
                list-style-type: none;
    
                font-family: "宋体";
    
                font-size: 12px;
    
                color: #000;
    
            }

    (2)设置按钮的边框等,此时我设置的是外层<li>标签中<a>标签的样式,此时将内层<a>标签设置成块级block,这样可以设置宽高,并且后面有用(后面再说)。

           .btn1 {
    
                display: block;
    
                border: 1px solid #ddd;
    
                width: 50px;
    
                height: 28px;
    
                text-align: center;
    
                line-height: 28px;
    
            }

    (3)将下拉菜单隐藏设置成不可见

            ul {
    
                margin-top: 1px;
    
                position: absolute; /*设置绝对定位*/
    
                left: -999em;   /*设置隐藏*/
    
                padding: 0;  /*离它的父元素的边界为0,所以可以位于父元素<li>的正下方*/
    
            }

    (4)为下拉菜单项添加样式

            ul li a {
    
                display: inline-block;  /*菜单项宽度未知,设置inline-block宽度为内容宽度*/
    
                border-top: 1px solid #ddd;
    
                border-left: 1px solid #ddd;  /*这方法很笨,千万别学我*/
    
                border-right: 1px solid #ddd;
    
                height: 30px;
    
                padding: 0 10px;
    
                line-height: 30px;
    
            }

    (5)不能忘了最后一个

            .last {
    
                border-bottom: 1px solid #ddd;
    
            }

    (6)设置鼠标hover时出现下拉菜单

            .btn:hover ul {
    
                left: auto; /*默认ul的padding为0,位于按钮正下方*/
    
            }

    (7)设置hover时改变背景颜色

            ul li a:hover {
    
                background-color: #ddd;
    
            }

    (8)此时会有一个小bug,鼠标hover到按钮整一行时都会出现下拉菜单,因为此时最外层的<li>标签是块级元素,块级元素没有设置宽度默认的宽度是父元素宽度,而它的父元素是body,第(6)步写的是hover整个外层<li>标签,所以会出现这种情况。
    解决办法:   可以在父元素<li>设置inline-block,子元素设置block,当子元素内容超出时,父元素宽度根据内容变化,所以,可以将按钮hover区域控制按钮边框之内。

            .btn{
    
                display: inline-block; /*设置btn是inline-block,
    
                默认宽度为内容宽度,则鼠标只会在hover到按钮区域时才会展开下拉菜单*/
    
            }

    以下是完整代码:

    <!DOCTYPE html>
    
    <html>
    
     
    
    <head>
    
        <meta charset="utf-8">
    
        <title>纯css实现下拉菜单</title>
    
        <style>
    
            li,
    
            li a {
    
                text-decoration: none;
    
                list-style-type: none;
    
                font-family: "宋体";
    
                font-size: 12px;
    
                color: #000;
    
            }
    
            
    
            .btn1 {
    
                display: block;
    
                border: 1px solid #ddd;
    
                width: 50px;
    
                height: 28px;
    
                text-align: center;
    
                line-height: 28px;
    
            }
    
            
    
            ul {
    
                margin-top: 1px;
    
                position: absolute; /*设置绝对定位,宽度为内容宽度*/
    
                left: -999em;   /*设置隐藏*/
    
                padding: 0;  /*离它的父元素的边界为0,所以可以位于父元素li的正下方*/
    
            }
    
            
    
            ul li a {
    
                display: inline-block;  /*菜单项宽度未知,设置inline-block宽度为内容宽度*/
    
                border-top: 1px solid #ddd;
    
                border-left: 1px solid #ddd;
    
                border-right: 1px solid #ddd;
    
                height: 30px;
    
                padding: 0 10px;
    
                line-height: 30px;
    
            }
    
            
    
            .last {
    
                border-bottom: 1px solid #ddd;
    
            }
    
            
    
            .btn:hover ul {
    
                left: auto; /*默认ul的padding为0,位于按钮正下方*/
    
            }
    
            
    
            ul li a:hover {
    
                background-color: #ddd;
    
            }
    
            .btn{
    
                display: inline-block; /*设置btn是inline-block,
    
                默认宽度为内容宽度,则鼠标只会在hover到按钮区域时才会展开下拉菜单*/
    
            }
    
        </style>
    
    </head>
    
     
    
    <body>
    
        <li class="btn"><a class="btn1" href="#">按钮</a>
    
            <ul>
    
                <li><a href="#">下拉菜单项</a></li>
    
                <li><a href="#">下拉菜单项</a></li>
    
                <li><a href="#">下拉菜单项</a></li>
    
                <li><a class="last" href="#">下拉菜单项</a></li>
    
            </ul>
    
        </li>
    
    </body>
    
    </html>
  • 相关阅读:
    C语言程序设计 第二章 数据类型
    C语言程序设计 认识函数
    趣味c语言编程100例(三)
    如何使用 Eset Nod32通行证批量获取精灵
    C语言程序设计 使用库函数参考手册
    C语言程序设计 概述
    C语言程序设计 VC6调试程序(视频)
    趣味c语言编程100例(四)
    java WebService 异常
    数据库战略高度解析(2) 数据库驱动程序
  • 原文地址:https://www.cnblogs.com/yuer20180726/p/11008152.html
Copyright © 2011-2022 走看看