【问题标题】:Angular Material tab height角度材料选项卡高度
【发布时间】:2018-11-16 05:52:21
【问题描述】:

我正在尝试创建一个完整页面的 Angular Material 选项卡,该选项卡具有全高且居中消息的选项卡。我创建了this stakblitz,因为我无法让它工作。 fxFill 似乎没有填充,我不确定这是否是 Flexbox 布局或 Angular 材质的问题。我不想在每个选项卡中强制设置高度,因为这似乎违背了灵活布局的意义。

我确信它很简单,但可以帮助一个习惯于 Bootstrap 网格的可怜困惑的开发人员:)

更新height: calc(100vh - 100px); 添加到父 div,然后添加到 tall.component div 可以使事情正常进行,但 这肯定是一个糟糕的解决方案

【问题讨论】:

  • 它可能是一个糟糕的解决方案的一个原因是vh 在有或没有屏幕键盘的移动设备上几乎是一个固定值,或者在不同平台上出现和消失的工具栏不同。请注意这一点,如果您希望 vh 真正动态,它可能不是。 % 实际上通常在这里效果更好。

标签: angular angular-flex-layout


【解决方案1】:

为了填充页面,页面需要填充窗口:

styles.css

body, html{
  height: 100%;
  margin: 0;
}

应用组件需要填充body:

app.component.css

:host{
  box-sizing: border-box;
  display: block;
  height: 100%;
}

默认情况下,选项卡内的内容包装器不会填充选项卡的高度,因此我们将解决此问题:

styles.css

.mat-tab-body-wrapper{
  flex-grow: 1;
}

我们还需要让mat-tab-group 填充高度,它的父级也需要填充高度,所以我们将为包装器和选项卡组提供一个 id。

app.component.html

<div id="wrapper"> <!-- give it an id -->
    <div fxLayout="row" fxLayoutGap="16px" fxFill>
        <div fxFlex="20">
            <p>Fun Sidebar</p>
        </div>
        <div fxFlex="80" fxFill>
            <mat-tab-group id="tab-group"> <!-- give it an id -->
                <mat-tab label="Summary">
                    <div fxFlex style="padding: 16px;">
                        <div class="mat-display-2">Hello</div>
                        <p>Lorem ipsulem</p>
                    </div>
                </mat-tab>
                <mat-tab label="Tall content">
                    <app-tall-component></app-tall-component>
                </mat-tab>
            </mat-tab-group>
        </div>
    </div>
</div>

app.component.css

#wrapper{
  padding: 16px; 
  min-height: 100%; 
  height: 100%; 
  box-sizing: border-box;/*new*/
}
#tab-group{
  height: 100%;
}
#tab-group mat-tab-body {
  flex-grow: 1;
}

https://stackblitz.com/edit/angular-awamwn?file=src%2Fapp%2Fapp.component.html

【讨论】:

  • 谢谢 - 完美运行 - 虽然当我翻译成我的代码时 mat-tab-body-wrapper 没有样式 : flex-grow: 1 ,它会自动应用到我们的代码中。奇怪 - 没有它 - 你的代码不起作用。
  • 谢谢!再读一遍 :) 有一个关于它的部分,你必须在你的 styles.scss 中添加一个规则来设置它为 flex
  • 抱歉错过了,因为我将它添加到组件 scss 中:P
  • 有一个原生解决方案,将dynamicHeight输入设置为true
  • 如果不使用fxLayout,可以用纯css flex实现吗?
【解决方案2】:

这对我来说可以为高度分配动态值。

:host ::ng-deep .mat-tab-body-wrapper {
  height: 600px;

}

:host ::ng-deep .mat-tab-body.mat-tab-body-active {
  height: 600px;

}

【讨论】:

  • 谢谢,我刚刚指定了高度:100%,它对我有用。
  • 这个 css 去哪儿了?
【解决方案3】:

根据Angular docs:需要将dynamicHeight输入设置为true&lt;mat-tab-group dynamicHeight&gt;

默认情况下,标签组不会将其高度更改为当前活动标签的高度。要更改此设置,请将 dynamicHeight 输入设置为 true。选项卡主体将根据活动选项卡的高度为其高度设置动画。

【讨论】:

  • 在 Angular 11 中不适合我。你能展示一下 stackblitz 吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-04-07
  • 2020-02-06
  • 1970-01-01
  • 2022-12-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多