JSFiddle - React, Tailwind, and code Playground

by Alexandru Gatea

HTML

<div class="tooltips">
	<input type="checkbox" id="tool">
	<label for="tool">Enable Tooltips</label>
</div>

<div class="parent">
	<div data-has-tooltip="false" data-tooltip="Lorem ipsum dolor sit amet, consectetur adipisicing elit. Beatae velit, veritatis ratione ab eos debitis in reiciendis, doloremque dignissimos eaque sequi! Fugiat sequi ad enim eum laborum illo! Ipsam, magnam.">Inerface colors</div>
</div>
<div class="parent">
	<div data-has-tooltip="false" data-tooltip="Lorem ipsum dolor sit amet, consectetur adipisicing elit. Beatae velit, veritatis ratione ab eos debitis in reiciendis, doloremque dignissimos eaque sequi! Fugiat sequi ad enim eum laborum illo! Ipsam, magnam.">Road Width</div>
</div>
<div class="parent">
	<div  >I don't need explanations</div>
</div>
<div class="parent">
	<div data-has-tooltip="false" data-tooltip="Lorem ipsum dolor sit amet, consectetur adipisicing elit. Beatae velit, veritatis ratione ab eos debitis in reiciendis, doloremque dignissimos eaque sequi! Fugiat sequi ad enim eum laborum illo! Ipsam, magnam.">Icon Padding</div>
</div>

CSS

*, *:before, *:after {box-sizing: border-box;}

.parent {
	padding: 20px 20px 100px;
	border: 1px solid #ccc;
	margin-bottom: 20px;
	border-radius: 6px;
}


[data-has-tooltip="true"] {
	padding-right: 10px;
	position: relative;
	display: inline-block;
	cursor: pointer;
}

.parent:hover [data-has-tooltip="true"]:before {
	opacity: 1;
}

.parent [data-has-tooltip="true"]:hover:after {display: block}

[data-has-tooltip="true"]:before {
	content: "i";
	position: absolute;
	right: 0;
	bottom: 5px;
	width: 8px;
	height: 8px;
	background: #ccc;
	border-radius: 8px;
	font-size: 6px;
	display: flex;
	align-items: center;
	justify-content: center;
	opacity: 0;
}

[data-has-tooltip="true"]:after {
	content: attr(data-tooltip);
	position: absolute;
	left: calc(100% - 10px);
	top: 0;
	width: 250px;
	height: auto;
	padding: 20px;
	background: #ccc;
	border-radius: 8px;
	font-size: 12px;
	display: none;
	align-items: flex-start;
	justify-content: flex-start;
}

JavaScript

// JavaScript
const showTools = document.getElementById('tool');
let targets = document.querySelectorAll('[data-has-tooltip]');

showTools.addEventListener('change', e => {
  if (e.target.checked === true) {

    targets.forEach((e) => {
      e.setAttribute('data-has-tooltip', true);
    })

  } else {
    targets.forEach((e) => {
      e.setAttribute('data-has-tooltip', false);
    })
  }
});