Bootstrap 3在Mobile上的菜单/导航栏中滑动

 荒唐中带着正经_638 发布于 2023-02-07 11:58

我正在构建一个基于浏览器的移动应用程序,我决定使用Bootstrap 3作为设计的css框架.Bootstrap 3在导航栏中提供了一个很棒的"响应"功能,如果它检测到有关浏览器分辨率的特定"断点",它会自动折叠.它适用于很多情况.

但是你最近注意到很多基于浏览器的移动应用程序如何将主导航隐藏在屏幕左侧,当在右上角按下(切换)切换图标时,主导航滑出到大约2/3进入屏幕的权利?这是一种越来越流行的解决方案,用于在移动设备上浏览基于浏览器的应用程序,我认为理论上应该很容易修改bootstrap css/js以适应此版本的导航折叠功能.

如何实现这些功能?似乎不应该采取太多修改.我真的很想听听你对此事的想法/解决方案.此外,我认为Bootstrap作为内置功能实现是一个很好的长期解决方案.

不幸的是,我没有尝试创建这个功能,因为虽然我熟悉这些技术,但我主要是一个PHP/MySQL开发人员,我相信一个有用的功能应该由具有洞察力的专家构建,我没有作为前端开发人员.

2 个回答
  • 这是我自己的项目,我也在这里分享.

    演示:http://jsbin.com/OjOTIGaP/1/edit

    这个在3.2之后有问题,所以下面的那个可能对你更好:

    https://jsbin.com/seqola/2/edit ---稍微改善版本


    CSS

    /* adjust body when menu is open */
    body.slide-active {
        overflow-x: hidden
    }
    /*first child of #page-content so it doesn't shift around*/
    .no-margin-top {
        margin-top: 0px!important
    }
    /*wrap the entire page content but not nav inside this div if not a fixed top, don't add any top padding */
    #page-content {
        position: relative;
        padding-top: 70px;
        left: 0;
    }
    #page-content.slide-active {
        padding-top: 0
    }
    /* put toggle bars on the left :: not using button */
    #slide-nav .navbar-toggle {
        cursor: pointer;
        position: relative;
        line-height: 0;
        float: left;
        margin: 0;
        width: 30px;
        height: 40px;
        padding: 10px 0 0 0;
        border: 0;
        background: transparent;
    }
    /* icon bar prettyup - optional */
    #slide-nav .navbar-toggle > .icon-bar {
        width: 100%;
        display: block;
        height: 3px;
        margin: 5px 0 0 0;
    }
    #slide-nav .navbar-toggle.slide-active .icon-bar {
        background: orange
    }
    .navbar-header {
        position: relative
    }
    /* un fix the navbar when active so that all the menu items are accessible */
    .navbar.navbar-fixed-top.slide-active {
        position: relative
    }
    /* screw writing importants and shit, just stick it in max width since these classes are not shared between sizes */
    @media (max-width:767px) { 
        #slide-nav .container {
            margin: 0;
            padding: 0!important;
        }
        #slide-nav .navbar-header {
            margin: 0 auto;
            padding: 0 15px;
        }
        #slide-nav .navbar.slide-active {
            position: absolute;
            width: 80%;
            top: -1px;
            z-index: 1000;
        }
        #slide-nav #slidemenu {
            background: #f7f7f7;
            left: -100%;
            width: 80%;
            min-width: 0;
            position: absolute;
            padding-left: 0;
            z-index: 2;
            top: -8px;
            margin: 0;
        }
        #slide-nav #slidemenu .navbar-nav {
            min-width: 0;
            width: 100%;
            margin: 0;
        }
        #slide-nav #slidemenu .navbar-nav .dropdown-menu li a {
            min-width: 0;
            width: 80%;
            white-space: normal;
        }
        #slide-nav {
            border-top: 0
        }
        #slide-nav.navbar-inverse #slidemenu {
            background: #333
        }
        /* this is behind the navigation but the navigation is not inside it so that the navigation is accessible and scrolls*/
        #slide-nav #navbar-height-col {
            position: fixed;
            top: 0;
            height: 100%;
            width: 80%;
            left: -80%;
            background: #eee;
        }
        #slide-nav.navbar-inverse #navbar-height-col {
            background: #333;
            z-index: 1;
            border: 0;
        }
        #slide-nav .navbar-form {
            width: 100%;
            margin: 8px 0;
            text-align: center;
            overflow: hidden;
            /*fast clearfixer*/
        }
        #slide-nav .navbar-form .form-control {
            text-align: center
        }
        #slide-nav .navbar-form .btn {
            width: 100%
        }
    }
    @media (min-width:768px) { 
        #page-content {
            left: 0!important
        }
        .navbar.navbar-fixed-top.slide-active {
            position: fixed
        }
        .navbar-header {
            left: 0!important
        }
    }
    

    HTML

     <div class="navbar navbar-inverse navbar-fixed-top" role="navigation" id="slide-nav">
      <div class="container">
       <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>
        <a class="navbar-brand" href="#">Project name</a>
       </div>
       <div id="slidemenu">
    
              <form class="navbar-form navbar-right" role="form">
                <div class="form-group">
                  <input type="search" placeholder="search" class="form-control">
                </div>
                <button type="submit" class="btn btn-primary">Search</button>
              </form>
    
        <ul class="nav navbar-nav">
         <li class="active"><a href="#">Home</a></li>
         <li><a href="#about">About</a></li>
         <li><a href="#contact">Contact</a></li>
         <li class="dropdown"> <a href="#" class="dropdown-toggle" data-toggle="dropdown">Dropdown <b class="caret"></b></a>
          <ul class="dropdown-menu">
           <li><a href="#">Action</a></li>
           <li><a href="#">Another action</a></li>
           <li><a href="#">Something else here</a></li>
           <li class="divider"></li>
           <li class="dropdown-header">Nav header</li>
           <li><a href="#">Separated link</a></li>
           <li><a href="#">One more separated link</a></li>
           <li><a href="#">Action</a></li>
           <li><a href="#">Another action</a></li>
           <li><a href="#">Something else here</a></li>
           <li class="divider"></li>
           <li class="dropdown-header">Nav header</li>
           <li><a href="#">Separated link</a></li>
           <li><a href="#">One more separated link</a></li>
           <li><a href="#">Action</a></li>
           <li><a href="#">Another action</a></li>
           <li><a href="#">Something else here</a></li>
           <li class="divider"></li>
           <li class="dropdown-header">Nav header</li>
           <li><a href="#">Separated link test long title goes here</a></li>
           <li><a href="#">One more separated link</a></li>
          </ul>
         </li>
        </ul>
    
       </div>
      </div>
     </div>
    

    jQuery的

    $(document).ready(function () {
    
    
        //stick in the fixed 100% height behind the navbar but don't wrap it
        $('#slide-nav.navbar .container').append($('<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');
            }
    
    
        });
    
    });
    

    2023-02-07 11:59 回答
  • Bootstrap 4

    在Bootstrap 4中创建响应式导航栏侧边栏"抽屉"?

    Bootstrap 3

    我认为你所寻找的通常被称为"非画布"布局.以下是官方Bootstrap文档的标准画布示例:http://getbootstrap.com/examples/offcanvas/

    "官方"示例使用右侧边栏与顶部导航栏菜单分别关闭和打开.我还发现这些从左侧滑入的画布外变化可能更接近您正在寻找的东西.

    http://www.bootstrapzero.com/bootstrap-template/off-canvas-sidebar http://www.bootstrapzero.com/bootstrap-template/facebook

    2023-02-07 12:01 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有