おはよう、レスポンス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/です。
私は、通常のドロップダウンメニューのような、そうでない全幅またはインライン – RPM
...この方法のように行うが、崩壊したときに、サブメニューはそれぞれの親の下に表示する必要がありますか? –
はい...オリジナルのフィドルを凝縮すると、サブセクションが左揃えと字下げになるようにスタイルされていますが、目的の動作が表示されます。 – RPM