Your search did not match any results.
Tooltip

Tooltip

The Tooltip component can display a tooltip for an element on the page. To bind the Tooltip to an element, use the target property.

Show and Hide the Tooltip

Specify DOM events in the target element's markup that need to be triggered to change the Tooltip's visibility. Bind the visible property of the Tooltip to a variable and use event handlers to toggle this variable.

To hide the Tooltip when a user clicks outside its borders, use the hideOnOutsideClick property.

Customize and Animate the Tooltip

Assign the Tooltip's content in the HTML markup. Alternatively, you can use the content template to customize the Tooltip's content.

If you need to position the Tooltip at a certain side of the target element, specify the position property.

To animate the Tooltip, declare the animation object. In this object, specify the show and hide fields.

Backend API
Copy to CodeSandBox
Apply
Reset
<div class="form"> <div class="label">Default mode</div> <div> <img id="product1" (mouseenter)="toggleDefault()" (mouseleave)="toggleDefault()" src="../../../../images/products/17.png" /> <dx-tooltip target="#product1" [(visible)]="defaultVisible" [hideOnOutsideClick]="false" > <div *dxTemplate="let data = data; of: 'content'"> ExcelRemote IR </div> </dx-tooltip> </div> <div class="label">With template</div> <div> <img id="product2" (mouseenter)="toggleWithTemplate()" (mouseleave)="toggleWithTemplate()" src="../../../../images/products/3.png" /> <dx-tooltip target="#product2" position="right" [(visible)]="withTemplateVisible" [hideOnOutsideClick]="false" > <div *dxTemplate="let data = data; of: 'content'"> <img width="150" src="../../../../images/products/3.png" /><br /> <b>SuperPlasma 50</b><br /> 2400$ </div> </dx-tooltip> </div> <div class="label">With animation</div> <div> <img id="product3" (mouseenter)="toggleWithAnimation()" (mouseleave)="toggleWithAnimation()" src="../../../../images/products/15.png" /> <dx-tooltip target="#product3" position="top" [(visible)]="withAnimationVisible" [hideOnOutsideClick]="false" > <dxo-animation> <dxo-show type="slide" [from]="{ top: -100, opacity: 0 }" [to]="{ opacity: 1, top: 0 }" ></dxo-show> <dxo-hide type="pop" [from]="{ scale: 1, opacity: 1 }" [to]="{ opacity: 0, scale: 0.1 }" ></dxo-hide> </dxo-animation> <div *dxTemplate="let data of 'content'"> Projector PlusHD </div> </dx-tooltip> </div> </div>
import { NgModule, Component, enableProdMode } from '@angular/core'; import { BrowserModule } from '@angular/platform-browser'; import { platformBrowserDynamic } from '@angular/platform-browser-dynamic'; import { DxTooltipModule, DxTemplateModule } from 'devextreme-angular'; if (!/localhost/.test(document.location.host)) { enableProdMode(); } @Component({ selector: 'demo-app', templateUrl: 'app/app.component.html', styleUrls: ['app/app.component.css'], }) export class AppComponent { defaultVisible = false; withTemplateVisible = false; withAnimationVisible = false; constructor() {} toggleDefault() { this.defaultVisible = !this.defaultVisible; } toggleWithTemplate() { this.withTemplateVisible = !this.withTemplateVisible; } toggleWithAnimation() { this.withAnimationVisible = !this.withAnimationVisible; } } @NgModule({ imports: [ BrowserModule, DxTooltipModule, DxTemplateModule, ], declarations: [AppComponent], bootstrap: [AppComponent], }) export class AppModule { } platformBrowserDynamic().bootstrapModule(AppModule);
::ng-deep .form { padding: 20px; } ::ng-deep .form img { width: 100px; margin: 10px 0 30px; } ::ng-deep .label { font-size: 16px; }
// In real applications, you should not transpile code in the browser. // You can see how to create your own application with Angular and DevExtreme here: // https://js.devexpress.com/Documentation/Guide/Angular_Components/Getting_Started/Create_a_DevExtreme_Application/ window.config = { transpiler: 'ts', typescriptOptions: { module: 'system', emitDecoratorMetadata: true, experimentalDecorators: true, }, meta: { 'typescript': { 'exports': 'ts', }, 'devextreme/localization.js': { 'esModule': true, }, }, paths: { 'npm:': 'https://unpkg.com/', }, map: { 'ts': 'npm:plugin-typescript@4.2.4/lib/plugin.js', 'typescript': 'npm:typescript@4.2.4/lib/typescript.js', '@angular/core': 'npm:@angular/core@12.2.16', '@angular/platform-browser': 'npm:@angular/platform-browser@12.2.16', '@angular/platform-browser-dynamic': 'npm:@angular/platform-browser-dynamic@12.2.16', '@angular/forms': 'npm:@angular/forms@12.2.16', '@angular/common': 'npm:@angular/common@12.2.16', '@angular/compiler': 'npm:@angular/compiler@12.2.16', 'tslib': 'npm:tslib@2.3.1/tslib.js', 'rxjs': 'npm:rxjs@7.5.3/dist/bundles/rxjs.umd.js', 'rxjs/operators': 'npm:rxjs@7.5.3/dist/cjs/operators/index.js', 'rrule': 'npm:rrule@2.6.4/dist/es5/rrule.js', 'luxon': 'npm:luxon@1.28.0/build/global/luxon.min.js', 'es6-object-assign': 'npm:es6-object-assign@1.1.0', 'devextreme': 'npm:devextreme@22.1.5/cjs', 'devextreme/bundles/dx.all': 'npm:devextreme@22.1.5/bundles/dx.all.js', 'jszip': 'npm:jszip@3.7.1/dist/jszip.min.js', 'devextreme-quill': 'npm:devextreme-quill@1.5.16/dist/dx-quill.min.js', 'devexpress-diagram': 'npm:devexpress-diagram@2.1.63', 'devexpress-gantt': 'npm:devexpress-gantt@4.1.32', 'devextreme-angular': 'npm:devextreme-angular@22.1.5', '@devextreme/runtime': 'npm:@devextreme/runtime@3.0.11', 'inferno': 'npm:inferno@7.4.4/dist/inferno.min.js', 'inferno-compat': 'npm:inferno-compat@7.4.11/dist/inferno-compat.min.js', 'inferno-create-element': 'npm:inferno-create-element@7.4.11/dist/inferno-create-element.min.js', 'inferno-dom': 'npm:inferno-dom/dist/inferno-dom.min.js', 'inferno-hydrate': 'npm:inferno-hydrate@7.4.11/dist/inferno-hydrate.min.js', 'inferno-clone-vnode': 'npm:inferno-clone-vnode@7.4.11/dist/inferno-clone-vnode.min.js', 'inferno-create-class': 'npm:inferno-create-class@7.4.11/dist/inferno-create-class.min.js', 'inferno-extras': 'npm:inferno-extras@7.4.11/dist/inferno-extras.min.js', // Prettier 'prettier/standalone': 'npm:prettier@2.7.1/standalone.js', 'prettier/parser-html': 'npm:prettier@2.7.1/parser-html.js', }, packages: { 'app': { main: './app.component.ts', defaultExtension: 'ts', }, 'devextreme': { defaultExtension: 'js', }, 'devextreme/events/utils': { main: 'index', }, 'devextreme/events': { main: 'index', }, 'es6-object-assign': { main: './index.js', defaultExtension: 'js', }, 'rxjs': { defaultExtension: 'js', }, 'rxjs/operators': { defaultExtension: 'js', }, }, packageConfigPaths: [ 'npm:@devextreme/*/package.json', 'npm:@devextreme/runtime@3.0.11/inferno/package.json', 'npm:@angular/*/package.json', 'npm:@angular/common@12.2.16/*/package.json', 'npm:rxjs@7.5.3/package.json', 'npm:rxjs@7.5.3/operators/package.json', 'npm:devextreme-angular@22.1.5/*/package.json', 'npm:devextreme-angular@22.1.5/ui/*/package.json', 'npm:devextreme-angular@22.1.5/package.json', 'npm:devexpress-diagram@2.1.63/package.json', 'npm:devexpress-gantt@4.1.32/package.json', ], }; System.config(window.config);
<!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <title>DevExtreme Demo</title> <meta http-equiv="X-UA-Compatible" content="IE=edge" /> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0" /> <link rel="stylesheet" type="text/css" href="https://cdn3.devexpress.com/jslib/22.1.5/css/dx.common.css" /> <link rel="stylesheet" type="text/css" href="https://cdn3.devexpress.com/jslib/22.1.5/css/dx.light.css" /> <script src="https://unpkg.com/core-js@2.4.1/client/shim.min.js"></script> <script src="https://unpkg.com/zone.js@0.11.4/dist/zone.js"></script> <script src="https://unpkg.com/reflect-metadata@0.1.3/Reflect.js"></script> <script src="https://unpkg.com/systemjs@0.21.3/dist/system.js"></script> <script src="config.js"></script> <script> System.import("app").catch(console.error.bind(console)); </script> </head> <body class="dx-viewport"> <div class="demo-container"> <demo-app>Loading...</demo-app> </div> </body> </html>