老师,为什么我无论怎么设置,第三级菜单还是只显示一行?

老师,为什么我无论怎么设置,第三级菜单还是只显示一行?

<!DOCTYPE html>
<html>
<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">
    <style type="text/css">
        * {
            margin: 0;
            padding: 0;
        }        
        .nav-contrain {
            position: fixed;
            left: 0;
            top: calc(50% - 66px);
        }        
        .nav-contrain ul,
        .nav-contrain ul li,
        .li-3 {
            width: 120px;
            line-height: 30px;
            text-align: center;
        }        
        .nav-contrain ul li,
        .nav-3 {
            display: none;
        }        
        .nav-contrain ul {
            height: auto;
            border-bottom: 1px solid #FFFFFF;
            background-color: black;
            color: white;
        }        
        .nav-contrain ul li {
            height: auto;
            border-bottom: 1px dashed black;
            background-color: white;
            color: black;
            position: relative;
        }        
        .nav-3 {
            width: 120px;
            height: auto;
        }        
        .li-3 {
            height: 30px;
            border-bottom: 1px #ffffff;
            background-color: black;
            color: white;
            position: absolute;
            top: 0;
            right: -120px;
        }        
        .nav-contrain ul:hover li,
        .nav-contrain ul li:hover .nav-3 {
            display: block;
        }
    </style>
    <title>Document</title>
</head>
<body>
    <div class="nav-contrain">
        <ul>一级标题
            <li>二级标题
                <div class="nav-3">
                    <div class="li-3">三级标题</div>
                    <div class="li-3">三级标题</div>
                    <div class="li-3">三级标题</div>
                    <div class="li-3">三级标题</div>
                    <div class="li-3">三级标题</div>
                </div>
            </li>
            <li>二级标题
                <div class="nav-3">
                    <div class="li-3">三级标题</div>
                    <div class="li-3">三级标题</div>
                    <div class="li-3">三级标题</div>
                    <div class="li-3">三级标题</div>
                    <div class="li-3">三级标题</div>
                </div>
            </li>
            <li>二级标题
                <div class="nav-3">
                    <div class="li-3">三级标题</div>
                    <div class="li-3">三级标题</div>
                    <div class="li-3">三级标题</div>
                    <div class="li-3">三级标题</div>
                    <div class="li-3">三级标题</div>
                </div>
            </li>
        </ul>
        <ul>一级标题
            <li>二级标题
                <div class="nav-3">
                    <div class="li-3">三级标题</div>
                    <div class="li-3">三级标题</div>
                    <div class="li-3">三级标题</div>
                    <div class="li-3">三级标题</div>
                    <div class="li-3">三级标题</div>
                </div>
            </li>
            <li>二级标题
                <div class="nav-3">
                    <div class="li-3">三级标题</div>
                    <div class="li-3">三级标题</div>
                    <div class="li-3">三级标题</div>
                    <div class="li-3">三级标题</div>
                    <div class="li-3">三级标题</div>
                </div>
            </li>
            <li>二级标题
                <div class="nav-3">
                    <div class="li-3">三级标题</div>
                    <div class="li-3">三级标题</div>
                    <div class="li-3">三级标题</div>
                    <div class="li-3">三级标题</div>
                    <div class="li-3">三级标题</div>
                </div>
            </li>
        </ul>
        <ul>一级标题
            <li>二级标题
                <div class="nav-3">
                    <div class="li-3">三级标题</div>
                    <div class="li-3">三级标题</div>
                    <div class="li-3">三级标题</div>
                    <div class="li-3">三级标题</div>
                    <div class="li-3">三级标题</div>
                </div>
            </li>
            <li>二级标题
                <div class="nav-3">
                    <div class="li-3">三级标题</div>
                    <div class="li-3">三级标题</div>
                    <div class="li-3">三级标题</div>
                    <div class="li-3">三级标题</div>
                    <div class="li-3">三级标题</div>
                </div>
            </li>
            <li>二级标题
                <div class="nav-3">
                    <div class="li-3">三级标题</div>
                    <div class="li-3">三级标题</div>
                    <div class="li-3">三级标题</div>
                    <div class="li-3">三级标题</div>
                    <div class="li-3">三级标题</div>
                </div>
            </li>
        </ul>
    </div>
</body>
</html>

加不加包裹   .li-3的  .nav-3效果都是一样的,是哪里错了嘛?

正在回答

登陆购买课程后可参与讨论,去登陆

3回答

对,不包裹的话没有办法实现让三级菜单整体定位,一个一个给li定位的话太麻烦了。祝学习愉快!

  • 超速飛 提问者 #1
    谢谢老师
    2017-06-25 09:18:31
qq_天天_66 2017-07-13 14:26:57

兄弟 ,其实你的三级列表已经全部显示出来了,那么为什么会是看起来只显示一行呢,就是你所说的你给每个三级都设置了绝对定位,所以其实他们相对于最近relative祖先元素的位置是重叠的,根据显示规则,会显示最后一个设置absolute的元素,你可以试着改变第一组的三级列表的最后一个值,你会发现显示的就是你说输入的的文字。所以也就是说明了,其实不是没全部显示,只是显示重叠了,只能看到最后一个的文字内容。

个人看法

如果你坚持在每个三级元素上设置绝对定位的话,我感觉应该要用到js里面的for循坏来,自动的改变他们各自的top值,避免重叠。

  • 提问者 超速飛 #1
    那如果不使用绝对定位的话该怎么改?不改变HTML的结构的话
    2017-07-13 16:22:48
  • qq_天天_66 回复 提问者 超速飛 #2
    这个我就不知道怎么弄了,和老师说的一样,你在三级菜单的包裹层用绝对定位最好,逻辑也清楚,代码量也少
    2017-07-14 10:51:48
Miss路 2017-06-24 12:22:25

定位要放到nav-3里面,不是放到每个li-3里面,放到每个li-3里面不是定位的位置都一样了吗?正确的写法是:

http://img1.sycdn.imooc.com/climg//594de8fd0001681c10060698.jpg

  • 提问者 超速飛 #1
    第三级菜单外面必须要包裹一个 nav-3 吗?
    2017-06-24 15:43:19
问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
前端小白入门系列课程
  • 参与学习           人
  • 提交作业       11218    份
  • 解答问题       36713    个

从一个不会编程的小白到一个老司机是需要过程的,首先得入门,学习基础知识,然后才能进阶,最后再到精通,本专题是你走进前端世界的不二选择!

了解课程
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师