29

Angular Materialの実装が進行中の作業であることは認識していますが、今朝はそれに慣れるために時間を費やしました。ただし、デモに示されている概念をスタンドアロンのサイトで機能させるのに本当に苦労しています。

ディレクティブ like<md-toolbar><md-content>が固定高さのコンテナーで使用されると、うまく機能するようです。それらをタグ内にスローして、この例のように<body粘着性のあるフッター レイアウトを作成する方法に苦労しています。

多くのバリエーションを試しましたが、コンテンツが DOM から削除された場合に機能しない例を 1 つ示します。コンテンツがそこにあるとき、それはビューポートを超えて成長し、フッターはあなたが期待するようにその後に配置されます. Chrome と Firefox の最新バージョンでは、この例はコンテンツが削除されたときにフッターを下部に保持しますが、IE ではこれはまったく機能しません。IE では、メイン コンテンツが表示されているかどうかに関係なく、フッターはヘッダーのすぐ下に表示されます。

デモ: http://codepen.io/sstory/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

ボトムシートなどは必要ありません。フレックスボックスの動作を活用すれば、準備完了です:

  1. メインラッパーで属性を使用layout="column"します(タグlayout-fillにすることができます)。body
  2. セクションを作成します: headermainおよびfooter
  3. flexで属性を使用しますmain

@kuhnroyal ペンに基づく私の例を確認してください。

コード| 全ページ

于 2015-04-14T19:50:26.433 に答える
21

小さな回避策でこれを機能させることができます。

  • 要素で使用min-height: calc(100vh - 176px)しますmain(md-toolbars の場合は 176px = 2*88px)。
  • layout='column'ルート div から を削除します
  • layout-fill layout='column'を本体から取り外します

私の IE10 は Codepen 内のその量の CSS/JS でクラッシュするので、マテリアル css/js を CDN バージョン 0.8.3 に置き換えました。

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

答えのいずれも、1 つまたは別の欠陥がなければ、ブラウザー間で確実に機能することがわかりませんでした。

この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 に答える