老师,遇到一个问题。

老师,遇到一个问题。

# 具体遇到的问题
使用a:hover达不到使用li:hover的效果


# 报错信息的截图

li:hover的效果

http://img1.sycdn.imooc.com//climg/5fba39f508c02bea10520101.jpg

a:hover的效果

http://img1.sycdn.imooc.com//climg/5fba39f508422f4b10370091.jpg



# 相关课程内容截图
http://img1.sycdn.imooc.com//climg/5fba3a3b08c6e93204430503.jpg


# 尝试过的解决思路和结果
因为使用a:hover达不到视频的效果,所以就用li:hover,结果li:hover能达到效果,就很迷惑,我这个是什么原因造成的呢。因为看视频,加在a:hover是可以的,我自己加就出现问题了!

我将nav ul li:hover换成nav ul a:hover

就存在问题了


# 粘贴全部相关代码,切记添加代码注释(请勿截图)

<!DOCTYPE html>

<html lang="en">


<head>

    <meta charset="UTF-8">

    <meta name="viewport" content="width=device-width, initial-scale=1.0">

    <title>Document</title>

    <style>

        * {

            margin0;

            padding0;

        }


        nav{

            width1000px;

            height50px;

            margin40px auto;

        }


        nav ul{

            list-style: none;

        }


        nav ul li{

            float: left;

            width20%;

            text-align: center;

            line-height50px;

            background-color: orange;

        }


        nav ul li a {

            display: block;

            text-decoration: none;

            color: #fff;

        }


        nav ul li:hover{

            position: relative;

            border-top3px solid red;

            top-3px;

            background-color: burlywood;

        }

    </style>

</head>


<body>

    <nav>

        <ul>

            <li><a href="">网站栏目</a></li>

            <li><a href="">网站栏目</a></li>

            <li><a href="">网站栏目</a></li>

            <li><a href="">网站栏目</a></li>

            <li><a href="">网站栏目</a></li>

        </ul>

    </nav>

</body>


</html>


正在回答

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

2回答

同学你好,给a设置hover样式之后,效果不一样的原因如下:

这是因为a没有浮动脱离文档流,可以撑开父元素高度。a实际高度为53px(包含边框),所以父元素li撑开的高度也是53px。li自身设置了橙色背景,所以当鼠标移入a,a往上移动3px,就会露出来3px的空间,此时露出最底下高度为3px的橙色背景就是li的。

http://img1.sycdn.imooc.com//climg/5fba408409a6c02f06520172.jpg

给li设置hover样式没有问题,是因为它的父元素高度塌陷(因为li自身是浮动的)。例如给父元素设置高度,并设置一个橙色背景,也会出现上面的问题,如下:

http://img1.sycdn.imooc.com//climg/5fba41a409d139f717720516.jpg

解决方式就是像视频中一样,给li设置一个固定高度,如下:

http://img1.sycdn.imooc.com//climg/5fba444109ab77e605500268.jpg

li设置固定高度50px,会比a少3px,这样a往上移动3px,也不会露出来li的背景:

http://img1.sycdn.imooc.com//climg/5fba447609eefdcb04440320.jpg

效果如下:

http://img1.sycdn.imooc.com//climg/5fba448309b9213203050138.jpg

祝学习愉快~


  • 老师,就是说我这个会出现问题是因为没有给li设置高度,而li是块级元素,不设置高度的话,他的高度会被内容自动撑开,我在不给li设置高度的情况下,使用a:hover后,加上border-top:3px,我a实际的高度是53px,他就会撑开li原先的高度,让li的高度也变成53px,从而我a标签top上移后,露出来的橙色背景是li标签的。对吗?
    2020-11-22 20:03:18
  • 然后我把li的高度固定设置成50px的话,a的高度出现变化就会相当于溢出,而我再把a的溢出往上移3px,就可以达到要的效果了
    2020-11-22 20:05:30
好帮手慕夭夭 2020-11-23 09:31:08

同学你好,没错,可以这样理解哦。祝学习愉快~

问题已解决,确定采纳
还有疑问,暂不采纳

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

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

0 星
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

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