综合练习二级菜单(纯css之前有js的)

综合练习二级菜单
CSS3 opacity 属性

设置元素透明度。

取值

从 0.0 (完全透明)到 1.0(完全不透明)。

之前使用js模拟过二级菜单的动画效果很是麻烦,现在css3中自带的过度模块和翻转模块很大的方便了我们。纯css写二级菜单动画效果。

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>翻转菜单</title>
    <style>
        /**
        通过设置display属性来隐藏和显示二级菜单,会导致动画失效,
        因此采用透明度的方式
        */
        * {
            margin: 0;
            padding: 0;
        }

        .nav {
            width: 400px;
            height: 40px;
            margin: 100px auto 0;
            background-color: #353236;
        }

        /*儿子选择器,只是找到儿子,孙子中的li不设置margin-left*/
        /*开启定位,子绝父相*/
        .nav > li {
            list-style: none;
            width: 120px;
            float: left;
            height: 40px;
            margin-left: 10px;
            text-align: center;
            line-height: 40px;
            background-color: darkgray;
            position: relative;
        }

        .sub {
            /*默认不显示二级菜单*/
            /*display: none;*/
            width: 120px;
            position: absolute;
            left: 0;
            top: 40px;
        }

        /*二级菜单中的li*/
        .sub li {
            list-style: none;
            background-color: deepskyblue;
            /*默认情况下也看不到二级菜单,上来先绕Y轴翻转180度*/
            transform: rotateY(180deg);
            transition: all 1s;
            /* 将所有li默认透明度设置为0,即是二级菜单隐藏*/
            opacity: 0;
        }

        /*鼠标悬停显示二级菜单*/
        /*.nav > li:hover .sub {*/
        /*     display: block;*/
        /* }*/


        .nav > li:hover .sub li {
            /*再绕Y轴旋转180度,但是后边会重叠前边的,直接设置为none*/
            /*transform: rotateY(180deg);*/
            transform: none;
            /*完全显示,产生淡化效果*/
            opacity: 1;
        }

        /* 二级菜单展开,从上至下设置逐层过度的效果,就是设置延迟执行的时间逐渐增加*/
        .nav > li:hover .sub li:nth-child(1) {
            transition-delay: 0ms;
        }

        .nav > li:hover .sub li:nth-child(2) {
            transition-delay: 200ms;
        }

        .nav > li:hover .sub li:nth-child(3) {
            transition-delay: 400ms;
        }

        .nav > li:hover .sub li:nth-child(4) {
            transition-delay: 600ms;
        }

        .nav > li:hover .sub li:nth-child(5) {
            transition-delay: 800ms;
        }

        /*二级菜单回收,从下至上设置逐层过度效果,依次增加延迟执行时间*/
        .nav > li .sub li:nth-child(5) {
            transition-delay: 0ms;
        }

        .nav > li .sub li:nth-child(4) {
            transition-delay: 200ms;
        }

        .nav > li .sub li:nth-child(3) {
            transition-delay: 400ms;
        }

        .nav > li .sub li:nth-child(2) {
            transition-delay: 600ms;
        }

        .nav > li .sub li:nth-child(1) {
            transition-delay: 800ms;
        }
        /*下拉菜单优先级高于下边文字,定位流一定会盖住标准流*/
        div {
            width: 400px;
            height: 300px;
            background-color: #b7ccb3;
            margin: 0 auto;
            text-align: center;

            
        }
    </style>
</head>
<body>
<ul class="nav">
    <li>一级菜单
        <ul class="sub">
            <li>二级菜单</li>
            <li>二级菜单</li>
            <li>二级菜单</li>
            <li>二级菜单</li>
            <li>二级菜单</li>
        </ul>
    </li>
    <li>一级菜单
        <ul class="sub">
            <li>二级菜单</li>
            <li>二级菜单</li>
            <li>二级菜单</li>
            <li>二级菜单</li>
            <li>二级菜单</li>
        </ul>
    </li>
    <li>一级菜单
        <ul class="sub">
            <li>二级菜单</li>
            <li>二级菜单</li>
            <li>二级菜单</li>
            <li>二级菜单</li>
            <li>二级菜单</li>
        </ul>
    </li>
</ul>
<div>
    黑五大促:海淘网站汇总!低至5折起!
    出游也要吃好的!必带速食第二件0元
    天猫国际黑五大促:年度爆款,限时5折抢!
    黑五新大陆:爆款第二件半价!
    京东商城| 黑五感恩季,国际大牌低至3折
    Burberry| 打折季低至4折
    立减135| 怡丽丝尔眼唇保湿精华霜380元
    惊爆价| 任天堂掌机游戏每99减10,到手449元
    海淘折扣季:梅西百货低至3折!!
</div>
</body>
</html>

在这里插入图片描述

注意点

1.首先整体页面,分为三个一级菜单和一个信息框,导航栏默认就是采用li标签实现,文本框就是div

2.每个一级标签下还有二级菜单,所以嵌套li标签,实现二级菜单。

3.一级菜单默认水平排版,就想起我们的浮动,左浮设置左外边距,然后依次设置每个水平和垂直居中。

4.二级菜单的ul也要设置宽度,否则二级菜单的每个li大小无法和上方对齐。

5.接着就是二级菜单动画效果,悬停一级菜单,二级菜单依次显示,离开依次回收,这就要利用transform属性的旋转,旋转180度展示,但是没有转到360度字是反的,默认情况下二级菜单是看不见的,我们可以上来就旋转180度。等悬停再旋转180度,回收时不用再旋转,直接利用覆盖将transform属性设置为none,所谓逐层显示,其实就是利用延迟显示的属性,回收时延迟属性设置数值相反即可。

6.这么多属性需要过度就可以利用简写transition语法

transition: all 1s;

7.既然二级菜单默认不显示,我们如果通过display来修改,动画效果会被取消,所以使用透明度来实现。悬停前设置二级菜单的所有li 为opacity: 0,看不见,等悬停时加入opacity: 1,上边设置了所有属性过度1s,还会产生淡化的效果,很不错。

8.最后就是我们下来菜单的显示内容优先级肯定高于下边文本框的,所以要覆盖下边内容,就采用定位流一定会覆盖标准流的方法。

9.子绝父相之前讲的,父亲是每一个一级菜单,就是第一个ul里的每个li,儿子不是二级菜单中的li,而是这整个ul,这里需要注意,top,left值需要设置,top如果为0,意味二级菜单盖住一级菜单,不想就设置一级菜单的高度。

10。都是之前学的,但是一旦综合起来,就很难,还是要多看看之前的。特效分解很重要,什么是用户看到的,什么是他们看不到但却存在的。

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值