html:
    (1)下拉层的div和ul>li放在同一层
    (2)给所有需要下拉弹出的设置好统一class

    1. <!DOCTYPE html>
    2. <html lang="zh">
    3. <head>
    4. <meta charset="UTF-8">
    5. <meta name="viewport" content="width=device-width, initial-scale=1.0">
    6. <title>
    7. 小米商城 - 小米11、Redmi Note 9、小米MIX Alpha,小米电视官方网站
    8. </title>
    9. <link rel="stylesheet" href="../css/reset.css">
    10. <link rel="stylesheet" href="../css/base.css">
    11. <link rel="stylesheet" href="../css/index.css">
    12. <link rel="stylesheet" href="../fa/css/all.css">
    13. </head>
    14. <body>
    15. <div class="wrapper">
    16. <div class="top-bar-wrapper">
    17. <ul class="top-bar-left">
    18. <li class="top-left-wrapper"><a href="javascript:;">小米商城</a></li>
    19. <li class="line-space">|</li>
    20. <li class="top-left-wrapper"><a href="javascript:;">MIUI</a></li>
    21. <li class="line-space">|</li>
    22. <li class="top-left-wrapper"><a href="javascript:;">loT</a></li>
    23. <li class="line-space">|</li>
    24. <li class="top-left-wrapper"><a href="javascript:;">云服务</a></li>
    25. <li class="line-space">|</li>
    26. <li class="top-left-wrapper"><a href="javascript:;">天星数科</a></li>
    27. <li class="line-space">|</li>
    28. <li class="top-left-wrapper"><a href="javascript:;">有品</a></li>
    29. <li class="line-space">|</li>
    30. <li class="top-left-wrapper"><a href="javascript:;">小爱开放平台</a></li>
    31. <li class="line-space">|</li>
    32. <li class="top-left-wrapper"><a href="javascript:;">企业团购</a></li>
    33. <li class="line-space">|</li>
    34. <li class="top-left-wrapper"><a href="javascript:;">资质证照</a></li>
    35. <li class="line-space">|</li>
    36. <li class="top-left-wrapper"><a href="javascript:;">协议规则</a></li>
    37. <li class="line-space">|</li>
    38. <!-- 在父子元素中嵌入三角和download图片 -->
    39. <li class="top-left-wrapper">
    40. <a class="app" href="javascript:;">下载app
    41. <div class="download">
    42. <img src="../img/download.png" alt="download_app">
    43. <span>小米商城APP</span>
    44. </div>
    45. </a>
    46. </li>
    47. <li class="line-space">|</li>
    48. <li class="top-left-wrapper"><a href="javascript:;">智能生活</a></li>
    49. <li class="line-space">|</li>
    50. <li class="top-left-wrapper"><a href="javascript:;">Select Location</a></li>
    51. </ul>
    52. <!-- 两个同时float: right;那么必须排在右边的写在前面,因为会把写在前面的优先放到右边去 -->
    53. <ul class="top-bar-right">
    54. <li class="top-left-wrapper top-right-shopping"><a href="javascript:;">
    55. <i class="fas fa-shopping-cart"></i>
    56. 购物车(0)
    57. <div class="shopping-cart">
    58. <span>购物车中还没有商品,赶紧选购吧!</span>
    59. </div>
    60. </a></li>
    61. </ul>
    62. <ul class="top-bar-center">
    63. <li class="top-left-wrapper message"><a href="javascript:;">消息通知</a></li>
    64. <li class="line-space">|</li>
    65. <li class="top-left-wrapper"><a href="javascript:;">注册</a></li>
    66. <li class="line-space">|</li>
    67. <li class="top-left-wrapper"><a href="javascript:;">登录</a></li>
    68. </ul>
    69. </div>
    70. </div>
    71. <div class="head-wrapper ">
    72. <h1 class="logo" title="小米">
    73. <a class="mi-logo" href="/"></a>
    74. <a class="mi-home" href="/"></a>
    75. </h1>
    76. <div class="head-center-wrapper">
    77. <!-- 创建一个专门的容器 -->
    78. <ul class="head-center-ul clearfix">
    79. <li><a class="all-goods" href="/">全部商品分类</a></li>
    80. <li class="open-goods"><a href="/">小米手机</a></li>
    81. <li class="open-goods"><a href="/">Redmi手机</a></li>
    82. <li class="open-goods"><a href="/">电视</a></li>
    83. <li class="open-goods"><a href="/">家电</a></li>
    84. <li class="open-goods"><a href="/">笔记本</a></li>
    85. <li class="open-goods"><a href="/">路由器</a></li>
    86. <li class="open-goods"><a href="/">智能硬件</a></li>
    87. <li><a href="/">服务</a></li>
    88. <li><a href="/">社区</a></li>
    89. <div class="show-goods"></div>
    90. </ul>
    91. </div>
    92. <div class="head-right-wrapper"></div>
    93. </div>
    94. </div>
    95. <div class="body">
    96. </div>
    97. </body>
    98. </html>

    css:
    (1)如果没有设置width,那么会从祖先父辈处继承
    (2)父辈别轻易设置position:relative;否则会非常不容易找到需要的width
    (3)脱离出文档流,用position:absolute;但同时也需要设置top和left值,才能使得元素到达指定的位置
    (4)对于transition,设置效果,height可以为一个参数,同时设置好变化时间
    (5)对于需要设置好的border,暂时不想得到效果,那么采用hover之后才出现,同时为了防止溢出,采取overflow:hidden;来屏蔽
    (6)移动阴影效果,第一个值,移动左右,第二个值移动上下

    body {
        width: 1920px;
        overflow: hidden;
    }
    /* 整个板块float */
    .top-bar-left {
        float: left;
        margin-left: 190px;
        position: relative;
    }
    
    /* 当需要超链接上下部分也显示hover效果,将超链接设置为display: block;即可达到效果 */
    
    a {
        display: block;
    }
    
    a:hover {
        color: white;
    }
    /* 里面的li 也要设置float,否者下面的li只会竖直排列 */
    .top-bar-left li {
        float: left;
        height: 40px;
        line-height: 40px
    }
    
    /* 三个border设置为 rgba(0,0,0,0),剩下一个设置颜色,宽高设置为0,即可,将display设置为none,,在hover中设置block;即可动态显示*/
    .app {
        position: relative;
    }
    /* 设置app下的小三角 */
    .app::after {
        content: ''; /* content CSS属性用生成的值替换元素。使用content属性插入的对象是匿名替换的元素。 */
        position: absolute;/*开启绝对定位,同时将父元素设置为相对定位,那么可在父元素周围使用left等来移动 */
        display: none;
        width: 0px;
        height: 0px;
        border: 7px solid transparent;
        border-top: none;
        border-bottom-color: #fff;
        bottom: 0px;
        /* 使用left right = 0 ,margin: auto;来自动对齐 */
        left: 0px;
        right: 0px;
        margin: auto;
    }
    /* 对文字设置居中,如果是行内元素,应在其父元素(块)中进行设置 */
    .download {
        /* display: none; */
        position: absolute;
        left: -40px;
        width: 124px;
        height: 0px;
        line-height: 1px;
        text-align: center;
        background-color: #fffafa;
        box-shadow: 0 0 10 rgba(0,0,0.3);
        overflow: hidden;
    }
    
    .top-left-wrapper:hover .app::after,
    .app:hover .download {
        height: 148px;
        transition: all 0.3s;
        display: block;
    }
    /* 写入hover时,对于需要移入部分唤出隐藏部分,那么对移入部分hover,然后空格 需要唤醒的部分 */
    
    
    .top-bar-left .download img {
        width: 90px;
        height: 90px;
        margin: 17px;
    }
    
    .top-bar-left .download span {
        font-size: 14px;
        color: #333333;
    }
    /* 如果设置nth-child,反而找不到该li标签,因为后面 */
    /* .top-bar-left:hover .triangle{
        display: block;
    }
    
    .top-bar-left :nth-child(1) :hover .download{
        display: block;
    } */
    
    /* 单独对中线设置,并标好颜色,否者无法显示分割线 */
    .line-space {
        width: 1px;
        height: 13px;
        color: #424242;
        margin: 0 8px;
    }
    
    .top-bar-center {
        float: right;
        margin-right:148px;
    }
    
    .top-bar-center li {
        float: right;
        height: 40px;
        line-height: 40px
    }
    
    .top-bar-center .message {
        padding: 0 10px;
    }
    
    /* 此处是设置水平居中,水平居中是text-align,当时错误设置为vertical-align,同时因为line-height 和 height一致,所以直接废掉了vertical-align */
    .top-bar-right {
        float: right;
        height: 40px;
        line-height: 40px;
        width: 120px;
        text-align: center;    
        margin-right: 537px;
        margin-left: -145px;
        position: relative;
        display: block;
        background-color: #424242;
    }
    
    /* hover是作用于a标签的,而不是随便用 */
    .top-bar-right a:hover{
        color: #FF6701;
    }
    
    .top-bar-right .fas.fa-shopping-cart {
        margin-right: 2px;
    }
    
    .top-bar-right .shopping-cart {
        background-color: #f5f5f5;
        width: 316px;
        height: 100px;
        line-height: 100px;
        position: absolute;
        right: 0px;
        color: #333;
        font-size: 14px;
        display: none;
    }
    
    .top-bar-right:hover .shopping-cart {
        display: block;
    }
    
    
    /* 设置第二排导航条 */
    .head-wrapper {
        width: 100%;
        height: 100px;
        position: relative;
    }
    
    .head-wrapper .logo {
        width:55px;
        height: 55px;
        float: left;
        position: relative;
        margin-top: 22px;
        margin-left: 190px;
        left: 0px;
        overflow: hidden;
    }
    
    .head-wrapper .logo a{
        width:55px;
        height: 55px;
        position: absolute;
        background-image: url('../img/mi-logo.png');
    }
    
    
    
    .head-wrapper .logo .mi-logo{
        background-color: #FF6700;
    
    }
    
    .head-wrapper .logo .mi-home{
        position: absolute;
        left:-55px;
        background-image: url('../img/mi-home.png');
        background-color: #FF6700;
    
    }
    
    .head-wrapper .logo:hover .mi-logo{
        transition: left 0.3s;
        right: 55px;
    }
    
    .head-wrapper .logo:hover .mi-home{
        transition: left 0.3s;
        left: 0px;
    }
    
    .head-center-wrapper {
        width: 850px;
        height: 100px;
        background-color: #f5f5f5;
        float: left;
        margin-left: 7px;
        line-height: 100px;
    }
    
    .head-center-wrapper .head-center-ul li{
        float:left;
    }
    
    .head-center-wrapper .head-center-ul li a {
        position: block;
        text-decoration: none;
        color: #333333;
        font-size: 16px;
        margin-right: 20px;
    }
    
    .head-center-wrapper .head-center-ul li .all-goods {
        visibility: hidden;
    }
    
    .head-center-wrapper .head-center-ul a:hover {
        color: #FF6700;
    }
    
    
    .head-wrapper .show-goods {
        height: 0px;
        width: 100%;
        overflow: hidden;
        position: absolute;
        background-color: rgb(245,245,245);
        top:100px;
        left:0px;
        transition: height 0.5s;
    }
    
    .open-goods:hover ~.show-goods,
    .show-goods:hover {
        height: 284px; 
        border-top: 1px solid rgb(224,224,224);
        box-shadow: 0 15 3 rgba(0,0,0,0.3);
    }
    

    image.png