【问题标题】:How to make CSS dropdown menu on click to dropdown如何在点击下拉菜单时制作 CSS 下拉菜单
【发布时间】:2012-11-03 02:46:12
【问题描述】:

如何让下面的css下拉菜单只接受click to dropdown?例如,现在当鼠标悬停“请选择”时。第二层出现。我想更改为单击“请选择”时,出现第二层。点击事件也应该适用于第二层菜单。

这是Fiddle

我正在使用 jquery,但不知道该怎么做。

html代码

 <ul class="dropdown">
        <li><a href="#">Please select</a>
            <ul class="sub_menu">
                 <li>
                     <a href="#">Artificial Turf</a>
                     <ul>
                        <li><a href="#">Indoor</a></li>
                        <li><a href="#">Outdoor</a></li>
                    </ul>                    
                </li>
                 <li>
                    <a href="#">Batting Cages</a>
                    <ul>
                        <li><a href="#">Indoor</a></li>
                        <li><a href="#">Outdoor</a></li>
                    </ul>
                 </li>
            </ul>
        </li>
    </ul​

CSS 代码

/* 
    LEVEL ONE
*/
ul.dropdown                         { position: relative; }
ul.dropdown li                      { font-weight: bold; float: left; zoom: 1; background: #ccc; }
ul.dropdown a:hover                    { color: #000; }
ul.dropdown a:active                { color: #ffa500; }
ul.dropdown li a                    { display: block; padding: 4px 8px; border-right: 1px solid #333;
                                       color: #222; }
ul.dropdown li:last-child a         { border-right: none; } /* Doesn't work in IE */
ul.dropdown li.hover,
ul.dropdown li:hover                { background: #F3D673; color: black; position: relative; }
ul.dropdown li.hover a              { color: black; }


/* 
    LEVEL TWO
*/
ul.dropdown ul                         { width: 220px; visibility: hidden; position: absolute; top: 100%; left: 0; }
ul.dropdown ul li                     { font-weight: normal; background: #f6f6f6; color: #000; 
                                      border-bottom: 1px solid #ccc; float: none; }

                                    /* IE 6 & 7 Needs Inline Block */
ul.dropdown ul li a                    { border-right: none; width: 100%; display: inline-block; } 

/* 
    LEVEL THREE
*/
ul.dropdown ul ul                     { left: 100%; top: 0; }
ul.dropdown li:hover > ul             { visibility: visible; }​

【问题讨论】:

  • 我很好奇不使用 Javascript 的 CSS 解决方案。也许可以使用伪选择器:active:focus 来完成。
  • 顺便说一句,您的 CSS 代码中的第 7 行和第 8 行是相同的,因此是多余的。

标签: jquery css drop-down-menu


【解决方案1】:

正如我在您的 css 中注意到的,您使用可见性来显示或隐藏 ul-s,因此您应该使用此代码

   $(".dropdown li").click(function() { 
        $(this).parent().children("li").not(this).children("ul").css({ "visibility":"hidden" });
        $(this).children("ul").css({ "visibility":"visible" });
    })​

你也应该从你的 css 中删除这一行

ul.dropdown li:hover &gt; ul { visibility: visible; }​

关闭标签使用此代码

$('html').click(function() {
   $(".dropdown ul").css({ "visibility":"hidden" });
 });

 $('.dropdown ').click(function(event){
     event.stopPropagation();
 });

最后一部分取自这个stackoverflow问题How to detect a click outside an element?

在悬停的情况下也可以修复位置变化,将 CSS 中的 2 行更改为此

ul.dropdown li  { font-weight: bold; float: left; zoom: 1; background: #ccc; position: relative; }

【讨论】:

  • 当我点击菜单外的任何地方时,我想关闭菜单。
  • 非常感谢约翰。我在这个小提琴jsfiddle.net/donli/panzd/3 中试过这个。当鼠标悬停在菜单外时,“请选择”消失。当点击菜单外的任何地方时,它又出现了。请指教!
  • 另外,当单击子菜单并将鼠标悬停到另一个子菜单时,似乎子菜单重叠。
  • 我修复了重叠部分,悬停错误似乎依赖于 css,等一下我会想办法解决的
  • 嗨约翰,你能告诉我点击第三层菜单项后如何关闭菜单吗?我在捕获点击事件但不起作用时使用 $(".dropdown ul").css({ "visibility":"hidden" });
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-12-03
  • 1970-01-01
  • 1970-01-01
  • 2021-04-22
相关资源
最近更新 更多