DevExtreme v24.2 is now available.

Explore our newest features/capabilities and share your thoughts with us.

Your search did not match any results.

React 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.

DevExtreme Accessibility Compliance
DevExtreme component libraries meet a variety of WCAG and Section 508 compliance standards. To assess this demo’s accessibility level, click the Run AXE® Validation button to launch the AXE® web accessibility evaluation tool.
All trademarks or registered trademarks are property of their respective owners. AXE® Terms of Use
The overall accessibility level of your application depends on the Tooltip features used.
Backend API
import React from 'react'; import { Tooltip, ITooltipOptions } from 'devextreme-react/tooltip'; const animationConfig: ITooltipOptions['animation'] = { show: { type: 'slide', from: { top: -100, opacity: 0, }, to: { top: 0, opacity: 1, }, }, hide: { type: 'pop', from: { scale: 1, opacity: 1, }, to: { scale: 0.1, opacity: 0, }, }, }; export default function App() { return ( <div className="form"> <div className="label">Default mode</div> <div> <img alt="ExcelRemote IR" id="product1" src="../../../../images/products/17.png" /> <Tooltip target="#product1" showEvent="mouseenter" hideEvent="mouseleave" hideOnOutsideClick={false} > <div>ExcelRemote IR</div> </Tooltip> </div> <div className="label">With template</div> <div> <img alt="SuperPlasma 50" id="product2" src="../../../../images/products/3.png" /> <Tooltip target="#product2" showEvent="mouseenter" hideEvent="mouseleave" position="right" hideOnOutsideClick={false} > <img alt="SuperPlasma 50" width="150" src="../../../../images/products/3.png" /><br /> <b>SuperPlasma 50</b><br /> 2400$ </Tooltip> </div> <div className="label">With animation</div> <div> <img alt="Projector PlusHD" id="product3" src="../../../../images/products/15.png" /> <Tooltip target="#product3" showEvent="mouseenter" hideEvent="mouseleave" position="top" animation={animationConfig} hideOnOutsideClick={false} > <div>Projector PlusHD</div> </Tooltip> </div> </div> ); }
import React from 'react'; import { Tooltip } from 'devextreme-react/tooltip'; const animationConfig = { show: { type: 'slide', from: { top: -100, opacity: 0, }, to: { top: 0, opacity: 1, }, }, hide: { type: 'pop', from: { scale: 1, opacity: 1, }, to: { scale: 0.1, opacity: 0, }, }, }; export default function App() { return ( <div className="form"> <div className="label">Default mode</div> <div> <img alt="ExcelRemote IR" id="product1" src="../../../../images/products/17.png" /> <Tooltip target="#product1" showEvent="mouseenter" hideEvent="mouseleave" hideOnOutsideClick={false} > <div>ExcelRemote IR</div> </Tooltip> </div> <div className="label">With template</div> <div> <img alt="SuperPlasma 50" id="product2" src="../../../../images/products/3.png" /> <Tooltip target="#product2" showEvent="mouseenter" hideEvent="mouseleave" position="right" hideOnOutsideClick={false} > <img alt="SuperPlasma 50" width="150" src="../../../../images/products/3.png" /> <br /> <b>SuperPlasma 50</b> <br /> 2400$ </Tooltip> </div> <div className="label">With animation</div> <div> <img alt="Projector PlusHD" id="product3" src="../../../../images/products/15.png" /> <Tooltip target="#product3" showEvent="mouseenter" hideEvent="mouseleave" position="top" animation={animationConfig} hideOnOutsideClick={false} > <div>Projector PlusHD</div> </Tooltip> </div> </div> ); }
import React from 'react'; import ReactDOM from 'react-dom'; import App from './App.tsx'; ReactDOM.render( <App />, document.getElementById('app'), );
window.exports = window.exports || {}; window.config = { transpiler: 'ts', typescriptOptions: { module: 'system', emitDecoratorMetadata: true, experimentalDecorators: true, jsx: 'react', }, meta: { 'react': { 'esModule': true, }, 'typescript': { 'exports': 'ts', }, 'devextreme/time_zone_utils.js': { 'esModule': true, }, 'devextreme/localization.js': { 'esModule': true, }, 'devextreme/viz/palette.js': { 'esModule': true, }, 'openai': { 'esModule': true, }, }, paths: { 'npm:': 'https://unpkg.com/', 'bundles:': '../../../../bundles/', 'externals:': '../../../../bundles/externals/', }, defaultExtension: 'js', map: { 'ts': 'npm:plugin-typescript@8.0.0/lib/plugin.js', 'typescript': 'npm:typescript@4.2.4/lib/typescript.js', 'jszip': 'npm:jszip@3.10.1/dist/jszip.min.js', 'react': 'npm:react@17.0.2/umd/react.development.js', 'react-dom': 'npm:react-dom@17.0.2/umd/react-dom.development.js', 'prop-types': 'npm:prop-types/prop-types.js', 'rrule': 'npm:rrule@2.6.4/dist/es5/rrule.js', 'luxon': 'npm:luxon@3.4.4/build/global/luxon.min.js', 'es6-object-assign': 'npm:es6-object-assign', 'devextreme': 'npm:devextreme@link:../../packages/devextreme/artifacts/npm/devextreme/cjs', 'devextreme-react': 'npm:devextreme-react@link:../../packages/devextreme-react/npm/cjs', 'devextreme-quill': 'npm:devextreme-quill@1.7.1/dist/dx-quill.min.js', 'devexpress-diagram': 'npm:devexpress-diagram@2.2.5/dist/dx-diagram.js', 'devexpress-gantt': 'npm:devexpress-gantt@4.1.54/dist/dx-gantt.js', '@devextreme/runtime': 'npm:@devextreme/runtime@3.0.12', 'inferno': 'npm:inferno@7.4.11/dist/inferno.min.js', 'inferno-compat': 'npm:inferno-compat/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/dist/inferno-hydrate.min.js', 'inferno-clone-vnode': 'npm:inferno-clone-vnode/dist/inferno-clone-vnode.min.js', 'inferno-create-class': 'npm:inferno-create-class/dist/inferno-create-class.min.js', 'inferno-extras': 'npm:inferno-extras/dist/inferno-extras.min.js', 'devextreme-cldr-data': 'npm:devextreme-cldr-data@1.0.3', // SystemJS plugins 'plugin-babel': 'npm:systemjs-plugin-babel@0.0.25/plugin-babel.js', 'systemjs-babel-build': 'npm:systemjs-plugin-babel@0.0.25/systemjs-babel-browser.js', // Prettier 'prettier/standalone': 'npm:prettier@2.8.8/standalone.js', 'prettier/parser-html': 'npm:prettier@2.8.8/parser-html.js', }, packages: { 'devextreme': { defaultExtension: 'js', }, 'devextreme-react': { main: 'index.js', }, 'devextreme/events/utils': { main: 'index', }, 'devextreme/localization/messages': { format: 'json', defaultExtension: 'json', }, 'devextreme/events': { main: 'index', }, 'es6-object-assign': { main: './index.js', defaultExtension: 'js', }, }, packageConfigPaths: [ 'npm:@devextreme/*/package.json', 'npm:@devextreme/runtime@3.0.12/inferno/package.json', ], babelOptions: { sourceMaps: false, stage0: true, react: true, }, }; System.config(window.config);
import React from 'react'; import ReactDOM from 'react-dom'; import App from './App.js'; ReactDOM.render(<App />, document.getElementById('app'));
<!DOCTYPE html> <html lang="en"> <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=5.0" /> <link rel="stylesheet" type="text/css" href="https://cdn3.devexpress.com/jslib/24.2.3/css/dx.light.css" /> <link rel="stylesheet" type="text/css" href="styles.css" /> <script src="https://unpkg.com/core-js@2.6.12/client/shim.min.js"></script> <script src="https://unpkg.com/systemjs@0.21.3/dist/system.js"></script> <script type="text/javascript" src="config.js"></script> <script type="text/javascript"> System.import("./index.tsx"); </script> </head> <body class="dx-viewport"> <div class="demo-container"> <div id="app"></div> </div> </body> </html>
.form { padding: 20px; } .form img { width: 100px; margin: 10px 0 30px; } .label { font-size: 16px; }

Show and Hide the Tooltip

To show and hide the Tooltip in response to certain events, specify the showEvent and hideEvent properties. These properties can accept multiple events at once as well as an object.

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.