CSS 下拉菜单在我单击之前关闭 [英] CSS dropdown menu closes before I click

查看:28
本文介绍了CSS 下拉菜单在我单击之前关闭的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个带有子菜单的 CSS 下拉导航菜单.我的问题是子菜单在我点击它之前关闭.当我将光标移动到子菜单的一半时,它消失了.例如,当我移动鼠标单击Item 3 sub 1.1"时,它消失了.

主下拉菜单工作正常,但子菜单有问题.

我该怎么做才能让子菜单保持到我点击它?...感谢您的帮助

这是我的菜单 CSS:

.nav {填充:0px;文本对齐:居中;边框:0px;垂直对齐:中间;显示:表格行;宽度:100%;边距:0px 自动;背景色:#660000;溢出:隐藏;位置:相对;高度:30;文本对齐:居中;边距:0px 自动 0px 自动;}ul{列表样式:无;填充:0px;边距:0px;向左飘浮;显示:内联;}乌利{显示:块;位置:相对;向左飘浮;左:85px;}律{显示:无;保证金:0;}乌利阿{显示:块;背景:#660000;填充:5px 10px 5px 10px;文字装饰:无;空白:nowrap;颜色:#fff;左边框:1px 实心 #660000;右边框:1px 实心 #660000;}ul li a:悬停{背景:#3300cc;显示:块;}li:悬停ul {位置:固定;显示:块;}李:悬停李{浮动:无;}li:悬停一个{背景:#3300cc;}li:hover li a:hover {背景:#660000;}.drop-nav li ul li {边框顶部:0px;z-索引:100;边框底部:0;右:0;左:0;}li li:悬停一个{显示:块;}li li ul a {边距顶部:-25px;底边距:25px;左边距:85px;显示:无;}li:hover li:hover ul li a:hover {边距顶部:-25px;底边距:25px;左边距:85px;溢出:无;}

这是html:

解决方案

您的 css 选择器非常混乱.只在下一行使用 ul lili ulli li ul a 太含糊了,并没有真正针对元素.虽然这种方法可能适用于一层深的嵌套,但当您开始嵌套 2 层深时,它会严重混淆(对于浏览器).

我会给每个 UL 元素一个特定的描述类,您可以精确定位.

此外,为您的 UL 使用 position 属性,不要忘记在菜单重叠时考虑 z-index.

像这样的东西,不是很漂亮,但它的工作方式符合您的预期.

<html lang="zh-cn"><头><meta charset="UTF-8"><title>文档</title><风格>.nav {位置:相对;顶部:0;宽度:80%;高度:自动;边框:1px 实心 #e6e6e6;边距:0 自动;font-family: 'Helvetica', Arial, sans-serif;}/* 根级 */.下拉式菜单 {位置:相对;顶部:0;左:0;填充:0;边距:0;背景:#eeeeee;}/* 清除浮动 */.下拉菜单:后{显示:表;内容: "";清楚:两者;}.dropdown-menu li {显示:块;左边框:1px 实心 #e6e6e6;右边框:1px 实心 #e6e6e6;最小宽度:150px;向左飘浮;}.dropdown-menu li a:link,.dropdown-menu li a:visited {填充:10px 15px;文字装饰:无;颜色:#111111;显示:块;}.dropdown-menu li a:hover,.dropdown-menu li a:focus {颜色:#222222;}/* 1级 */.dropdown-level-1 {位置:绝对;填充:0;边距:0;显示:无;背景:灰色;宽度:150px;}.dropdown-level-1 li {}/* >"触发直接子节点显示为块"*/.dropdown-menu li:hover >.dropdown-level-1 {显示:块;}/* 级别 2 */.dropdown-level-2 {位置:绝对;显示:无;背景:#888888;填充:0;边距:-38px 0 0 148px;}/* 2 级的相同技巧 */.dropdown-level-1 li:hover >.dropdown-level-2 {显示:块;}/* 一次定位所有链接 */.dropdown-level-0 li a:link,.dropdown-level-0 li a:visited,.dropdown-level-1 li a:link,.dropdown-level-1 li a:visited,.dropdown-level-2 li a:link,.dropdown-level-2 li a:visited {填充:10px;颜色:紫色;显示:块;}.dropdown-level-0 li a:hover,.dropdown-level-0 li a:focus,.dropdown-level-1 li a:hover,.dropdown-level-1 li a:focus,.dropdown-level-2 li a:hover,.dropdown-level-2 li a:focus {颜色为橙色;}</风格><身体><div class="nav"><ul class="下拉菜单"><li><a href="#">项目 1</a></li><li class="dropdown"><a href="#">项目 2</a><ul class="dropdown-level-1"><li><a href="#">项目 2 子 2</a><ul class="dropdown-level-2"><li><a href="#">项目 2 sub 1</a></li><li><a href="#">项目 2 sub 1</a></li><li><a href="#">Item 2 sub 2</a></li><li><a href="#">项目 2 子 2</a><ul class="dropdown-level-2"><li><a href="#">项目 2 sub 1</a></li><li><a href="#">项目 2 sub 1</a></li><li><a href="#">Item 2 sub 2</a></li><li><a href="#">项目 2 子 2</a><ul class="dropdown-level-2"><li><a href="#">项目 2 sub 1</a></li><li><a href="#">项目 2 sub 1</a></li><li><a href="#">Item 2 sub 2</a></li><li class="dropdown"><a href="#">项目 2</a><ul class="dropdown-level-1"><li><a href="#">项目 2 sub 1</a></li><li><a href="#">项目 2 sub 1</a></li><li><a href="#">项目 2 子 2</a><ul class="dropdown-level-2"><li><a href="#">项目 2 sub 1</a></li><li><a href="#">项目 2 sub 1</a></li><li><a href="#">Item 2 sub 2</a></li><li class="dropdown"><a href="#">项目 2</a><ul class="dropdown-level-1"><li><a href="#">项目 2 sub 1</a></li><li><a href="#">项目 2 sub 1</a></li><li><a href="#">项目 2 子 2</a><ul class="dropdown-level-2"><li><a href="#">项目 2 sub 1</a></li><li><a href="#">项目 2 sub 1</a></li><li><a href="#">Item 2 sub 2</a></li><li class="dropdown"><a href="#">项目 2</a><ul class="dropdown-level-1"><li><a href="#">项目 2 sub 1</a></li><li><a href="#">项目 2 sub 1</a></li><li><a href="#">第 2 项子 2 </a></li>

I have a CSS dropdown navigation menu with a submenu. My problem is that the submenu closes before I click on it. When I move the cursor halfway to the submenu, it disappears. For example when I move my mouse to click on "Item 3 sub 1.1", it disappears.

The main dropdown menu works fine but the submenu is the problem.

What can I do to make the submenu stay until I click on it?... Thanks for the help

This is my CSS for the menu:

.nav {
    padding: 0px;
    text-align: center;
    border: 0px;
    vertical-align: middle;
    display: table-row;
    width: 100%;
    margin: 0px auto;
    background-color:#660000;
    overflow: hidden;
    position:relative;
    height: 30;
    text-align: center;
    margin: 0px auto 0px auto;
}
ul {
    list-style: none;
    padding: 0px;
    margin: 0px;
    float:left;
    display:inline;
}
ul li {
    display:block;
    position: relative;
    float: left;
    left: 85px;
}
li ul {
    display: none;
    margin:0;
}
ul li a {
    display: block;
    background: #660000;
    padding: 5px 10px 5px 10px;
    text-decoration: none;
    white-space: nowrap;
    color: #fff;
    border-left:1px solid #660000;
    border-right:1px solid #660000;
}
ul li a:hover {
    background: #3300cc;
    display: block;
}
li:hover ul {
    position: fixed;
    display: block;
}
li:hover li {
    float: none;
}
li:hover a {
    background: #3300cc;
}
li:hover li a:hover {
    background: #660000;
}
.drop-nav li ul li {
    border-top: 0px;
    z-index: 100;
    border-bottom:0;
    right:0;
    left:0;
}
li li:hover a {
    display: block;
}
li li ul a {
    margin-top:-25px;
    margin-bottom: 25px;
    margin-left: 85px;
    display: none;
}
li:hover li:hover ul li a:hover {
    margin-top:-25px;
    margin-bottom:25px;
    margin-left: 85px;
    overflow: none;
}

This is the html:

<div class="nav" >
<ul class="drop-nav">
<li><a href="item1.html">Item 1</a></li>
<li><a href="#">Item 2</a>
  <ul>
    <li><a href="item2_1.html">Item 2 sub 1</a></li>
    <li><a href=" item2_2.html"> Item 2 sub 2</a></li>
    <li ><a href=" item2_3.html"> Item 2 sub 2</a></li>
  </ul>
</li>
<li><a href="#"> Item 3</a>
  <ul>
    <li><a href="#"> Item 3 sub 1 &raquo;</a>
      <ul>
        <li><a href=" item3_1_1.html"> Item 3 sub 1.1</a></li>
        <li><a href=" item3_1_2.html"> Item 3 sub 1.2</a></li>
        <li ><a href=" item3_1_3.html"> Item 3 sub 1.3</a></li>
      </ul>
    </li>
    <li><a href="#"> Item 3 sub 2 &raquo;</a>
      <ul>
        <li><a href=" item3_2_1.html"> Item 3 sub 2.1 </a></li>
        <li><a href=" item3_2_2.html"> Item 3 sub 2.2 </a></li>
        <li><a href=" item3_2_3.html"> Item 3 sub 2.3 </a></li>
      </ul>
    </li>
    <li><a href=" item3_3.html"> Item 3 sub 3 </a></li>
    <li><a href=" item3_4.html"> Item 3 sub 4 </a></li>
    <li><a href=" item3_5.html"> Item 3 sub 5 </a></li>
  </ul>
</li>
</ul>
</div>

解决方案

Your css selectors are very confusing. Only using ul li and then li ul or li li ul a on the next line is too vague and not really targeting an element. While this approach might work for nesting of one level deep, it seriously get's confusing (for the browser) when you start nesting 2 level deep.

I'd give each UL element a certain, descriptive class, which you can precisely target.

Additonally, make use of the position attribute for your UL and don't forget to think about z-index when menus overlap.

Something like this, not very pretty, but it works the way you propably expect.

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Document</title>
<style>
    .nav {
        position: relative;
        top: 0;
        width: 80%;
        height: auto;
        border: 1px solid #e6e6e6;
        margin: 0 auto;
        font-family: 'Helvetica', Arial, sans-serif;
    }
    /* Root Level */
    .dropdown-menu {
        position: relative;
        top: 0;
        left: 0;
        padding: 0;
        margin: 0;
        background: #eeeeee;
    }
    /* Clear the float */
    .dropdown-menu:after {
        display: table;
        content: "";
        clear: both;
    }
    .dropdown-menu li {
        display: block;
        border-left: 1px solid #e6e6e6;
        border-right: 1px solid #e6e6e6;
        min-width: 150px;
        float: left;

    }
    .dropdown-menu li a:link,
    .dropdown-menu li a:visited {
        padding: 10px 15px;
        text-decoration: none;
        color: #111111;
        display: block;
    }
    .dropdown-menu li a:hover,
    .dropdown-menu li a:focus {
        color: #222222;
    }
    /* Level 1 */
    .dropdown-level-1 {
        position: absolute;
        padding: 0;
        margin: 0;
        display: none;
        background: grey;
        width: 150px;
    }
    .dropdown-level-1 li {

    }
    /* The ">" triggers the direct child to show up as "block" */
    .dropdown-menu li:hover > .dropdown-level-1 {
        display: block;
    }
    /* Level 2 */
    .dropdown-level-2 {
        position: absolute;
        display: none;
        background: #888888;
        padding: 0;
        margin: -38px 0 0 148px;
    }
    /* same trick here for level 2 */
    .dropdown-level-1 li:hover > .dropdown-level-2 {
        display: block;
    }
    /* Target all links at once */
    .dropdown-level-0 li a:link,
    .dropdown-level-0 li a:visited,
    .dropdown-level-1 li a:link,
    .dropdown-level-1 li a:visited,
    .dropdown-level-2 li a:link,
    .dropdown-level-2 li a:visited {
        padding: 10px;
        color: purple;
        display: block;
    }
    .dropdown-level-0 li a:hover,
    .dropdown-level-0 li a:focus,
    .dropdown-level-1 li a:hover,
    .dropdown-level-1 li a:focus,
    .dropdown-level-2 li a:hover,
    .dropdown-level-2 li a:focus {
        color: orange;
    }
</style>
</head>
<body>
<div class="nav">
<ul class="dropdown-menu">
    <li><a href="#">Item 1</a></li>
    <li class="dropdown"><a href="#">Item 2</a>
        <ul class="dropdown-level-1">
            <li><a href="#">Item 2 sub 2</a>
                <ul class="dropdown-level-2">
                    <li><a href="#">Item 2 sub 1</a></li>
                    <li><a href="#">Item 2 sub 1</a></li>
                    <li><a href="#">Item 2 sub 2</a></li>
                </ul>
            </li>
            <li><a href="#">Item 2 sub 2</a>
                <ul class="dropdown-level-2">
                    <li><a href="#">Item 2 sub 1</a></li>
                    <li><a href="#">Item 2 sub 1</a></li>
                    <li><a href="#">Item 2 sub 2</a></li>
                </ul>
            </li>
            <li><a href="#">Item 2 sub 2</a>
                <ul class="dropdown-level-2">
                    <li><a href="#">Item 2 sub 1</a></li>
                    <li><a href="#">Item 2 sub 1</a></li>
                    <li><a href="#">Item 2 sub 2</a></li>
                </ul>
            </li>
        </ul>
    </li>
    <li class="dropdown"><a href="#">Item 2</a>
        <ul class="dropdown-level-1">
            <li><a href="#">Item 2 sub 1</a></li>
            <li><a href="#">Item 2 sub 1</a></li>
            <li><a href="#">Item 2 sub 2</a>
                <ul class="dropdown-level-2">
                    <li><a href="#">Item 2 sub 1</a></li>
                    <li><a href="#">Item 2 sub 1</a></li>
                    <li><a href="#">Item 2 sub 2</a></li>
                </ul>
            </li>
        </ul>
    </li>
    <li class="dropdown"><a href="#">Item 2</a>
        <ul class="dropdown-level-1">
            <li><a href="#">Item 2 sub 1</a></li>
            <li><a href="#">Item 2 sub 1</a></li>
            <li><a href="#">Item 2 sub 2</a>
                <ul class="dropdown-level-2">
                    <li><a href="#">Item 2 sub 1</a></li>
                    <li><a href="#">Item 2 sub 1</a></li>
                    <li><a href="#">Item 2 sub 2</a></li>
                </ul>
            </li>
        </ul>
    </li>
    <li class="dropdown"><a href="#">Item 2</a>
        <ul class="dropdown-level-1">
            <li><a href="#">Item 2 sub 1</a></li>
            <li><a href="#">Item 2 sub 1</a></li>
            <li><a href="#"> Item 2 sub 2</a></li>
        </ul>
    </li>
</ul>
</div>
</body>
</html>

这篇关于CSS 下拉菜单在我单击之前关闭的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆