【问题标题】:md-sidenav toggle() is on top of the md-toolbarmd-sidenav toggle() 在 md-toolbar 的顶部
【发布时间】:2015-09-30 16:40:02
【问题描述】:

我希望能够在不隐藏 md 工具栏左上部分的情况下切换 sidenav,类似于 Google Inbox 的工作方式:


(来源:cbsistatic.com

似乎是切换功能造成的,因为没有动画,sidenav 显示在md 工具栏。

这可能吗?

<body layout="column" ng-controller="mainCtrl">
<md-toolbar layout="column" class="md-medium-tall"><span flex="flex"></span>
    <div class="md-toolbar-tools">
        <md-button class="menu" ng-click="toggleLeft()">
            <md-icon md-svg-src="assets/svg/menu.svg"></md-icon>
        </md-button>
        <div layout="row" flex="flex" class="fill-height">

            <div class="md-toolbar-item md-breadcrumb">
                <span>Title</span></div>
            <span flex="flex"></span>
        </div>
    </div>
</md-toolbar>


<div layout="row">
    <md-sidenav layout="column" md-component-id="left" class="md-whiteframe-z2 md-sidenav-left" >

        <md-list>
            <md-list-item>
                <md-button>Hey</md-button>
            </md-list-item>
        </md-list>

    </md-sidenav>
</div>

<script src="bower_components/jquery/dist/jquery.min.js"></script>

<script src="bower_components/angular/angular.min.js"></script>
<script src="bower_components/angular-animate/angular-animate.min.js"></script>
<script src="bower_components/angular-aria/angular-aria.min.js"></script>

<script src="bower_components/angular-material/angular-material.min.js"></script>
<script src="js/app.js"></script>

和 app.js

var app = angular.module('anApp', ['ngMaterial'])
.controller('mainCtrl', ['$scope', '$mdSidenav', '$mdUtil', function ($scope, $mdSidenav, $mdUtil) {


$scope.toggleLeft = buildToggler('left');

function buildToggler(navID) {
    var debounceFn = $mdUtil.debounce(function () {
        $mdSidenav(navID)
            .toggle()
    }, 100);
    return debounceFn;
}}]);

谢谢!

【问题讨论】:

    标签: javascript jquery angularjs angularjs-material


    【解决方案1】:

    HTML 代码

    <md-toolbar hide-gt-md>
    <div class="md-toolbar-tools">
        <md-button class="md-icon-button" aria-label="Menu Button" hide-gt-md ng-click="onClickMenu();">
            <md-icon md-svg-icon="menu.svg" aria-label="Menu Icon"> </md-icon>
        </md-button> <h2>Title</h2> <span flex></span>
    </div>
    

    JS 代码

    $scope.onClickMenu = function () {
        $mdSidenav("left").toggle();
    };
    

    在以下链接中查找 md-toolbar 的完整详细信息

    Complete Detail for md-toolbar

    【讨论】:

      【解决方案2】:

      我也遇到了同样的问题,@William S 的解决方案对我不起作用。如果 SideNav 具有相对位置,它将无法正确显示。我通过将 SideNav 和 Content 放入 &lt;md-content flex&gt;&lt;/md-content&gt; 来实现它:

      <md-toolbar>
          <div class="md-toolbar-tools">
              <md-button class="md-icon-button" ng-click="openLeftMenu()">Menu</md-button>
          </div>
      </md-toolbar>
      
      <md-content flex>
          <md-sidenav md-component-id="left" class="md-sidenav-left md-whiteframe-z2" layout="column">
              <md-list>
                  <md-list-item>
      
                      <md-item-content md-ink-ripple>
                          <div class="inset">Item 1</div>
                      </md-item-content>
      
                  </md-list-item>
              </md-list>
          </md-sidenav>
      
          <md-content>Content</md-content>
      </md-content>
      

      【讨论】:

      • 我知道我的信息有一天会过时。谢谢普亚。
      【解决方案3】:

      小更新:请注意,此答案适用于 Angular Material 0.10.1。由于 Angular Material 还很年轻,这个解决方案可能不会永远有效,或者会变得多余。

      为了使顶栏与 sidenav 重叠,你必须给它一个比 sidenav 更高的 z-index(任何超过 z-index: 60 的都可以)

      HTML

        <md-toolbar layout="column" class="main-toolbar md-medium-tall">
          <span flex="flex">
            <h1 class="md-toolbar-tools">Good luck overlapping me, sidenavs</h1>
          </span>
        </md-toolbar>
      

      CSS

      .main-toolbar {
        /* Put top toolbar on a higher layer than sidenav, which has z-index: 60 */
        z-index: 61;
      
        /* Cosmetic */
        background-color: green;
      }
      

      然而,这会使右侧导航的顶部重叠,这可能不是您想要的。

      为了让sidenav出现在顶栏下方,你需要将其从绝对定位改为相对,并将显示类型改为块状。

      为此,您必须覆盖 sidenav 元素的一些 CSS,并将右侧 sidenav 放在 layout="row" 之后的 div 中。

      HTML

      <div layout="row">
          <!-- your sidenav -->
      </div>
      

      CSS

      .md-sidenav-right {
        /* Cosmetic, show where the fill starts */
        background-color: pink;
      
        /* Override from absolute to relative */
        position: relative;
      
        /* Change to block display */
        display: block;
      }
      

      这是一个利用上述两个更改的代码笔。基本代码取自angular-material demo, version 0.10.1

      http://codepen.io/qvazzler/pen/mJGrya

      【讨论】:

        猜你喜欢
        • 2017-06-05
        • 2017-03-16
        • 2017-07-05
        • 2017-11-19
        • 2016-07-11
        • 1970-01-01
        • 2016-06-01
        • 1970-01-01
        • 2016-02-07
        相关资源
        最近更新 更多