如何让 md-sidenav 将内容推送到右边而不是重叠?

how to make md-sidenav push content to the right instead of overlapping it?

有什么方法可以让侧边导航成为粘性,这样当侧边导航打开时,它会将页面内容推向右侧,而不是像 https://inbox.google.com/ 那样只是重叠?

这是我的示例作品 plunker link

<html lang="en">
<head>
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <!-- Angular Material style sheet -->
    <link rel="stylesheet"
          href="https://ajax.googleapis.com/ajax/libs/angular_material/1.1.0-rc2/angular-material.min.css">
    <link href="https://fonts.googleapis.com/icon?family=Material+Icons" rel="stylesheet">
    <link rel="stylesheet" href="css/main.css">
</head>
<body ng-app="BlankApp" layout="column" ng-cloak ng-controller="AppCtrl">
<md-toolbar class="md-whiteframe-7dp" layout="row">
    <md-button class="menu" ng-click="toggleSidenav();"><i class="material-icons">menu</i></md-button>
    <h3>Hello Toolbar</h3>
</md-toolbar>

<md-content id="body-part" flex layout="row" layout-fill>
    <md-sidenav md-disable-backdrop class="md-whiteframe-7dp" md-component-id="left-side-nav"
                flex style="background: cyan">
        <span>Hello Nav..!!</span>
    </md-sidenav>
    <div flex style="padding: 10px;overflow-y: scroll; background: darkcyan">
        <span>Hello Content...!</span><br>
    </div>
</md-content>


<!-- Angular Material requires Angular.js Libraries -->
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.5.3/angular.min.js"></script>
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.5.3/angular-animate.min.js"></script>
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.5.3/angular-aria.min.js"></script>
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.5.3/angular-messages.min.js"></script>

<!-- Angular Material Library -->
<script src="https://ajax.googleapis.com/ajax/libs/angular_material/1.1.0-rc2/angular-material.min.js"></script>

<!-- Your application bootstrap  -->
<script src="js/script.js"></script>
</body>
</html>

您需要为 sidenav 添加相对位置 css 样式:

来自您的 Plunker:

md-sidenav, md-sidenav.md-locked-open, md-sidenav.md-closed.md-locked-open-add-active {
    min-width: 200px !important;
    width: 50vw !important;
    max-width: 200px !important;
    position:relative;
}

https://plnkr.co/edit/cheYKMT2Mjy7Bvqv62hI?p=preview

将绝对位置更改为静态。

.md-sidenav {position: static;}

曾经被这个问题困扰过。 Angular Material 网站示例使用 $mdSidenav('left').toggle();

var app = angular.module('myApp', ['ngMaterial']);
app.controller('MyController', function($scope, $mdSidenav) {
  $scope.openLeftMenu = function() {
    $mdSidenav('left').toggle();
  };
});

要实现您的要求,请使用 md-is-locked-open

这应该可以解决问题。

md-sidenav md-is-locked-open="isSideNavOpen">...

$scope.openLeftMenu = function() {
  $scope.isSideNavOpen = !$scope.isSideNavOpen;
};
 

在您的 <md-sidenav> 中添加 mode="push"

<md-sidenav mode="push">

</md-sidenav>

参考这个:Sidenave | Angular Material | Mode