md-sidenav toggle() 在 md-toolbar 之上
md-sidenav toggle() is on top of the md-toolbar
我希望能够在不隐藏 md-toolbar 左上角的情况下切换 sidenav,类似于 Google Inbox 的工作方式:
(来源:cbsistatic.com)
似乎是切换功能引起的,因为没有动画,md-toolbar 下方显示的 sidenav。
这可能吗?
<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;
}}]);
谢谢!
小更新: 请注意,此答案适用于 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出现在顶栏下方,需要将其从绝对定位更改为相对定位,并将显示类型更改为块。
为此,您必须覆盖一些 CSS 的 sidenav 元素,并将右侧的 sidenav 放在 layout="row".[=16 之后的 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.
我也遇到了同样的问题,@William S 的解决方案对我不起作用。如果它具有相对位置,SideNav 将无法正确显示。我通过将 SideNav 和 Content 放在 <md-content flex></md-content>
:
来让它工作
<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>
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();
};
在以下 link
中查找 md-toolbar 的完整详细信息
我希望能够在不隐藏 md-toolbar 左上角的情况下切换 sidenav,类似于 Google Inbox 的工作方式:
(来源:cbsistatic.com)
似乎是切换功能引起的,因为没有动画,md-toolbar 下方显示的 sidenav。
这可能吗?
<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;
}}]);
谢谢!
小更新: 请注意,此答案适用于 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出现在顶栏下方,需要将其从绝对定位更改为相对定位,并将显示类型更改为块。
为此,您必须覆盖一些 CSS 的 sidenav 元素,并将右侧的 sidenav 放在 layout="row".[=16 之后的 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.
我也遇到了同样的问题,@William S 的解决方案对我不起作用。如果它具有相对位置,SideNav 将无法正确显示。我通过将 SideNav 和 Content 放在 <md-content flex></md-content>
:
<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>
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();
};
在以下 link
中查找 md-toolbar 的完整详细信息