2017-08-18 10 views
0

おはよう、レスポンスNavbar with Sub Navbar

私のnav語彙は最高ではありません。この質問が混乱している場合は、私はお詫び申し上げます。

私は768px以上のページの中央に配置する必要があるナビゲーションバーに取り組んでいます。 navのアイテムは、すぐ下にあるサブナブを開いている(または、おそらくは切り替える)。これらのナビは、ページの中央に表示される必要があります。

私は、メインアイテムが垂直に整列され、各アイテムのサブメニューが下に展開され、いくつかの分離のためにインデントを与えたナビゲーションバーの反応部分を処理することができました。これはうまくいきます。

しかし、私の問題は応答側ではありませんが、幅が768pxを超える場合の動作です。メニューのサブナビゲーションを切り替えると、他のメインアイテムがサブナビゲーションの下のページにプッシュされます。

はここに私のコードです:

$(document).ready(function() { 
 

 
    //stick in the fixed 100% height behind the navbar but don't wrap it 
 
    $('#slide-nav.navbar-inverse').after($('<div class="inverse" id="navbar-height-col"></div>')); 
 
    
 
    $('#slide-nav.navbar-default').after($('<div id="navbar-height-col"></div>')); 
 

 
    // Enter your ids or classes 
 
    var toggler = '.navbar-toggle'; 
 
    var pagewrapper = '#page-content'; 
 
    var navigationwrapper = '.navbar-header'; 
 
    var menuwidth = '100%'; // the menu inside the slide menu itself 
 
    var slidewidth = '80%'; 
 
    var menuneg = '-100%'; 
 
    var slideneg = '-80%'; 
 

 

 
    $("#slide-nav").on("click", toggler, function (e) { 
 

 
     var selected = $(this).hasClass('slide-active'); 
 

 
     $('#slidemenu').stop().animate({ 
 
      left: selected ? menuneg : '0px' 
 
     }); 
 

 
     $('#navbar-height-col').stop().animate({ 
 
      left: selected ? slideneg : '0px' 
 
     }); 
 

 
     $(pagewrapper).stop().animate({ 
 
      left: selected ? '0px' : slidewidth 
 
     }); 
 

 
     $(navigationwrapper).stop().animate({ 
 
      left: selected ? '0px' : slidewidth 
 
     }); 
 

 

 
     $(this).toggleClass('slide-active', !selected); 
 
     $('#slidemenu').toggleClass('slide-active'); 
 

 

 
     $('#page-content, .navbar, body, .navbar-header').toggleClass('slide-active'); 
 

 

 
    }); 
 

 

 
    var selected = '#slidemenu, #page-content, body, .navbar, .navbar-header'; 
 

 

 
    $(window).on("resize", function() { 
 

 
     if ($(window).width() > 767 && $('.navbar-toggle').is(':hidden')) { 
 
      $(selected).removeClass('slide-active'); 
 
     } 
 

 

 
    }); 
 

 
});
\t .containerFluid { 
 
\t width: 1280px; 
 
\t margin: 0 auto; 
 
\t } 
 
\t 
 
\t @media (max-width:767px) { 
 
\t .subMenuDiv { 
 
\t  position: realtive; 
 
\t } 
 
\t } 
 
\t 
 
\t body.slide-active { 
 
\t overflow-x: hidden 
 
\t } 
 
\t /*first child of #page-content so it doesn't shift around*/ 
 
\t 
 
\t .no-margin-top { 
 
\t margin-top: 0px!important 
 
\t } 
 
\t 
 
\t #slide-nav .navbar-toggle .icon-bar { 
 
\t background: white; 
 
\t } 
 
\t /*wrap the entire page content but not nav inside this div if not a fixed top, don't add any top padding */ 
 
\t 
 
\t #page-content { 
 
\t position: relative; 
 
\t padding-top: 70px; 
 
\t left: 0; 
 
\t } 
 
\t 
 
\t #page-content.slide-active { 
 
\t padding-top: 0 
 
\t } 
 
\t /* put toggle bars on the left :: not using button */ 
 
\t 
 
\t #slide-nav .navbar-toggle { 
 
\t cursor: pointer; 
 
\t position: relative; 
 
\t line-height: 0; 
 
\t float: left; 
 
\t margin: 0; 
 
\t width: 30px; 
 
\t height: 40px; 
 
\t padding: 10px 0 0 0; 
 
\t border: 0; 
 
\t background: transparent; 
 
\t } 
 
\t /* icon bar prettyup - optional */ 
 
\t 
 
\t #slide-nav .navbar-toggle > .icon-bar { 
 
\t width: 100%; 
 
\t display: block; 
 
\t height: 3px; 
 
\t margin: 5px 0 0 0; 
 
\t } 
 
\t 
 
\t #slide-nav .navbar-toggle.slide-active .icon-bar { 
 
\t background: orange 
 
\t } 
 
\t 
 
\t .navbar-header { 
 
\t position: relative 
 
\t } 
 
\t 
 
\t #page-content { 
 
\t width: 1280px; 
 
\t margin: 0 auto; 
 
\t } 
 
\t /* un fix the navbar when active so that all the menu items are accessible */ 
 
\t 
 
\t .navbar.navbar-fixed-top.slide-active { 
 
\t position: relative 
 
\t } 
 
\t 
 
\t @media (max-width:767px) { 
 
\t #slide-nav .container { 
 
\t  margin: 0!important; 
 
\t  padding: 0!important; 
 
\t  height: 100%; 
 
\t } 
 
\t #slide-nav .navbar-header { 
 
\t  margin: 0 auto; 
 
\t  padding: 0 15px; 
 
\t } 
 
\t #slide-nav .navbar.slide-active { 
 
\t  position: absolute; 
 
\t  width: 80%; 
 
\t  top: -1px; 
 
\t  z-index: 1000; 
 
\t } 
 
\t #slide-nav #slidemenu { 
 
\t  background: #f7f7f7; 
 
\t  left: -100%; 
 
\t  width: 80%; 
 
\t  min-width: 0; 
 
\t  position: absolute; 
 
\t  padding-left: 0; 
 
\t  z-index: 2; 
 
\t  top: -8px; 
 
\t  margin: 0; 
 
\t } 
 
\t #slide-nav #slidemenu .navbar-nav { 
 
\t  min-width: 0; 
 
\t  width: 100%; 
 
\t  margin: 0; 
 
\t } 
 
\t #slide-nav #slidemenu .navbar-nav .dropdown-menu li a { 
 
\t  min-width: 0; 
 
\t  width: 80%; 
 
\t  white-space: normal; 
 
\t } 
 
\t #slide-nav { 
 
\t  border-top: 0 
 
\t } 
 
\t #slide-nav.navbar-inverse #slidemenu { 
 
\t  background: #333 
 
\t } 
 
\t /* this is behind the navigation but the navigation is not inside it so that the navigation is accessible and scrolls*/ 
 
\t #navbar-height-col { 
 
\t  position: fixed; 
 
\t  top: 0; 
 
\t  height: 100%; 
 
\t  bottom: 0; 
 
\t  width: 80%; 
 
\t  left: -80%; 
 
\t  background: #f7f7f7; 
 
\t } 
 
\t #navbar-height-col.inverse { 
 
\t  background: #333; 
 
\t  z-index: 1; 
 
\t  border: 0; 
 
\t } 
 
\t #slide-nav .navbar-form { 
 
\t  width: 100%; 
 
\t  margin: 8px 0; 
 
\t  text-align: center; 
 
\t  overflow: hidden; 
 
\t  /*fast clearfixer*/ 
 
\t } 
 
\t #slide-nav .navbar-form .form-control { 
 
\t  text-align: center 
 
\t } 
 
\t #slide-nav .navbar-form .btn { 
 
\t  width: 100% 
 
\t } 
 
\t } 
 
\t 
 
\t @media (min-width:768px) { 
 
\t #page-content { 
 
\t  left: 0!important 
 
\t } 
 
\t .navbar.navbar-fixed-top.slide-active { 
 
\t  position: fixed 
 
\t } 
 
\t .navbar-header { 
 
\t  left: 0!important 
 
\t } 
 
\t }
<div class="navbar navbar-inverse navbar-fixed-top" role="navigation" id="slide-nav"> 
 
    <div class="containerFluid"> 
 
     <div class="navbar-header"> 
 
     <a class="navbar-toggle"> 
 
      <span class="sr-only">Toggle navigation</span> 
 
      <span class="icon-bar"></span> 
 
      <span class="icon-bar"></span> 
 
      <span class="icon-bar"></span> 
 
     </a> 
 
     </div> 
 
     <div id="slidemenu"> 
 
     <ul class="nav navbar-nav"> 
 
      <li><a href="#" data-toggle="collapse" data-target="#sec1">Section 1</a> 
 
      <div class="subMenuDiv"> 
 
       <ul class="nav nav-justified collapse" id="sec1"> 
 
       <li><a href="#" class="nav-item" id=""><span class="nav-item-name">Sub-Section 1 1</span></a></li> 
 
       <li><a href="#" class="nav-item" id=""><span class="nav-item-name">Sub-Section 1 2</span></a></li> 
 
       <li><a href="#" class="nav-item" id=""><span class="nav-item-name">Sub-Section 1 3</span></a></li> 
 
       <li><a href="#" class="nav-item" id=""><span class="nav-item-name">Sub-Section 1 4</span></a></li> 
 
       </ul> 
 
      </div> 
 
      </li> 
 
      <li><a href="#" data-toggle="collapse" data-target="#sec2">Section 2</a> 
 
      <div class="subMenuDiv"> 
 
       <ul class="nav nav-justified collapse" id="sec2"> 
 
       <li><a href="#" class="nav-item" id=""><span class="nav-item-name">Sub-Section 2 1</span></a></li> 
 
       <li><a href="#" class="nav-item" id=""><span class="nav-item-name">Sub-Section 2 2</span></a></li> 
 
       <li><a href="#" class="nav-item" id=""><span class="nav-item-name">Sub-Section 2 3</span></a></li> 
 
       <li><a href="#" class="nav-item" id=""><span class="nav-item-name">Sub-Section 2 3</span></a></li> 
 
       </ul> 
 
      </div> 
 
      </li> 
 
      <li><a href="#" data-toggle="collapse" data-target="#xbprom">Section 3</a> 
 
      <div class="subMenuDiv"> 
 
       <ul class="nav nav-justified collapse" id="xbprom"> 
 
       <li><a href="#" class="xbnav-item" id=""><span class="xbnav-item-name">Sub-Section 3 1</span></a></li> 
 
       <li><a href="#" class="xbnav-item" id=""><span class="xbnav-item-name">Sub-Section 3 2</span></a></li> 
 
       <li><a href="#" class="xbnav-item" id=""><span class="xbnav-item-name">Sub-Section 3 3</span></a></li> 
 
       </ul> 
 
      </div> 
 
      </li> 
 
     </ul>

ここではいくつかのスタイル要素は、簡潔にするために不足しているフィドルhttps://jsfiddle.net/8j600vmd/4/です。

答えて

1

これを行う方法は次のとおりです。<li>の下からsubMenuDivを移動し、そのdivにサブメニューを配置します。そうすることで、絶対的な位置を使わなくてもメニューの下に表示されます。浮動小数点のいくつかをXnay、中央にテキスト整列、およびビオラ!私は他の人たちを近づけるためにjsに追加しなかった。

https://jsfiddle.net/meinkep2/8j600vmd/6/

+0

私は、通常のドロップダウンメニューのような、そうでない全幅またはインライン – RPM

+0

...この方法のように行うが、崩壊したときに、サブメニューはそれぞれの親の下に表示する必要がありますか? –

+0

はい...オリジナルのフィドルを凝縮すると、サブセクションが左揃えと字下げになるようにスタイルされていますが、目的の動作が表示されます。 – RPM

関連する問題