老师帮忙检查一下代码,谢谢

来源:2-8 项目作业

慕的地7233660

2022-05-07 17:31:48

<style>
        * {
            margin: 0;
            padding: 0;
        }
        .center-wrap {
            position: relative;
            box-sizing: border-box;
            font-size: 14px;
            width: 1152px;
            margin: 0 auto;
            margin-top: 30px;
        }

        .log {
            float: left;
            font-size: 24px;
        }

        .slide-nav {
            float: right;
            position: relative;
        }

        .slide-nav ul {
            width: 360px;
            overflow: hidden;
        }

        .slide-nav li {
            float: left;
            width: 50px;
            height: 30px;
            list-style: none;
            margin-right: 10px;
            cursor: pointer;
        }

        .slide-nav ul li:hover {
            color: #f01400;
        }

        .slide-nav li:last-child {
            margin-right: 0;
        }

        .slide-nav li a {
            text-decoration: none;
            color: black;
        }

        .btn {
            position: absolute;
            right: 0;
            background-color: black;
            color: wheat;
        }

        .em {
            width: 30px;
            height: 4px;
            background-color: #f01400;
            position: absolute;
            top: 20px;
            left: 0;
            transition: left 0.5s ease 0s;
        }
    </style>
     <section class="center-wrap">
        <div class="log">慕课手机</div>
        <nav class="slide-nav">
            <ul id="list">
                <li data-n="0">
                    <a href="#">首页</a>
                </li>
                <li data-n="1">
                    <a href="#">外观</a>
                </li>
                <li data-n="2">
                    <a href="#">配置</a>
                </li>
                <li data-n="3">
                    <a href="#">型号</a>
                </li>
                <li data-n="4">
                    <a href="#">说明</a>
                </li>
            </ul>
            <div class="em" id="em"></div>
        </nav>
        <button class="btn">立即购买</button>

    </section>
    <script>
        //得到元素
        var em = document.getElementById('em')
        var list = document.getElementById('list')

        //绑定事件监听,用事件委托
        list.onmouseover = function (e) {
            if (e.target.tagName.toLowerCase() == 'li')
                t = e.target.getAttribute('data-n')
            console.log(t)
            em.style.display = 'inline-block'
            em.style.left = 60 * t + 'px'
        }
    </script>
    问题描述:1,我给li设置了:hover属性,为什么鼠标悬停上去的时候li标签的颜色没有
    改变,2,为什么鼠标触碰到li标签的margin区域,添加的监听才会起效果?


写回答

1回答

好帮手慕小李

2022-05-07

同学你好,解答如下:

1、给li设置hover不变色是因为li中的文字,是由a标签进行包裹的,那么a标签是不继承父级的color属性的,所以这里需要将hover挪到a标签上,如下:

https://img.mukewang.com/climg/62763e1309b3bdbe06350178.jpg

效果如下:

https://img.mukewang.com/climg/62763df5097a640404580076.jpg

2、在list移入事件中,我们尝试打印一下console.log(e.target.tagName)看看效果:

https://img.mukewang.com/climg/62763eb60999c60a11130328.jpg

这里同学会发现,当我们移入li的时候其实并不都是li,因为冒泡的机制,这里可能是a也可能是li也可能是ul。那么当我们鼠标移入到margin上时其实是不生效的,因为margin是外边距(盒模型的知识点),那么js会认为这里并不属于li的一部分了。所以继续向上冒泡。解释如下:

https://img.mukewang.com/climg/62763f980997fcd005760228.jpg

那么这里如要优化同学可以看看以下的思路:

把margin-left换成padding左右如下:

https://img.mukewang.com/climg/6276411d0960bb0310500327.jpg

因为padding是内边距,如果鼠标移入padding区域,那么js会判定为它还在li内部,或者已经在li内部了。

同学自己试试,祝学习愉快!

0

前端工程师

前端入门如同写字,如果你不知道从哪开始,那就选择前端(含Vue3.x,React17,TS)

20327 学习 · 17877 问题

查看课程