React Base Fiddle (JSX)
Starting point for creating JSFiddles with React.
HTML
<script src="https://unpkg.com/react@16/umd/react.development.js"></script>
<script src="https://unpkg.com/react-dom@16/umd/react-dom.development.js"></script>
<!--ahmeturganci-->
<div id="container">
<!-- This element's contents will be replaced with your component. -->
</div>
SCSS
body {
font-family: Helvetica;
font-size: 14px;
}
.container {
margin-top: 120px;
text-align: center;
}
p {
margin-top: 30px;
margin-bottom: 30px;
}
$tooltip-color: rgba(0, 0, 0, 0.7);
$tooltip-text-color: #fff;
.tooltip {
position: relative;
}
.tooltip-trigger {
display: inline-block;
text-decoration: underline;
}
.tooltip-bubble {
min-width: 120px;
max-width: 210px;
position: absolute;
z-index: 10;
&::after {
content: "";
position: absolute;
}
}
.tooltip-top {
bottom: 100%;
left: 50%;
padding-bottom: 9px;
transform: translateX(-50%);
&::after {
border-left: 9px solid transparent;
border-right: 9px solid transparent;
border-top: 9px solid $tooltip-color;
bottom: 0;
left: 50%;
transform: translateX(-50%);
}
}
.tooltip-bottom {
top: 100%;
left: 50%;
padding-top: 9px;
transform: translateX(-50%);
&::after {
border-left: 9px solid transparent;
border-right: 9px solid transparent;
border-bottom: 9px solid $tooltip-color;
top: 0;
left: 50%;
transform: translateX(-50%);
}
}
.tooltip-left {
top: 50%;
right: 100%;
padding-right: 9px;
transform: translateY(-50%);
&::after {
border-left: 9px solid $tooltip-color;
border-top: 9px solid transparent;
border-bottom: 9px solid transparent;
top: 50%;
right: 0;
transform: translateY(-50%);
}
}
.tooltip-right {
top: 50%;
left: 100%;
padding-left: 9px;
transform: translateY(-50%);
&::after {
border-right: 9px solid $tooltip-color;
border-top: 9px solid transparent;
border-bottom: 9px solid transparent;
top: 50%;
left: 0;
transform: translateY(-50%);
}
}
.tooltip-message {
background: $tooltip-color;
border-radius: 3px;
color: $tooltip-text-color;
font-size: 0.75rem;
line-height: 1.4;
padding: 0.75em;
text-align: center;
}
Babel + JSX
class Tooltip extends React.Component {
constructor(props) {
super(props)
this.state = {
displayTooltip: false
}
this.hideTooltip = this.hideTooltip.bind(this)
this.showTooltip = this.showTooltip.bind(this)
}
hideTooltip () {
this.setState({displayTooltip: false})
}
showTooltip () {
this.setState({displayTooltip: true})
}
render() {
let message = this.props.message
let position = this.props.position
return (
<span className='tooltip'
onMouseLeave={this.hideTooltip}
>
{this.state.displayTooltip &&
<div className={`tooltip-bubble tooltip-${position}`}>
<div className='tooltip-message'>{message}</div>
</div>
}
<span
className='tooltip-trigger'
onMouseOver={this.showTooltip}
>
{this.props.children}
</span>
</span>
)
}
}
class Hello extends React.Component {
constructor(props) {
super(props);
this.state = {
};
}
render() {
const data =[{"name":"test1","tooltip":"AAAAAAAAA"},{"name":"test2","tooltip":"BBBBBB"}];
return (
<div className='container'>
{data.map(function(d, id){
return (
<li key={id}>{d.name} <Tooltip message={d.tooltip} position={'top'}>{d.tooltip}</Tooltip></li>
)
})}
</div>
);
}
}
ReactDOM.render(
<Hello />,
document.getElementById('container')
);