Search code examples
javascripthtmlcsstooltip

Making a simple tooltip with only HTML and CSS


I want my tooltip element (the <span>) to appear above everything on the page but still relative to its parent element (the <td>). I'm trying with JS but would like a no-script solution.

JS to show/hide the <span>:

window.AETid = "AE";

        function tooltip(tid) {
         document.getElementById(tid).style.display="block";
        }

        function hideTooltip(tid) {
         document.getElementById(tid).style.display="none";
        }

HTML:

<td class="ht" onmouseover="tooltip(window.AETid);" onmouseout="hideTooltip(window.AETid);">
Send reminders?
<span class="tooltip" id="AE">If this option is selected, e-mail reminders will be sent to the client before each appointment.</span>
</td>

CSS for .tooltip:

.ht { position: relative; }
    .tooltip {
        color: #ff0000;
        display: none;
        z-index: 100;
        position: absolute;
        right:0px;
        bottom: 0px;
    }

Currently, the tooltip appears as expected when I hover over the <td>, but it appears within the element, thus changing the size of the <td> and thus the <tr> and thus the whole dang <table>. I want the tooltip to appear, well, like tooltips do: above and not effecting the rest of the page. z-index doesn't seem to do it alone in my case...

Using position: fixed instead of absolute on the tooltip <span> kept the element from interrupting the DOM, but literally positioned it after everything else on the page (at the bottom)

All help is greatly appreciated


Solution

  • I found a method to make a very lightweight tooltip with no JS!

    .ht:hover .tooltip {
      display:block;
    }
    
    .tooltip {
      display: none;
        color: red;
        margin-left: 28px; /* moves the tooltip to the right */
        margin-top: 15px; /* moves it down */
        position: absolute;
        z-index: 1000;
    }
    <table>
      <td class="ht">Send reminders?
      <span class="tooltip">this is the tooltip alshdgwh gahfguo 
      wfhg fghwoug wugw hgrwuog hwaur guoarwhg rwu</span>
      </td>
    </table>

    Totally awesome and props to this guy!