diff --git a/src/material/tooltip/tooltip.ts b/src/material/tooltip/tooltip.ts index 77c9a665acb4..95be4460dc24 100644 --- a/src/material/tooltip/tooltip.ts +++ b/src/material/tooltip/tooltip.ts @@ -989,8 +989,22 @@ export abstract class _TooltipComponentBase implements OnDestroy { const tooltip = this._tooltip.nativeElement; const showClass = this._showAnimation; const hideClass = this._hideAnimation; - tooltip.classList.remove(isVisible ? hideClass : showClass); - tooltip.classList.add(isVisible ? showClass : hideClass); + + if (isVisible) { + tooltip.classList.remove(hideClass); + tooltip.classList.add(showClass); + } + + if (!isVisible) { + // It's avoids the problem when `mat-tooltip-hide` triggers the animation of + // a tooltip that has not been shown yet. + if (tooltip.classList.contains(showClass)) { + tooltip.classList.add(hideClass); + } + + tooltip.classList.remove(showClass); + } + this._isVisible = isVisible; // It's common for internal apps to disable animations using `* { animation: none !important }`