CSS Drop Down Menu

前端 未结 3 725
梦如初夏
梦如初夏 2020-12-04 04:00

I\'m trying to make a simple CSS drop down menu that when you mouse over a link, the sub menu appears. I\'ve managed to achieve this when you mouse over an li but can\'t fig

相关标签:
3条回答
  • 2020-12-04 04:12
    <!doctype html>
    <html lang=''>
    <head>
       <meta charset='utf-8'>
       <meta http-equiv="X-UA-Compatible" content="IE=edge">
       <meta name="viewport" content="width=device-width, initial-scale=1">
       <link rel="stylesheet" href="styles.css">
       <script src="http://webdesign9.in/js/jquery.js" type="text/javascript"></script>
        <script type="text/javascript">
            (function($) {
    $.fn.menumaker = function(options) {  
     var cssmenu = $(this), settings = $.extend({
       format: "dropdown",
       sticky: false
     }, options);
     return this.each(function() {
       $(this).find(".button").on('click', function(){
         $(this).toggleClass('menu-opened');
         var mainmenu = $(this).next('ul');
         if (mainmenu.hasClass('open')) { 
           mainmenu.slideToggle().removeClass('open');
         }
         else {
           mainmenu.slideToggle().addClass('open');
           if (settings.format === "dropdown") {
             mainmenu.find('ul').show();
           }
         }
       });
       cssmenu.find('li ul').parent().addClass('has-sub');
    multiTg = function() {
         cssmenu.find(".has-sub").prepend('<span class="submenu-button"></span>');
         cssmenu.find('.submenu-button').on('click', function() {
           $(this).toggleClass('submenu-opened');
           if ($(this).siblings('ul').hasClass('open')) {
             $(this).siblings('ul').removeClass('open').slideToggle();
           }
           else {
             $(this).siblings('ul').addClass('open').slideToggle();
           }
         });
       };
       if (settings.format === 'multitoggle') multiTg();
       else cssmenu.addClass('dropdown');
       if (settings.sticky === true) cssmenu.css('position', 'fixed');
    resizeFix = function() {
      var mediasize = 900;
         if ($( window ).width() > mediasize) {
           cssmenu.find('ul').show();
         }
         if ($(window).width() <= mediasize) {
           cssmenu.find('ul').hide().removeClass('open');
         }
       };
       resizeFix();
       return $(window).on('resize', resizeFix);
     });
      };
    })(jQuery);
    
    (function($){
    $(document).ready(function(){
    $("#cssmenu").menumaker({
       format: "multitoggle"
    });
    });
    })(jQuery);
        </script>
       <title>WELCOME TO WEBDESIGN9.IN</title>
       <style>
       #cssmenu,#cssmenu ul,#cssmenu ul li,#cssmenu ul li a,#cssmenu #head-mobile{border:0;list-style:none;line-height:1;display:block;position:relative;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}
    #cssmenu:after,#cssmenu > ul:after{content:".";display:block;clear:both;visibility:hidden;line-height:0;height:0}
    #cssmenu #head-mobile{display:none}
    #cssmenu{font-family:sans-serif;background:#EEE;}
    #cssmenu > ul > li{float:left}
    #cssmenu > ul > li > a{padding:17px;font-size:12px;letter-spacing:1px;text-decoration:none;color:#ffffd;font-weight:700;}
    #cssmenu > ul > li:hover > a,#cssmenu ul li.active a{color:#fff}
    #cssmenu > ul > li:hover,#cssmenu ul li.active:hover,#cssmenu ul li.active,#cssmenu ul li.has-sub.active:hover{background:#448D00!important;-webkit-transition:background .3s ease;-ms-transition:background .3s ease;transition:background .3s ease;}
    #cssmenu > ul > li.has-sub > a{padding-right:30px}
    #cssmenu > ul > li.has-sub > a:after{position:absolute;top:22px;right:11px;width:8px;height:2px;display:block;background:#ffffd;content:''}
    #cssmenu > ul > li.has-sub > a:before{position:absolute;top:19px;right:14px;display:block;width:2px;height:8px;background:#ffffd;content:'';-webkit-transition:all .25s ease;-ms-transition:all .25s ease;transition:all .25s ease}
    #cssmenu > ul > li.has-sub:hover > a:before{top:23px;height:0}
    #cssmenu ul ul{position:absolute;left:-9999px}
    #cssmenu ul ul li{height:0;-webkit-transition:all .25s ease;-ms-transition:all .25s ease;background:#333;transition:all .25s ease}
    #cssmenu ul ul li:hover{}
    #cssmenu li:hover > ul{left:auto}
    #cssmenu li:hover > ul > li{height:35px}
    #cssmenu ul ul ul{margin-left:100%;top:0}
    #cssmenu ul ul li a{border-bottom:1px solid rgba(150,150,150,0.15);padding:11px 15px;width:170px;font-size:12px;text-decoration:none;color:#ffffd;font-weight:400;}
    #cssmenu ul ul li:last-child > a,#cssmenu ul ul li.last-item > a{border-bottom:0}
    #cssmenu ul ul li:hover > a,#cssmenu ul ul li a:hover{color:#fff}
    #cssmenu ul ul li.has-sub > a:after{position:absolute;top:16px;right:11px;width:8px;height:2px;display:block;background:#ffffd;content:''}
    #cssmenu ul ul li.has-sub > a:before{position:absolute;top:13px;right:14px;display:block;width:2px;height:8px;background:#ffffd;content:'';-webkit-transition:all .25s ease;-ms-transition:all .25s ease;transition:all .25s ease}
    #cssmenu ul ul > li.has-sub:hover > a:before{top:17px;height:0}
    #cssmenu ul ul li.has-sub:hover,#cssmenu ul li.has-sub ul li.has-sub ul li:hover{background:#363636;}
    #cssmenu ul ul ul li.active a{border-left:1px solid #333}
    #cssmenu > ul > li.has-sub > ul > li.active > a,#cssmenu > ul ul > li.has-sub > ul > li.active> a{border-top:1px solid #333}
    
    @media screen and (max-width:900px){
    .logo{position:absolute;top:0;left: 0;width:100%;height:46px;text-align:center;padding:10px 0 0 0 ;float:none}
    .logo2{display:none}
    nav{width:100%;}
    #cssmenu{width:100%}
    #cssmenu ul{width:100%;display:none}
    #cssmenu ul li{width:100%;border-top:1px solid #444}
    #cssmenu ul li:hover{background:#363636;}
    #cssmenu ul ul li,#cssmenu li:hover > ul > li{height:auto}
    #cssmenu ul li a,#cssmenu ul ul li a{width:100%;border-bottom:0}
    #cssmenu > ul > li{float:none}
    #cssmenu ul ul li a{padding-left:25px}
    #cssmenu ul ul li{background:#333!important;}
    #cssmenu ul ul li:hover{background:#363636!important}
    #cssmenu ul ul ul li a{padding-left:35px}
    #cssmenu ul ul li a{color:#ffffd;background:none}
    #cssmenu ul ul li:hover > a,#cssmenu ul ul li.active > a{color:#fff}
    #cssmenu ul ul,#cssmenu ul ul ul{position:relative;left:0;width:100%;margin:0;text-align:left}
    #cssmenu > ul > li.has-sub > a:after,#cssmenu > ul > li.has-sub > a:before,#cssmenu ul ul > li.has-sub > a:after,#cssmenu ul ul > li.has-sub > a:before{display:none}
    #cssmenu #head-mobile{display:block;padding:23px;color:#ffffd;font-size:12px;font-weight:700}
    .button{width:55px;height:46px;position:absolute;right:0;top:0;cursor:pointer;z-index: 12399994;}
    .button:after{position:absolute;top:22px;right:20px;display:block;height:4px;width:20px;border-top:2px solid #ffffdffffd;border-bottom:2px solid #ffffdffffd;content:''}
    .button:before{-webkit-transition:all .3s ease;-ms-transition:all .3s ease;transition:all .3s ease;position:absolute;top:16px;right:20px;display:block;height:2px;width:20px;background:#ffffd;content:''}
    .button.menu-opened:after{-webkit-transition:all .3s ease;-ms-transition:all .3s ease;transition:all .3s ease;top:23px;border:0;height:2px;width:19px;background:#fff;-webkit-transform:rotate(45deg);-moz-transform:rotate(45deg);-ms-transform:rotate(45deg);-o-transform:rotate(45deg);transform:rotate(45deg)}
    .button.menu-opened:before{top:23px;background:#fff;width:19px;-webkit-transform:rotate(-45deg);-moz-transform:rotate(-45deg);-ms-transform:rotate(-45deg);-o-transform:rotate(-45deg);transform:rotate(-45deg)}
    #cssmenu .submenu-button{position:absolute;z-index:99;right:0;top:0;display:block;border-left:1px solid #444;height:46px;width:46px;cursor:pointer}
    #cssmenu .submenu-button.submenu-opened{background:#262626}
    #cssmenu ul ul .submenu-button{height:34px;width:34px}
    #cssmenu .submenu-button:after{position:absolute;top:22px;right:19px;width:8px;height:2px;display:block;background:#ffffd;content:''}
    #cssmenu ul ul .submenu-button:after{top:15px;right:13px}
    #cssmenu .submenu-button.submenu-opened:after{background:#fff}
    #cssmenu .submenu-button:before{position:absolute;top:19px;right:22px;display:block;width:2px;height:8px;background:#ffffd;content:''}
    #cssmenu ul ul .submenu-button:before{top:12px;right:16px}
    #cssmenu .submenu-button.submenu-opened:before{display:none}
    #cssmenu ul ul ul li.active a{border-left:none}
    #cssmenu > ul > li.has-sub > ul > li.active > a,#cssmenu > ul ul > li.has-sub > ul > li.active > a{border-top:none}
    }
       </style>
    </head>
    <body>
    
    <header>
    <nav id='cssmenu'>
    <div class="logo"><a href="index.php">Responsive </a></div>
    <div id="head-mobile"></div>
    <div class="button"></div>
    <ul>
    <li class='active'><a href='#'>HOME</a></li>
    <li><a href='#'>ABOUT</a></li>
    <li><a href='#'>PRODUCTS</a>
       <ul>
          <li><a href='#'>Product 1</a>
             <ul>
                <li><a href='#'>Sub Product</a></li>
                <li><a href='#'>Sub Product</a></li>
             </ul>
          </li>
          <li><a href='#'>Product 2</a>
             <ul>
                <li><a href='#'>Sub Product</a></li>
                <li><a href='#'>Sub Product</a></li>
             </ul>
          </li>
       </ul>
    </li>
    <li><a href='#'>BIO</a></li>
    <li><a href='#'>VIDEO</a></li>
    <li><a href='#'>GALLERY</a></li>
    <li><a href='#'>CONTACT</a></li>
    </ul>
    </nav>
    </header>
    </body>
    <html>
    
    0 讨论(0)
  • 2020-12-04 04:15

    Simply put, this is not something you can do in CSS as the nested <ul> is in the <li> and not the <a> (Or the entire submenu would be a link and that's just silly)

    You can get around that with javascript/jquery

    $('.menu ul li a').hover(function() {
        $(this).parent().children('ul').toggle();
    });
    
    0 讨论(0)
  • 2020-12-04 04:18

    I would avoid using JS for this if possible. It's not necessary. Just stick a div inside your li (with a bit less padding on it than the li itself) and style the div:hover to display:block;.

    Here's a fiddle demonstrating the approach. It's much like what you already have.

    0 讨论(0)
提交回复
热议问题