ngIf and CSS Transitions/Animations for Angular 2
How to slide a div in from the right using CSS in Angular 2?
<code class="html"><div class="note" [ngClass]="{'transition':show}" *ngIf="show"> <p> Notes</p> </div> <button class="btn btn-default" (click)="toggle(show)">Toggle</button></code>
.transition{ -webkit-transition: opacity 1000ms ease-in-out,margin-left 500ms ease-in-out; -moz-transition: opacity 1000ms ease-in-out,margin-left 500ms ease-in-out; -ms-transition: opacity 1000ms ease-in-out,margin-left 500ms ease-in-out ; -o-transition: opacity 1000ms ease-in-out,margin-left 500ms ease-in-out; transition: opacity 1000ms ease-in-out,margin-left 500ms ease-in-out; margin-left: 1500px; width: 200px; opacity: 0; } .transition{ opacity: 100; margin-left: 0; }
If you just use [ngClass] to switch classes, and take advantage of opacity, this code works fine. But don't want that element to be rendered from the beginning, so I "hide" it with ngIf first, but then the transition won't work.
Update 4.1.0
Uses the transition animation API, no need to use [hidden] or [*ngIf hidden] anymore.
Updated 2.1.0
<code class="typescript">import { trigger, style, animate, transition } from '@angular/animations'; @Component({ selector: 'my-app', animations: [ trigger( 'enterAnimation', [ transition(':enter', [ style({transform: 'translateX(100%)', opacity: 0}), animate('500ms', style({transform: 'translateX(0)', opacity: 1})) ]), transition(':leave', [ style({transform: 'translateX(0)', opacity: 1}), animate('500ms', style({transform: 'translateX(100%)', opacity: 0})) ]) ] ) ], template: ` <button (click)="show = !show">toggle show ({{show}})</button> <div *ngIf="show" [@enterAnimation]>xxx</div> ` }) export class App { show:boolean = false; }</code>
Original answer
When the expression becomes false, *ngIf will remove the element from the DOM. A non-existent element cannot be transitioned.
can be replaced by the hidden attribute:
<code class="html"><div class="note" [ngClass]="{'transition':show}" [hidden]="!show"></code>
The above is the detailed content of Here are a few possible titles: 1. How to Make CSS Transitions Work with `ngIf` in Angular 2? 2. Why Does `ngIf` Break My CSS Transitions in Angular 2? 3. Angular 2: Combining `ngIf` and CSS Animations for Smooth Trans. For more information, please follow other related articles on the PHP Chinese website!