42

Angular マテリアル レイアウトを作成しようとしています。私の目標は、垂直スクロール バーを作成せずにブラウザー ウィンドウ全体を埋めるページを作成することです。ページの上部には、ページの幅の 100% を占めるツールバーがあります。ツールバーの下には、幅の 100% を占めるタイトル領域があります。タイトル領域の下に、左側にナビゲーション メニュー、右側にクライアント領域が必要です。私の目標は、ナビゲーション メニューとクライアント領域の両方をブラウザ ウィンドウ全体に垂直に表示することです。

私が達成しようとしていることを視覚的に示すために: ここに画像の説明を入力

レイアウトの行と列、および属性 flex と layout-fill を試してみました。私が見つけた他のすべての投稿は、これが正しい組み合わせで可能であることを示していますが、解決策は私にはわかりませんでした. 問題を示すために Plunker を作成しました。

http://plnkr.co/edit/Eva0Cf6KKa0z6I9YsR8t?p=info

ここに私のindex.htmlがあります:

<!DOCTYPE html>
<html class="no-js">

<head>
  <meta charset="utf-8">
  <title>adasd</title>
  <meta name="viewport" content="width=device-width">
  <link rel="stylesheet" href="//rawgit.com/angular/bower-material/master/angular-material.css">
  <link rel="stylesheet" href="nav.css">
  <link rel="stylesheet" href="style.css">
</head>
<body ng-app="plunker" ng-controller="MainCtrl">
  <md-toolbar layout="row" class="md-hue-3">
      <div flex="15" layout layout-align="center center" >
        <span>Logo</span>
      </div>
      <div flex="85" layout layout-align="center center" >
        <span>Toolbar Header</span>
      </div>
  </md-toolbar>

  <div flex >
    <div ng-view flex layout-fill></div>
  </div>
  <!-- Angular Material Dependencies -->
  <script src="//ajax.googleapis.com/ajax/libs/angularjs/1.3.6/angular.js"></script>
  <script src="//ajax.googleapis.com/ajax/libs/angularjs/1.3.6/angular-route.js"></script>
  <script src="//ajax.googleapis.com/ajax/libs/angularjs/1.3.6/angular-animate.min.js"></script>
  <script src="//ajax.googleapis.com/ajax/libs/angularjs/1.3.6/angular-aria.min.js"></script>

  <!-- Angular Material Javascript now available via Google CDN; version 0.6 used here -->
  <script src="//rawgit.com/angular/bower-material/master/angular-material.min.js"></script>

  <script src="app.js"></script>
</body>

</html>

そして main.html (ng-view に表示されます):

<div layout="column" flex layout-fill>
  <div layout="row" flex layout-fill>
      <md-whiteframe flex="100" layout layout-align="center center" style="margin-bottom: 16px;height: 60px;">
          <div flex="100"><span id="site-name">Some sort of a title goes here...</span></div>
      </md-whiteframe>
  </div>
  <div layout="row" flex layout-fill>
      <md-sidenav layout-fill class="md-sidenav-left " id="siteMenu" md-component-id=" left" md-is-locked-open="$mdMedia('gt-sm')">
          <md-content layout-fill role="navigation">
              <ul class="docs-menu">
                <li ng-repeat="section in sections" class="parent-list-item">
                      <h2 class="menu-heading" ng-if="section.type === 'heading'" id="heading_{{ section.name | nospace }}">
                          {{section.name}}
                      </h2>
                      <menu-link section="section" ng-if="section.type === 'link'"></menu-link>
                </li>

                  <li ng-repeat="section in menu.sections" class="parent-list-item" ng-class="{'parentActive' : isSectionSelected(section)}">
                      <h2 class="menu-heading" ng-if="section.type === 'heading'" id="heading_{{ section.name | nospace }}">
                          {{section.name}}
                      </h2>
                      <menu-link section="section" ng-if="section.type === 'link'"></menu-link>

                      <menu-toggle section="section" ng-if="section.type === 'toggle'"></menu-toggle>

                      <ul ng-if="section.children" class="menu-nested-list">
                          <li ng-repeat="child in section.children" ng-class="{'childActive' : isSectionSelected(child)}">
                              <menu-toggle section="child"></menu-toggle>
                          </li>
                      </ul>
                  </li>
              </ul>
          </md-content>
      </md-sidenav>

      <md-content layout="row" class="content-wrapper md-padding" flex layout-fill id="content">
        <div flex layout-fill>
          <h2>Home Content</h2>

          <ul>
            <li>Page Content goes here...</li>
            <li>and here...</li>
            <li>and here...</li>
          </ul>
        </div>
      </md-content>
  </div>
</div>

もちろん、Plunker を見て、すべてが接続されていることを確認し、問題を視覚的に確認してください。

どんな助けでも大歓迎です!

PS。このプランカーを IE 11 でテストしたところ、他の表示の問題が発生しています。しかし、それは別の日の別の質問です。Chrome で正しく動作するはずです。また、幅が 600px 未満のウィンドウではメニューが自動的に非表示になります。ウィンドウを表示するには、Plunker の表示ウィンドウを広くします。

4

3 に答える 3

31

Angular Material 要素を使用するだけで、余分なスタイルを追加せずにそれを行うこともできます。

layout基本的に、垂直方向に塗りつぶしたい要素のすべての親に追加する必要があります。また、それほど多くの s を使用する必要はありませんlayout-fill

ここでデモ: http://plnkr.co/edit/E244WNhvMXw9VC7DpAW0?p=preview

また、サイドバーにも背景色を追加して、縦方向にも塗りつぶされることを示しました。

于 2015-08-28T15:04:22.363 に答える
11
<div flex style="height: -webkit-calc(100% - 76px)">
    <div ng-view flex layout-fill style="height: 100%">
    </div>
</div>

この答えは、他の人にとって簡単にするために答えに入れるべきだと思っただけです。

于 2015-06-02T21:49:31.220 に答える