react-tippy vs react-tooltip vs react-tooltip-lite
React Tooltip Libraries
react-tippyreact-tooltipreact-tooltip-liteSimilar Packages:

React Tooltip Libraries

Tooltip libraries in React provide developers with the ability to create informative pop-ups that appear when users hover over or focus on an element. These libraries enhance user experience by delivering contextual information without cluttering the UI. Each library offers distinct features and design philosophies, catering to various needs in terms of customization, performance, and ease of use.

Npm Package Weekly Downloads Trend

3 Years

Github Stars Ranking

Stat Detail

Package
Downloads
Stars
Size
Issues
Publish
License
react-tippy0981-1036 years agoMIT
react-tooltip03,790889 kB95 months agoMIT
react-tooltip-lite077-536 years agoMIT

Feature Comparison: react-tippy vs react-tooltip vs react-tooltip-lite

Customization

  • react-tippy:

    react-tippy offers extensive customization options, allowing developers to modify styles, animations, and placements. You can easily adjust the tooltip's appearance using CSS and control its behavior with various props, making it suitable for complex UI designs.

  • react-tooltip:

    react-tooltip provides basic customization features, such as positioning and styling through CSS classes. However, it may not offer the depth of customization found in react-tippy, making it more suitable for simpler use cases.

  • react-tooltip-lite:

    react-tooltip-lite focuses on simplicity and minimalism, providing basic customization options. It allows for some styling through props but is not as extensive as the other libraries, making it ideal for straightforward tooltip implementations.

Performance

  • react-tippy:

    react-tippy is optimized for performance, leveraging Popper.js for efficient positioning and rendering. It minimizes reflows and repaints, ensuring smooth animations and responsiveness even in complex layouts.

  • react-tooltip:

    react-tooltip is lightweight and performs well in most scenarios. However, it may not be as optimized for complex positioning as react-tippy, which could lead to performance issues in highly dynamic UIs.

  • react-tooltip-lite:

    react-tooltip-lite is designed to be lightweight and fast, making it a good choice for applications where performance is critical. Its simplicity contributes to faster rendering times and lower resource usage.

Ease of Use

  • react-tippy:

    react-tippy has a steeper learning curve due to its extensive customization options and reliance on Popper.js. Developers may need to invest more time to fully understand its capabilities and best practices.

  • react-tooltip:

    react-tooltip is very easy to use, with a straightforward API that allows developers to implement tooltips quickly. Its simplicity makes it a great choice for beginners or projects with tight deadlines.

  • react-tooltip-lite:

    react-tooltip-lite is also easy to use, offering a minimalistic API that allows for quick implementation of tooltips. It is particularly suitable for developers looking for a no-frills solution.

Dependencies

  • react-tippy:

    react-tippy relies on Popper.js for positioning, which adds a dependency to your project. This can be a consideration for projects aiming to minimize external libraries.

  • react-tooltip:

    react-tooltip has no external dependencies, making it a lightweight option that can be easily integrated into any React project without additional overhead.

  • react-tooltip-lite:

    react-tooltip-lite is also dependency-free, ensuring a simple integration process. This makes it an attractive choice for projects that prioritize minimalism.

Community and Support

  • react-tippy:

    react-tippy has a growing community and is actively maintained, providing good support through documentation and community contributions. This can be beneficial for developers seeking help or examples.

  • react-tooltip:

    react-tooltip has a solid user base and decent documentation, but it may not be as actively maintained as react-tippy. Users might find fewer updates and community resources over time.

  • react-tooltip-lite:

    react-tooltip-lite is less popular than the other two libraries, which may result in limited community support and resources. However, its simplicity may reduce the need for extensive documentation.

How to Choose: react-tippy vs react-tooltip vs react-tooltip-lite

  • react-tippy:

    Choose react-tippy if you need a highly customizable tooltip solution that supports various animations and placements. It is built on top of Popper.js, making it robust for complex positioning scenarios.

  • react-tooltip:

    Opt for react-tooltip if you prefer a straightforward and easy-to-use tooltip library that requires minimal setup. It is ideal for projects where simplicity and quick implementation are prioritized.

  • react-tooltip-lite:

    Select react-tooltip-lite for a lightweight and flexible tooltip solution that offers basic functionality without the overhead of additional features. It's suitable for projects that require simple tooltips without extensive customization.

README for react-tippy

React Tippy

React Version

A lightweight tooltip for React. Demo at Demo page here...

Based on tippy.js and powered by Popper.js

Example

Why you should use it?

It is designed to work friendly with React, it provides <Tooltip> element or a higher-order component.

It uses React DOM to render tooltip content. Therefore, you can fully use it in your React project without doubt.

It is an enhancement of Tippy.js for using in React.

Getting Started

yarn add react-tippy

How to use

First, you need import css

import 'react-tippy/dist/tippy.css'

There are 2 ways for you to use react Tippy

Tooltip Component

import {
  Tooltip,
} from 'react-tippy';


<Tooltip
  // options
  title="Welcome to React"
  position="bottom"
  trigger="click"
>
  <p>
    Click here to show popup
  </p>
</Tooltip>

High Order Component

withTooltip(Component, options)

import {
  withTooltip,
} from 'react-tippy';


const Header = () => (
  <h2>Header here</h2>
);

const HeaderWithTooltip = withTooltip(Header, {
  title: 'Welcome to React with tooltip',
});

Props

SettingDefaultOptionsRole
disabledfalsetrue falseShow or not show tooltip
openundefinedtrue falseJust only use it if you want to show/hide it manually. Usually, you don't need it
useContextundefinedtrue falseDefine that you're using context in your tooltip content (or html props). It's useful when you want your tooltip content can connect to redux store
onRequestClosenoop functionFunctionJust only use it if you want to show/hide it manually. This event is fired when you click outside of your tooltip, should be used with the prop interaction to keep your tooltip showing
positiontoptop bottom left rightSpecifies which direction to position the tooltip on the element. Add the suffix -start or -end to shift the position. top-end is an example.
triggermouseenter focusmouseenter focus click manualSpecifies which type of events will trigger a tooltip to show. Separate each by a space. mouseenter is for hovering and touch on mobile, and focus is for keyboard navigation. Use manual if you want to show/hide the tooltip manually/programmatically (see below).
tabIndexundefinednumberset tabIndex so element can receive focus
interactivefalsetrue falseMakes a tooltip interactive, i.e. will not close when the user hovers over or clicks on the tooltip. This lets you create a popover (similar to Bootstrap) when used in conjunction with a click trigger.
interactiveBorder2Any number (pixels)Specifies the size of the invisible border around an interactive tooltip that will prevent it from closing. Only applies to mouseenter triggered tooltips.
delay0Any integer >= 0 (milliseconds)Specifies how long it takes after a trigger event is fired for a tooltip to show.
hideDelay0Any integer >= 0 (milliseconds)Specifies how long it takes after a leave event is fired for a tooltip to hide. Not applicable when clicking on the document to hide tooltips.
animationshiftshift perspective fade scale noneSpecifies the type of transition animation a tooltip has.
arrowfalsetrue falseAdds an arrow pointing to the tooltipped element. Setting this to true disables animateFill.
arrowSizeregularsmall regular bigSpecifies how big the tooltip's arrow is.
animateFilltruetrue falseAdds a material design-esque filling animation. This is disabled if you have arrow set to true.
duration375Any integer >= 0 (milliseconds)Specifies how long the transition animation takes to complete when showing a tooltip.
distance10Any number (pixels)Specifies how far away the tooltip is from its element.
offset0Any number (pixels)Offsets the tooltip on its opposite axis. For position top and bottom, it acts as offsetX. For position left and right, it acts as offsetY.
hideOnClicktruetrue false 'persistent'Specifies whether to hide a tooltip upon clicking its element after hovering over.
multiplefalsetrue falseSpecifies whether to allow multiple tooltips open on the page (click trigger only).
followCursorfalsetrue falseSpecifies whether to follow the user's mouse cursor (mouse devices only).
inertiafalsetrue falseModifies the transition-timing-function with a cubic bezier to create a "slingshot" intertial effect.
transitionFliptruetrue falseSpecifies whether to transition between flips or not. Uses the same transition timing as duration
popperOptions{}ObjectAllows more control over tooltip positioning and behavior. See right below.
htmlnullreact elementTooltip content. If you don't define html, the title will be used
rawTemplateundefinedtemplate id or dom elementUSED WITH CAUTION. Support creating html templates from tippyjs. But IMO, it's not good to render raw html in React, it's a way to work around if you want to render some complex html generated by 3rd party such as SVG chart(in case you can not find React lib to render chart)
unmountHTMLWhenHidefalsetrue falseBy default, html component will be mounted at first show and unmount only when your tooltip component is unmounted. When you set unmountHTMLWhenHide is true, it will be unmounted whenever tooltip is hidden.
sizeregularsmall regular bigSpecifies how big the tooltip is.
stickyfalsetrue falseSpecifies whether the tooltip should stick to its element reference when it's showing (for example, if the element is animated/moves).
stickyDuration200Any number (milliseconds)Specifies the 'smoothing' transition when the popper's position updates as its element moves.
tagdivA HTML element tag name e.g. spanSpecifies the HTML element used to wrap the content that triggers the tooltip. When using a tooltip inline, span is more likely to be valid markup. When using a higher-order component with a block-level element, a div or a is more likely to be valid markup.
touchHoldfalsetrue falseChanges the trigger behavior on touch devices. It will change it from a tap to show and tap off to hide, to a tap and hold to show, and a release to hide.
onShownoopfunctionCallback when the tooltip has been triggered and has started to transition in
onShownnoopfunctionCallback when the tooltip has fully transitioned in and is showing
onHidenoopfunctionCallback when the tooltip has begun to transition out
onHiddennoopfunctionCallback when the tooltip has fully transitioned out and is hidden
themedarkdark light transparentThe CSS styling theme.
className''stringclassName of container
style{}React inline style (object)style of container

Custom tooltip content

You need to pass element to option html

import {
  Tooltip,
} from 'react-tippy';


<Tooltip
  html={(
    <div>
      <strong>
        Hello
      </strong>
    </div>
  )}
>
  // ...
</Tooltip>

Interactive html tooltip

You can use interactive prop and html for your interactive tooltip

  <Tooltip
    trigger="click"
    interactive
    html={(
      <div>
        <p>{tooltipContent}</p>
        <input
          type="text"
          value={tooltipContent}
          onChange={(e) => {setTooltipContent(e.target.value)}}
        />
      </div>
    )}
  >
    ...
  </Tooltip>

Show/hide your tooltip manually

<Tooltip
  title={tooltipContent}
  open={open}
  onRequestClose={() => {console.log('call'); setIsOpen(false)}}
>
  <span className="App-intro" onClick={() => { setIsOpen(true) }}>
    This will show {tooltipContent}
  </span>
</Tooltip>

Browser support

Tippy gracefully degrades on older browsers (and with JavaScript disabled) by using the browser's default title tooltip.

If you want to support older browsers, please add polyfill by yourself.

Supported browsers

Browsers which support requestAnimationFrame. See caniuse. If your audience has low Opera Mini usage (common in western countries), then support should be >96%.

Touch devices

Tippy works on touch devices almost the same as on desktop/mouse devices. However on iOS devices, in order for tooltips to close when tapping anywhere on the body and to trigger hover events on non-clickable elements, a .tippy-touch { cursor: pointer !important; } class is added to the body.

Accessibility

Tooltips have ARIA labelling to ensure accessibility.

Troubleshoot

I cannot connect html props with redux connect. Or can I use context in tooltip content?

react-tippy provides useContext for Tooltip component. It can allow you to use context in tooltip content. Therefore, you can totally connect it to redux.

<Tooltip
  trigger="click"
  useContext
  html={(
    <TooltipContent />
  )}
>
  Click here
</Tooltip>

Could I change tooltip style (width, height, ...)?

You can change css to have your tooltip width. If you use html props, you can do like this:

html={(
  <div style={{ width: 400 }}>
    // content here
  </div>
)}

License

MIT. Also check Popper.js' license.