문제

I'm trying to get a submenu item to appear higher or lower along a list of menu items. Currently I have the submenu item to the right of the menu but always in a fixed location. It is 175px left of the menu. Can it move up and down in the list depending on the hovered menu item?

http://jsfiddle.net/zfmuf/7/

html

<nav id="main_menu">
                <div class="nav-collapse collapse">
                    <ul class="nav nav-pills">
                        <li class="dropdown active"><a     href="javascript:{}">Home</a> 
                        </li>
                        <li class="dropdown"><a href="javascript:{}">Services</a>
                    <ul class="dropdown-menu">
                            <li><a href="portraits.html">Portraits</a></li>
                        <li><a href="javascript:{}">Social - Event</a>
                        <ul class="dropdown-menu sub-menu">
                            <li><a href="wedding-photographers.html">Weddings</a></li>
                            <li><a href="bar-bat-mitzvah.html">Bar/Bat Mitzvahs</a></li>
                            <li><a href="404.html">Birthdays</a></li>
                            <li><a href="404.html">Balls</a></li>
                        </ul>
                        </li>    
                        <li><a href="javascript:{}">Commercial</a>
                        <ul class="dropdown-menu sub-menu"> 
                            <li><a href="architecture-photographers.html">Architecture</a></li>
                            <li><a href="jewelry-photographers.html">On Figure</a></li>
                            <li><a href="product-photographers.html">Product</a></li>
                            <li><a href="404.html">Food</a></li>
                        </ul>
                        </li>

                    </ul>
                        </li>
                        <li class="dropdown"><a href="javascript:{}">INFO/EXTRA</a>
                    <ul class="dropdown-menu">
                        <li><a href="javascript:{}">Client Galleries</a>
                        <ul class="dropdown-menu sub-menu">
                            <li><a href="http://photo.kochfoto.com/BarBatMitzvah">Bar &amp; Bat mitzvah</a></li>
                            <li><a href="http://photo.kochfoto.com/Commercial">Commercial</a></li>
                            <li><a href="http://photo.kochfoto.com/portraits">Portrait</a></li>
                            <li><a href="http://photo.kochfoto.com/weddings">Wedding</a></li>
                        </ul>
                        </li>
                            <li><a href="albums.html">Albums</a></li>
                            <li><a href="testimonials.html">Testimonials</a></li>
                            <li><a href="camera-bag.html">Camera Bag</a></li>
                            <li><a href="about.html">About</a></li>
                        </ul>
                        </li>
                        <li><a href="http://www.kochfoto.com/blog" target="_blank">BLOG</a></li>
                        <li><a href="contact.html">Contact</a></li>
                    </ul>
                </div>
            </nav>

css

body {
margin:0; padding:0;
font:13px/22px 'Lato', sans-serif;
color:#555;
background: #f0f0f0;  
-webkit-backface-visibility:hidden; 
overflow-x:hidden; 
text-rendering:optimizeLegibility;
}

#main_menu {float:right; margin:22px 0 0 0;}
.nav{ padding:0; margin:0; }
.nav-pills > li{
list-style: none;
float: left;
margin: 0;
position: relative;
padding: 0 0; 
display: inline-block;
}
.nav-pills > li > a {
font-weight: 400;
color: #bbb;
letter-spacing: 2px;
font-size: 13px;
display: block;
padding:24px 22px 22px 25px;
text-align: center!important;
text-transform: uppercase;
}

.nav-pills > li.active{
background: #C0392B; 
color:#fff;
webkit-border-radius: 4px 4px 0px 0px;
-moz-border-radius: 4px 4px 0px 0px;
border-radius: 4px 4px 0px 0px;
}
.nav-pills > .active > a, .nav-pills > .active > a:hover, .nav-pills > .active > a:focus {     background: transparent; }
.nav-pills > li > a:hover { background: transparent; color: #fff; }

.dropdown-menu {
background: #fff;
display: none;
left:-25px;
padding:0;
position:absolute;
top:80px;
width:170px;
z-index:300;
-webkit-border-radius: 4px;
-moz-border-radius: 4px;
border-radius: 4px;
background:#333;
box-shadow:none !important;
border:none;
}
.dropdown-menu > li > a {
border: 0;
color: #bbb; 
display: block;
font-size: 13px;
padding: 8px 20px !important;
text-align: left;
text-transform: none;
}
.dropdown-menu > li > a:hover, .dropdown-menu > li > a:focus, .dropdown-submenu:hover > a,         .dropdown-submenu:focus > a {text-decoration:none;  color: #fff;      background:transparent!important; }
.dropdown-menu > li:first-child { margin-top:4px;}
.dropdown-menu > li:last-child { margin-bottom:6px;}
.nav-tabs .open .dropdown-toggle, .nav-pills .open .dropdown-toggle, .nav >     li.dropdown.open.active > a:hover, .nav > li.dropdown.open.active > a:focus{ background-    color:transparent; border:0px; }

.dropdown-menu .sub-menu { visibility: hidden; left:175px; }
.dropdown-menu li:hover .sub-menu  { visibility: visible; }
.dropdown-menu .sub-menu:hover a { 
 -o-transition-property: none !important;
 -moz-transition-property: none !important;
 -ms-transition-property: none !important;
 -webkit-transition-property: none !important;
transition-property: none !important;
}
도움이 되었습니까?

해결책

It's a little bit of a dirty hack but it gets the job done.

jQuery Code:

jQuery('ul.nav li.dropdown').hover(function (){
    jQuery(this).find('.dropdown-menu').stop(true, true).delay(200).fadeIn();
    jQuery('a').hover(function() {
        var height = jQuery(this).offset();
        jQuery(this).parent().find('.sub-menu').css('top', height.top - +106);
    });
}, function (){
    jQuery(this).find('.dropdown-menu').stop(true, true).delay(200).fadeOut();      
});

jQuery('.btn-navbar').on('click',function(){
    jQuery('nav#main_menu > .nav-collapse > ul.nav-pills').slideDown();
}); 

jsFiddle: http://jsfiddle.net/zfmuf/9/

It gets the offset of the height in the div from the a, then adds it to the sub-menu class while removing the parents offset. Its quite a dirty little hack but it works.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top