29

我认识到Angular Material的实现是一项正在进行的工作,但是今天早上我花了一些时间来熟悉它。但是,我真的很难让演示中显示的概念在独立站点中工作。

似乎当指令喜欢<md-toolbar><md-content>在具有固定高度的容器中使用时,它们的效果很好。我正在努力解决如何将它们放入<body标签中并能够像本示例中那样具有粘性页脚布局。

我尝试了许多变体,但这里有一个示例在从 DOM 中删除内容时不起作用。当内容在那里时,它会超出视口,然后会像您期望的那样放置页脚。在最新版本的 Chrome 和 Firefox 中,此示例在删除内容时将页脚保留在底部,但在 IE 中这根本不起作用。在 IE 中,无论是否显示主要内容,页脚都浮动在页眉下方。

演示: http ://codepen.io/ssterie/pen/xbGgqb

<body ng-app="materialApp" layou-fill layout='column'>
    <div ng-controller="AppCtrl" layout='column' flex>
      <md-toolbar class='md-medium-tall'>
        <div class="md-toolbar-tools">
          <span>Fixed to Top</span>
          <span flex></span>
          <md-button class="md-raised" ng-click="toggleContent(!displayContent)">toggle content</md-button>
        </div>
      </md-toolbar>
      <main class='md-padding' layout="row" flex>
        <div flex>
        <md-card ng-if="displayContent" ng-repeat = "card in cards">
          {{$index}}
          {{card.title}}
          {{card.text}}
        </md-card>
        </div>
               <div flex>
        <md-card ng-if="displayContent" ng-repeat = "card in cards">
          {{$index}}
          {{card.title}}
          {{card.text}}
        </md-card>
        </div>
      </main>
      <md-toolbar class="md-medium-tall">
        <div layout="row" layout-align="center center" flex>
          <span>FOOTER</span>
        </div>
      </md-toolbar>
    </div>
  </body>

Javascript:

angular.module('materialApp', ['ngMaterial'])

.controller('AppCtrl', function($scope) {
    $scope.cards = [
    {text: 'Bla bla bla bla bla bla bla ',
     title: 'Bla' },
    ...repeat 10 times...
  ];

    $scope.displayContent = true;

    $scope.toggleContent = function(showContent) { $scope.displayContent = showContent; };
});

CSS:

body {
    min-height: 100%;
    height: auto !important;
    height: 100%;
}

我绝对不是 CSS 专家,但感觉使用 angular-material 中的布局选项应该很容易做到这一点,所以我希望我在这里真的遗漏了一些明显的东西。

4

4 回答 4

25

不需要底片或类似的东西。利用 flexbox 行为,您就可以开始了:

  1. 主包装器上的使用layout="column"layout-fill属性(可以是您的body标签)。
  2. 创建您的部分headermainfooter
  3. flex您的main.

检查我的示例,基于@kuhnroyal pen。

代码| 完整页面

于 2015-04-14T19:50:26.433 回答
21

您可以通过一个小的解决方法来解决这个问题。

  • min-height: calc(100vh - 176px)在您的元素上使用main,(md 工具栏为 176px = 2*88px)
  • layout='column'从根 div中删除
  • layout-fill layout='column'从身体中取出

我用 CDN 版本 0.8.3 替换了 css/js 材料,因为我的 IE10 会因 Codepen 中的 CSS/JS 数量而崩溃。

我在 Chrome、Firefox 和 IE10 上对此进行了测试——似乎有效。

http://codepen.io/anon/pen/azgdOZ

于 2015-04-09T10:06:46.790 回答
7

所以我只是在尝试角度材料,但我为此所做的是

<div layout="column" layout-fill>
   <md-toolbar class="md-default-theme">
   <!-- your stuff -->
   </md-toolbar>
   <md-content layout-fill role="main">
      <!-- your main areas -->
   </md-content>
   <md-bottom-sheet>
      <div>I am a sticky footer</div>
   </md-bottom-sheet>
</div>

我还没有进行足够的实验来确定这是否可以按照我想要的方式进行,但到目前为止看起来很有希望。请注意,如果您的内容不受限制,它可能会不断地将底页向下推。如果您在 md-content 上使用了 overflow-y: auto 它可能会起作用(我没有足够的应用程序构建尚未测试)

于 2014-12-31T16:21:09.907 回答
5

我没有发现任何答案都可以在没有任何缺陷的情况下在浏览器中可靠地工作。

正如this SO answer中所指出的,这有效:

<md-toolbar></md-toolbar>
<md-content flex layout="column">
    <div layout="column" flex>
        <main flex="none"></main>
        <div flex></div>
        <footer flex="none"></footer>
    </div>
<md-content>

这是该示例的代码笔

于 2016-06-04T14:07:06.707 回答