5

我想禁用 Angular Material mat-tab 动画(当内容滑入到位时发生的动画)。我知道可以使用 [@.disabled] 属性,但我想知道是否可以使用纯 css 实现相同的效果。

编辑:

我们的 UX 团队希望从材料选项卡中删除幻灯片动画,因为他们认为无论出于何种原因它们都不合适。我们有多个项目可能会多次使用选项卡组件,因此我们想要一种方法来删除当前选项卡和未来选项卡的动画。理想情况下,我们不想告诉人们向他们的 HTML 添加(并开始添加)任何属性(他们可能会忘记这样做)。此外,这些项目具有提供主要 css 样式的项目作为依赖项。我们的想法是在所有项目共享的主 CSS 样式表中删除这些动画。我们尝试添加以下内容,但没有奏效:

.mat-tab-body-content, .mat-tab-body, .mat-tab-body-wrapper { 
  transition: none !important;
  transform: none !important; 
  animation-duration: 0ms !important; 
}
4

3 回答 3

19

Angular Material 没有提供覆盖动画的官方方法,因此除非你真的需要它,否则我不会建议它(你必须为此做一些肮脏的黑客行为)。看看你的情况,没有必要覆盖 CSS,因为你可以通过应用animationDurationto来获得相同的结果mat-tab-group——这也是一个官方的解决方案。

<mat-tab-group animationDuration="0ms">
  <mat-tab label="First">Content 1</mat-tab>
  <mat-tab label="Second">Content 2</mat-tab>
  <mat-tab label="Third">Content 3</mat-tab>
</mat-tab-group>

如果要将更改全局应用于项目中的每个选项卡组,则必须注入MAT_TABS_CONFIG

app.module.ts

import { MAT_TABS_CONFIG } from '@angular/material';

@NgModule({
  ...
  providers: [
    { provide: MAT_TABS_CONFIG, useValue: { animationDuration: '0ms' } }
  ]
})
于 2019-08-16T12:43:08.417 回答
9

为了在内容更改之间禁用动画,我使用了@me-sa 解决方案:

<div [@.disabled]="true">
  <mat-tab-group >
    <mat-tab label="First"> Content 1 </mat-tab>
    <mat-tab label="Second"> Content 2 </mat-tab>
    <mat-tab label="Third"> Content 3 </mat-tab>
  </mat-tab-group>
</div>

并工作,谢谢!

至于垫标签边框动画,这对我有用:

@media all and (-ms-high-contrast: none), (-ms-high-contrast: active) {
  /* IE10+ CSS styles go here */
    .mat-tab-group *{
        transition: none!important;
        transition-duration: 0ms!important;
        transition-delay: 0ms!important;
    }
}

@supports (-ms-accelerator:true) {
  /* IE Edge 12+ CSS styles go here */ 
  .mat-tab-group *{
    transition: none!important;
    transition-duration: 0ms!important;
    transition-delay: 0ms!important;
  }
}
于 2020-01-27T19:08:16.603 回答
2

您也可以使用下面的代码来禁用动画:

<div [@.disabled]="true">
  <mat-tab-group >
    <mat-tab label="First"> Content 1 </mat-tab>
    <mat-tab label="Second"> Content 2 </mat-tab>
    <mat-tab label="Third"> Content 3 </mat-tab>
  </mat-tab-group>
</div>

https://stackblitz.com/edit/angular-ns4vi5?file=app%2Ftab-group-basic-example.html

于 2019-12-23T04:40:45.160 回答