简体   繁体   中英

Bootstrap menu is not collapsed by default in mobile view

I tried to implement a vertical navigation with twitter bootstrap 3.0 that collapses automatically.

The basics work (window size small = menu at the top like it should be), but the problem is that it is not collapsed as it is if I use the default navbar features in bootstrap.

<div class="container-fluid">

        <div class="row">
            <div class="navbar-brand">
                <a href="<g:createLink uri="/" absolute="true" />">BABSI</a>
            </div>
            <button type="button" class="btn navbar-btn" data-toggle="collapse"
                    data-target="#sidebar">TOOGLE

                    Toggle navigation
                    <span class="icon-bar"></span> <span class="icon-bar"></span> 
                    <span class="icon-bar"></span>
                </button>
        </div>
        <div class="row">
            <header id="sidebar" class="col-md-2 collapse">

                <div class="row">

                                    <!-- generates ul structure -->
                    <nav:primary class="nav navbar-inverse nav-stacked" />
                </div>
            </header>
            <section id="content" class="col-md-10">
                <div class="row"></div>
                <div class="panel panel-default">
                    <div class="panel-heading">
                        <g:layoutTitle />
                    </div>
                    <div class="panel-body">
                        <g:layoutBody />
                    </div>
                </div>
            </section>
        </div>
    </div>

You need the .navbar-collapse class in your nav since that's the one that is set up to collapse at the given breakpoint.

I made some changes in your markup to accommodate that and also added a .navbar container so you can easily use the .navbar-toggle class on the button:

<div class="container">
    <div class="navbar navbar-default">
        <div class="navbar-brand"> 
            <a href="#">BABSI</a>
        </div>
        <button type="button" class="navbar-toggle" data-toggle="collapse" data-target="#sidebar .navbar-collapse"> 
            <span class="icon-bar"></span>  
            <span class="icon-bar"></span>
            <span class="icon-bar"></span>
        </button>
    </div>
    <div class="row">
        <header id="sidebar" class="col-md-2">
            <div class="collapse navbar-collapse">
                <!-- generates ul structure -->
                <nav:primary class="nav navbar-inverse nav-stacked" />
            </div>
        </header>
        <section id="content" class="col-md-10">
            <div class="row"></div>
            <div class="panel panel-default">
                <div class="panel-heading">
                    <g:layoutTitle />
                </div>
                <div class="panel-body">
                    <g:layoutBody />
                </div>
            </div>
        </section>
    </div>
</div>

To remove unwanted styles and since you're not using the default navbar-collapse structure you need to add this to your CSS

//remove background and border from navbar
.navbar-default{
    background: none;
    border: 0;
}
.navbar-collapse{
    padding: 0;
}

//override width:auto of navbar-collapse
@media (min-width:768px) {
    .navbar-collapse {
        width: 100%;
    }
}

Here's a demo fiddle with the changes

Try this.

<script>
    $('.navbar-collapse a').click(function(){
        $(".navbar-collapse").collapse('hide');
    });
</script>

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM