鼠标悬浮场景十分常见,例如导航菜单,当鼠标hover到某个菜单到时候,它到子菜单就显示出来。代码场景有两种:

1、菜单menu紧挨着user(不推荐)

利用相邻选择器,把它显示出来即可。

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>2.2 鼠标悬浮时显示菜单</title>
</head>
<style>
    /* helper */
    .menu {
        background: red;
    }

    .menu {
        display: none;
    }

    /* 利用相邻选择器,把它显示出来 */
    .user:hover + .menu {
        display: block;
    }

    .menu:hover {
        display: block;
    }
</style>
<body class="home">
<ul>
    <li class="user">用户</li>
    <li class="menu">
        <ul>
            <li>用户设置</li>
            <li>退出</li>
        </ul>
    </li>
</ul>
</body>
</html>

这里有一个问题,通常menu和导航需要有空隙来显得美观,如果用margin就会失去hover,但用padding又会影响样式。

其实这个也很简单,只需要在menu上面再画一个透明的区域即可:

.menu:before {
   content:"";
   width: 100%;
   height: 20px; /* 菜单与导航栏间距 */

}

2、使用子元素,这个更简单易懂(强烈推荐)

把目标和隐藏的对象当做同一个父容器的子元素,然后hover写在这个父容器上面就可以了。

也不用像上面一样,隐藏的元素本身也要写个hover。而且导航和菜单的间距,也可以通过菜单本身来margin自由发挥了。

值得注意一点是,li是不能包含另一个li的。所以这里使用div作为父容器。

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>2.2 鼠标悬浮时显示菜单</title>
</head>
<style>
    /* helper */
    .menu ul{
        background: red;
    }

    .menu {
        display: none;
    }

    .user:hover .menu {
        display: block;
    }

</style>
<body class="home">
    <div class="user">用户
        <li class="menu">
            <ul>
                <li>用户设置</li>
                <li>退出</li>
            </ul>
        </li>
    </div>
</body>
</html>

results matching ""

    No results matching ""