HTML+CSS 创建京东导航栏

使用HTML+CSS 搭建京东首页导航栏,主要实现的功能:
静态部分以及鼠标移入显示下拉列表信息
在这里插入图片描述
位置和向下图标使用Font Awesome图标字体库

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>京东顶部导航条</title>
    <!-- 引入重置样式表 -->
    <link rel="stylesheet" href="../../css/reset.css">
    <!-- 引用图标字体 -->
    <link rel="stylesheet" href="../fontawesome/all.css">

    <style>
        .clearfix::before,
        .clearfix::after {
            content: '';
            display: table;
            clear: both;
        }

        body {
            /* 设置字体 */
            font: 12px/1.5 Microsoft YaHei, Heiti SC, tahoma, arial, Hiragino Sans GB, "\5B8B\4F53", sans-serif;
        }

        /* 设置外部容器的样式 */
        .top-bar-wrapper {
            /* 设置宽度 */
            width: 100%;
            /* 设置背景颜色 */
            background-color: #E3E4E5;
            height: 30px;
            /* 设置行高,没有设置高度 使文字垂直居中 */
            line-height: 30px;
            /* 设置下边框 */
            border-bottom: 1px #ddd solid
        }

        /* 设置内部容器的样式 */
        .top-bar {
            /* 固定宽度 */
            width: 1190px;
            /* 设置水平居中 */
            margin: 0 auto;
            /*使其成为下面子元素的定位基准 */
            position: relative;

        }


        /* 设置字体样式 */
        .top-bar a,
        .top-bar span,
        .top-bar i {
            color: #999;
            text-decoration: none;
        }

        .top-bar a:hover,
        .top-bar a.highlight {
            color: #f10215;
        }

        /* 设置location */
        .location {
            float: left;
        }

        /* 设置location下的小图标 */
        .location .fas {
            color: #f10215;
        }

        /* 设置城市列表的效果 */
        .location .city-list {
            display: none;
            width: 320px;
            height: 436px;
            background-color: white;
            border: 1px solid rgb(204, 204, 204);
            /* 设置绝对定位,使其不占据页面的位置 */
            position: absolute;
            top: 31px;
            /*使其一直优先显示而不被后期的元素覆盖*/
            z-index: 999;
            box-shadow: 0 2px 2px rgba(0, 0, 0, .2)
        }

        /* 当鼠标移入到location时,让city-list显示 */
        .location:hover .city-list {
            display: block;
        }

        .current-city {
            padding: 0 10px;

            /*用在border上面:transparent 颜色透明
             用在background-color上面:transparent  背景透明 

             正常显示时,也有边框(颜色透明)
            */
            border: 1px solid transparent;
            border-bottom: none;


            position: relative;
            /* 设置z-index属性,提高元素的层次,使其优先显示,而不被其他元素覆盖
            */
            z-index: 9999;
        }

        /* 设置current-city的移入的效果 */
        .location:hover .current-city {
            background-color: white;
            /* 重新设置边框 (正常显示时已设置,这样移入就不会出现增大的效果)*/
            border: 1px solid rgb(204, 204, 204);
            border-bottom: none;
            /* 扩大盒子:使其延伸到兄弟元素*/
            padding-bottom: 1px;
        }

        /* 设置link_myJD父容器的样式 */
        .link_myJD_parent {
            width: 80px;
            float: left;
        }


        .link_myJD_parent:hover .link_myJD {

            background-color: white;
            border: 1px solid rgb(204, 204, 204);
            border-bottom: none;
            padding-bottom: 1px;
        }


        .link_myJD_parent:hover .myjd_dropdownlist {
            display: block;
        }

        /*设置link_myJD的样式 */
        .link_myJD {
            width: 80px;
            position: relative;
            height: 100%;
            text-align: center;

            position: relative;
            z-index: 9999;
        }

        /*设置我的京东列表信息样式 */
        .myjd_dropdownlist {
            display: none;
            width: 280px;
            height: 150px;
            background-color: white;
            position: absolute;
            z-index: 999;
            top: 31px;
            left: 221.5px;
            border: 1px solid rgb(204, 202, 202);
        }

        /* 设置.link_corporateprocurement父容器样式*/
        .link_corporateprocurement_parent {
            width: 70px;
            float: left;
        }
        /*鼠标移入父容器,设置子元素link_corporateprocurement的样式*/
        .link_corporateprocurement_parent:hover .link_corporateprocurement {
            background-color: white;
            border: 1px solid rgb(204, 204, 204);
            border-bottom: none;
            padding-bottom: 1px;
        }

        /*显示企业采购信息列表 */
        .link_corporateprocurement_parent:hover .corporateprocurementdropdownlist {
            display: block;
        }

        /*设置link_corporateprocurement样式 */
        .link_corporateprocurement {
            width: 70px;
            height: 30px;
            position: relative;
            z-index: 9999;
            text-align: center;
        }

        /* 设置企业采购信息列表样式 */
        .corporateprocurementdropdownlist {
            display: none;
            width: 140px;
            height: 100px;
            position: absolute;
            z-index: 999;
            top: 31px;
            background-color: white;
            border: 1px solid rgb(204, 202, 202);
        }


        /* 设置link_customerservice父容器样式*/
        .customerservice_parent {
            width: 70px;
            float: left;
        }

        /*鼠标移入父容器,设置子元素link_customerservice的样式*/
        .customerservice_parent:hover .link_customerservice {
            cursor: pointer;
            background-color: white;
            border: 1px solid rgb(204, 204, 204);
            border-bottom: none;
            padding-bottom: 1px;
        }

        /*显示客户服务信息列表 */
        .customerservice_parent:hover .customerservicedropdownlist {
            display: block;
        }

        /*设置link_customerservice样式 */
        .link_customerservice {
            width: 70px;
            height: 30px;
            position: relative;
            z-index: 9999;
            text-align: center;
        }

        /* 设置客户服务信息列表样式 */
        .customerservicedropdownlist {
            display: none;
            width: 140px;
            height: 200px;
            position: absolute;
            z-index: 999;
            top: 31px;
            right: 166px;
            background-color: white;
            border: 1px solid rgb(204, 202, 202);
        }


        /* 设置link_sitenav父容器样式*/
        .sitenav_parent {
            width: 70px;
            float: left;
        }

        /*鼠标移入父容器,设置子元素link_sitenav的样式*/
        .sitenav_parent:hover .link_sitenav {
            cursor: pointer;
            background-color: white;
            border: 1px solid rgb(204, 204, 204);
            border-bottom: none;
            padding-bottom: 1px;
        }

        /*显示网站导航信息列表 */
        .sitenav_parent:hover .sitenavdropdownlist {
            display: block;
        }

        /*设置link_sitenav样式 */
        .link_sitenav {
            width: 70px;
            height: 30px;
            position: relative;
            z-index: 9999;
            text-align: center;
        }

        /* 设置网站导航信息列表样式 */
        .sitenavdropdownlist {
            display: none;
            width: 1188px;
            height: 157px;
            position: absolute;
            z-index: 999;
            top: 31px;
            right: 10px;
            border: 1px solid rgb(204, 202, 202);

        }


        /* 设置shortcut */
        .shortcut {
            float: right;
            position: relative;
        }

        /* 设置分割线 */
        .shortcut .line {
            width: 1px;
            height: 10px;
            background-color: rgb(204, 202, 202);
            margin: 12px 12px 0;
        }

        /* 设置li */
        .shortcut li {
            float: left;
        }
    </style>
</head>

<body>
    <!-- 创建外围的容器 -->
    <div class="top-bar-wrapper">
        <!-- 创建内部容器 -->
        <div class="top-bar clearfix">
            <!-- 左侧的菜单 -->
            <div class="location">
                <div class="current-city">
                    <i class="fas fa-map-marker-alt"></i>
                    <a href="javascript:;">北京</a>
                </div>

                <!-- 放置城市列表的div -->
                <div class="city-list">

                </div>
            </div>

            <!-- 右侧的菜单 -->
            <ul class="shortcut clearfix">
                <li class="link_login">
                    <a href="javascript:;">你好,请登录</a>
                    <a class=" highlight" href="javascript:;">免费注册</a>
                </li>

                <!-- 分割线 -->
                <li class="line"></li>
                <li class="link_orders"><a href="javascript:;">我的订单</a></li>

                <li class="line"></li>
                <!--为link_myJD添加一个外部容器 -->
                <div class="link_myJD_parent">
                    <li class="link_myJD">
                        <a href="javascript:;">我的京东</a>
                         <!--向下图标字体 -->
                        <i class="fas fa-angle-down"></i>
                    </li>

                    <!--我的京东列表信息 -->
                    <li class="myjd_dropdownlist">
                    </li>
                </div>

                <li class="line"></li>
                <li class="link_JDVIP"><a href="javascript:;">京东会员</a></li>

                <li class="line"></li>

                <div class="link_corporateprocurement_parent">
                    <li class="link_corporateprocurement">
                        <a class="highlight" href="javascript:;">企业采购</a>
                        <i class="fas fa-angle-down"></i>
                    </li>
                    <!--企业采购列表信息 -->
                    <li class="corporateprocurementdropdownlist">
                    </li>
                </div>

                <li class="line"></li>
                <!--客户服务信息父容器 -->
                <div class="customerservice_parent">
                    <li class="link_customerservice">
                        <span>客户服务</span>
                        <i class="fas fa-angle-down"></i>
                    </li>
                    <!--客户服务信息列表 -->
                    <li class="customerservicedropdownlist"></li>
                </div>

                <li class="line"></li>

                <!--创建网站导航父容器 -->
                <div class="sitenav_parent">
                    <li class="link_sitenav">
                        <span>网站导航</span>
                        <i class="fas fa-angle-down"></i>
                    </li>
                    <!--网站导航信息列表 -->
                    <li class="sitenavdropdownlist"></li>
                </div>
                <li class="line"></li>
                <li class="link_phoneJD">
                    <span>手机京东</span>
                </li>
            </ul>
        </div>
    </div>
</body>

</html>

这里需要注意:
1.元素浮动,脱离文档流,如果存在父子块元素的嵌套,且父元素靠内容撑开,则父元素的高度将出现坍塌
解决方法:给父元素添加clearfix类,并添加以下代码:

/*可以同时解决外边距重叠和高度坍塌问题 */
        .clearfix::before,
        .clearfix::after {
            content: "";
            display: table;
            clear: both;
        }

2.如何处理当鼠标移入,改变文字所在块元素的背景颜色,以及从此块移动到列表信息块时,还一直保持?
eg:

				<!--创建网站导航父容器 -->
                <div class="sitenav_parent">
                    <li class="link_sitenav">
                        <span>网站导航</span>
                        <i class="fas fa-angle-down"></i>
                    </li>
                    <!--网站导航信息列表 -->
                    <li class="sitenavdropdownlist"></li>
                </div>

给link_sitenav和sitenavdropdownlist添加sitenav_parent父元素(块元素),当移入父元素时,改变
link_sitenav块的背景颜色.这样移入下拉列表信息时也一直属于hover状态,也就不会丢失背景颜色
(要绑定同一个父元素)

 		/*鼠标移入父容器,设置子元素link_sitenav的样式*/
        .sitenav_parent:hover .link_sitenav {
            cursor: pointer;
            background-color: white;
            border: 1px solid rgb(204, 204, 204);
            border-bottom: none;
            padding-bottom: 1px;
        }

3.元素的层次问题(网页是一层一层的,我们看到的是最上面一层)
处理link_sitenav和sitenavdropdownlist相邻的那一段边框,红色为默认存在的边框
在这里插入图片描述
达到的效果:
在这里插入图片描述
我们这里给link_sitenav设置一个padding-bottom,垂直方向下外边距偏移1px(border宽度为1px)会导致其盒子变大,用link_sitenav的背景颜色来覆盖掉那一段边框.
父容器高度固定,为何没效果?
link_sitenav开启了相对定位,提升了元素的层级
sitenavdropdownlist开启了绝对定位,也提升了元素的层级
如果元素的层级一样(开启定位的元素,默认层级一样),则优先显示靠下的元素,
所以没效果
处理方法:设置z-index属性,设置元素的层级,元素的层级越高,则越优先显示.
下方的列表也应该设置一个相对比较高的层级,防止显示时被其他层级较高的元素覆盖掉。

        /*设置link_sitenav样式 */
        .link_sitenav {
            width: 70px;
            height: 30px;
            position: relative;
            z-index: 9999;
            text-align: center;
        }

        /* 设置网站导航信息列表样式 */
        .sitenavdropdownlist {
            display: none;
            width: 1188px;
            height: 157px;
            position: absolute;
            z-index: 999;
            top: 31px;
            right: 10px;
            border: 1px solid rgb(204, 202, 202);

        }

最后附上引入的重置样式表和图标字体的链接:
链接:样式表
提取码:ul63

Font Awesome 图标库使用:都有案例以及使用方法
Font Awesome 中文官方

发布了86 篇原创文章 · 获赞 1 · 访问量 835

猜你喜欢

转载自blog.csdn.net/qq_34550459/article/details/105390803