[React] Tooltip
See demo first. Move the cursor (mouse pointer) to hover over the blue text with underline:
The idea comes from the JavaScript implementation of my post [1]. The following is complete React source code.
HTML:
<div id="root">
<!-- This div's content will be managed by React. -->
</div>
CSS:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | span[data-descr] { text-decoration: underline; color: blue; cursor: help; } .invisible { display: none; } .tooltip { position: absolute; background-color: yellow; border: 1px gray solid; border-radius: 3px; padding: 3px; } |
JSX:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 | function Tooltip(props) { if (props.isVisible) { return <div className="tooltip" style={props.style}>{props.textContent}</div>; } return <div className="tooltip invisible" style={props.style}>{props.textContent}</div>; } class TooltipApp extends React.Component { constructor(props) { super(props); this.state = { isShowTooltip: false, tooltipContent: "", tooltipStyle: {} }; this.ShowTooltip = this.ShowTooltip.bind(this); this.HideTooltip = this.HideTooltip.bind(this); } ShowTooltip(event) { var elm = event.target; var tTop = (elm.offsetTop + elm.offsetHeight + 5) + 'px'; var tLeft = elm.offsetLeft + 'px'; this.setState({ isShowTooltip: true, tooltipContent: event.target.dataset.descr, tooltipStyle: { top: tTop, left: tLeft } }); } HideTooltip() { this.setState({isShowTooltip: false}); } render() { return ( <div> <Tooltip style={this.state.tooltipStyle} textContent={this.state.tooltipContent} isVisible={this.state.isShowTooltip} /> <p>This is a example of{" "} <span onMouseEnter={this.ShowTooltip} onMouseLeave={this.HideTooltip} data-descr="Hello, I am tooltip!">tooltip</span> via{" "} <span onMouseEnter={this.ShowTooltip} onMouseLeave={this.HideTooltip} data-descr="Hello, I am React!">React</span></p> </div> ); } } ReactDOM.render( <TooltipApp />, document.getElementById('root') ); |
Tested on: CodePen
References:
[1] | Pure CSS Tooltip and JavaScript Implementation |
[2] |
[3] | reactjs - How to avoid JSX component from condensing when React.js rendering it? - Stack Overflow |