Search code examples
htmlcsstooltip

Is a CSS-only Inline "Tooltip" With HTML Content Inside (eg. images) Possible?


There are a lot of tooltip solutions on Stack Overflow, ie. ways of showing some text or HTML when the user hovers over some other text. However, I can't seem to find one that:

  • is pure HTML + CSS
  • allows the tooltip to be inline (eg. doesn't require a <div> or other block element)
  • allows HTML tooltip content (potentially with display:block)

These requirements come from wanting to provide definitions of terms inline, inside paragraphs of text, and I'd like for those definitions to be able to contain block-display HTML content (eg. paragraphs and images).

Most of the CSS-only solutions I find seem to work by nesting the "tooltip" definition inside the hover target's HTML. However, that's impossible if you want the term to be inline, but its definition to be block, because you'd have to nest block content inside an inline tag.

Is there any other approach I can use that lets me have words or phrases inside paragraphs as "hover targets", but then show HTML hover definitions when that happens ... without Javascript?


Solution

  • If it is allowable to change the markup of the actual text to replace inline elements (p is tprobably the most likely to need this) with divs + suitable CSS, you can insert tooltip content within divs which are inline-block.

    This means any block content can be held in the tooltip.

    Here's a trivial example:

    .inline {
      display:inline-block;
      position: relative;
    }
    .inline .content {
      display: none;
      position: absolute;
      top: 1em;
      left: 0;
      z-index: 99999;
      border-style: solid;
      background-color: white;
    }
    .inline:hover .content {
      display: block;
    }
    <div>I am not hoverable.
        <div class="inline">But I am hoverable.&nbsp; 
          <div class="content">I am tooltip content and I've got an image in me... 
            <img src="https://picsum.photos/200"/>
            <div>...and another div</div>
          </div>
        </div>I am not hoverable.
    </div>

    Of course, there's the question of how to ensure the tooltip is visible on all types of devices and where to place it, but that's another question and something ordinary span type tooltips have to solve too.