下拉菜单制作——利用CSS实现的一个实例

本文实现了一个经典的下拉菜单的制作。

首先,写出Html部分:

<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8" />
        <title></title>
    </head>
    <body>
        <ul class="top-nav">
            <li><a href="#">慕课网</a></li>
            <li><a href="#">课程大厅</a></li>
            <li><a href="#">学习中心</a>
                <ul>
                    <li><a href="#">前端课程</a>
                        <ul>
                            <li><a href="#">html</a></li>
                            <li><a href="#">javascript</a></li>
                            <li><a href="#">css</a></li>
                        </ul>
                    </li>
                    <li><a href="#">手机开发</a></li>
                    <li><a href="#">后台编程</a></li>
                </ul>
            </li>
            <li><a href="#">关于我们</a></li>
        </ul>
    </body>
该代码实现的效果图如下:

可以看到,这是一个三级菜单。

现在,我们开始给一级菜单外部加入样式:

            .top-nav
            {
                width: 960px;/**宽度*/
                margin: 60px auto;
                border: 1px solid #222;/**边框*/
                background-color: #111;
                background-image: linear-gradient(#444, #111);/**背景图*/
                border-radius: 6px;/**圆角*/
                box-shadow: 0 1px 1px #777;/**阴影:水平 垂直 模糊距离 模糊颜色*/
                padding: 0;/**内边距*/
                list-style: none;/**去掉小圆点*/
}

可以得到如下效果:

处理一级菜单,从左至右显示,清除下划线以及小圆点:

            
            .top-nav li
            {
                float: left;/**从左向右显示*/
                border-right: 1px solid #222;/**间隔线*/
                box-shadow: 1px 0 0 #444;
                position: relative;/**相对定位*/
            }
            .top-nav li a
            {
                float: left;
                padding: 12px 30px;
                color: #999;
                text-decoration: none;/**去掉下划线*/
                text-shadow: 0 1px 0 #000;/**文本阴影*/
            }
            .top-nav li a:hover
            {
                color: #fafafa;    /**鼠标移入颜色*/
            }
            .top-nav li ul
            {
                visibility: hidden;/**二级菜单隐藏显示*/
                position: absolute;/**绝对定位*/
                list-style: none;
                top: 38px;
                left: 0;
                z-index: 1;
                padding: 0;
                background-color: #444;
                background-image: linear-gradient(#444, #111);
                box-shadow: 0 -1 0 rgba(255, 255, 255, 3);
                border-radius: 3px;
                opacity: 0;/**刚开始设为透明*/
                margin: 20px 0 0 0;
                transition: all .2s ease-in-out;/**二级菜单动画效果*/
            }
            .top-nav li:hover > ul
            {
                opacity: 1;
                visibility: visible;
                margin: 0;
            }

得到下图效果:

可以发现一级菜单的背景被遮盖了,这是由于没有清除浮动引起的。在样式中加入如下代码,清除浮动:

            /**清除浮动*/
            .top-nav:before, .top-nav:after
            {
                content: " ";
                display: table;
            }
            .top-nav:after
            {
                clear: both;
            }

背景出现:

下来定义子菜单的超链接和二级菜单的圆角样式:

            /**二级菜单*/
            .top-nav ul li
            {
                float: none;
                display: block;
                border: 0;
                box-shadow: 0 1px 0 #111, 0 2px 0 #666;/**间隔线效果*/
            }
            .top-nav ul a
            {
                padding: 10px;
                width: 130px;
                display: block;
                float: none;
            }
            .top-nav ul a:hover
            {
                background-color: #0186ba;
                background-image: linear-gradient(#04accc, #0186ba);
            }
            .top-nav ul li:first-child > a
            {
                border-radius: 3px 3px 0 0;
            }
            .top-nav ul li:last-child > a
            {
                border-radius: 0 0 3px 3px;
            }

接下来添加三级菜单样式:

            /**三级菜单*/
            .top-nav ul li ul
            {
                float: none;
                left: 125px;
                top: 0;
                display: block;
            }

如此,我们的效果图就做好了:

是不是很酷?接下来为下拉菜单实现尖角。尖角位于二级菜单上面,是一个向上的箭头:

.top-nav ul li:first-child > a:before
            {
                 content: " ";
                 position: absolute;
                 left: 40px;/**显示位置*/
                 top: -6px;
                border-left: 6px solid transparent;    /**左右透明,只留下方*/    
                border-right: 6px solid transparent; 
                border-bottom: 6px solid #444;    
            }
            .top-nav ul li:first-child > a:hover:before
            {
                border-bottom-color: #04acec;
            }

尖角的实现原理:border上下左右四个方向,控制是否显示,则可以出现三角的效果。

同样,三级菜单尖角与二级类似,不过变成了向右的箭头:

            .top-nav ul ul li:first-child > a:before
            {
                 content: " ";
                 position: absolute;
                 left: -6px;
                 top: 50%;
                border-left: 0;        
                border-right: 6px solid #3b3b3b; 
                border-bottom: 6px solid transparent;
                border-top: 6px solid transparent;    
            }
            .top-nav ul ul li:first-child > a:hover:before
            {
                
                border-right-color: #0299d3;
                border-bottom-color: transparent;/**取消二级菜单的颜色*/
            }

在这里要注意去掉从二级菜单继承的颜色。

于是,一个下拉菜单就做好了:

原文地址:https://www.cnblogs.com/lingluo2017/p/6551635.html