Overlays
Overlay is the fundamental component for positioning and controlling tooltip visibility. It's a wrapper around Popper.js, that adds support for transitions, and visibility toggling.
Basic
Overlays consist of at least two elements, the "overlay", the element to be positioned, as well as a "target", the element the overlay is positioned in relation to. You can also also have an "arrow" element, like the tooltips and popovers, but that is optional.
const Overlays = () => { const [show, setShow] = useState(false); const target = useRef(null); return ( <Fragment> <Button variant="primary" ref={target} onClick={() => setShow(!show)}> Click me to see </Button> <Overlay target={target.current} show={show} placement="right"> {({ placement, arrowProps, show: _show, popper, ...props }) => ( <div {...props} style={{ backgroundColor: 'rgba(117, 79, 254, 0.50)', padding: '2px 10px', color: 'white', borderRadius: 3, ...props.style, }} > Simple tooltip </div> )} </Overlay> </Fragment> );}export default Overlays;
OverlayTrigger
Since the above pattern is pretty common, but verbose, we've included <OverlayTrigger>
component to help with common use-cases. It even has functionality to delayed show or hides, and a few different "trigger" events you can mix and match.
<OverlayTrigger placement="right" delay={{ show: 250, hide: 400 }} overlay={( <Tooltip id="button-tooltip"> Simple tooltip </Tooltip> )} > <Button variant="primary">Hover me to see</Button></OverlayTrigger>
Customizing trigger behavior
For more advanced behaviors <OverlayTrigger>
accepts a function child that passes in the injected ref
and event handlers that correspond to the configured trigger
prop.
const Overlays = () => { return ( <Fragment> <OverlayTrigger placement="bottom" overlay={<Tooltip id="button-tooltip-2">Check out this avatar</Tooltip>} > {({ ref, ...triggerHandler }) => ( <Button variant="light" {...triggerHandler} className="d-inline-flex align-items-center" > <Image ref={ref} roundedCircle src="https://i.pravatar.cc/30?img=3" width={30} alt="" /> <span className="ms-1">Hover to see</span> </Button> )} </OverlayTrigger> </Fragment> );}export default Overlays;