Skip to content

How to Create a Custom CSS Tooltip on Node Hover in OrgChart JS

How to Create a Custom CSS Tooltip on Node Hover in OrgChart JS: How to Create a Custom CSS Tooltip on Node Hover in OrgChart JS (Full Guide + Code)

How to Create a Custom CSS Tooltip on Node Hover in OrgChart JS (Full Guide + Code)

If you want to enhance the user experience in your OrgChart JS charts, adding CSS-driven tooltips is one of the most effective improvements. Tooltips allow users to quickly view additional node information, such as a job title, description, or metadata, without cluttering the node design.

Full code example

In this tutorial, we will show you step-by-step how to build a beautiful animated CSS tooltip that appears when hovering over any node in OrgChart JS.

This approach gives you:

  • Fully custom tooltip styling
  • Smooth animations
  • Precise positioning
  • No modification to OrgChart templates
  • Works with any OrgChart JS theme or custom template

Let us get started.

Why Use Custom CSS Tooltips in OrgChart JS?

OrgChart JS provides built-in templates and field bindings, but a custom tooltip gives you:

Better branding

Match your company colors, fonts, and style.

More flexibility

Tooltips can show long text, HTML, or dynamic content.

Improved usability

Users often need quick details without opening a full node dialog.

Step 1: Create a Tooltip Container

The tooltip sits outside the chart and is positioned dynamically.

html
<div id="tooltip" class="chart-menu">
    <div class="tooltip tooltip-west">
        <span class="tooltip-content"></span>
    </div>
</div>
<div id="tree"></div>

This structure supports complex CSS animation and arrow styling.

Step 2: Initialize OrgChart JS and Bind Tooltip Content

We use the tooltip field inside the node data:

javascript
var chart = new OrgChart(document.getElementById('tree'), {
    template: 'ana',
    nodeBinding: {
        tooltip: 'tooltip'
    }
});

Load sample nodes

javascript
chart.load([
    { id: 0, name: "node0", tooltip: 'At vero eos et accusamus et iusto odio' },
    { id: 1, name: "node1", pid: 0, tooltip: 'Lorem ipsum dolor sit amet...' },
    { id: 2, name: "node2", pid: 0, tooltip: 'Sed ut perspiciatis unde omnis...' },
    ...
]);

Each node now has custom tooltip text.

Step 3: Add Hover Events on Nodes

OrgChart JS renders nodes as SVG elements, so we detect hover using the redraw event.

The following code:

  • Finds all nodes
  • Detects mouseover and mouseleave
  • Reads the tooltip field
  • Uses OrgChart._menuPosition() to calculate exact coordinates
javascript
chart.onRedraw(() => {
    let fieldElements = chart.element.querySelectorAll('[data-n-id]');
    for (let i = 0; i < fieldElements.length; i++) {
        let fieldElement = fieldElements[i];
        fieldElement.addEventListener('mouseover', function (e) {
            let nodeElement = this;
            while (!nodeElement.hasAttribute('data-n-id')) {
                nodeElement = nodeElement.parentNode;
            }
            let id = nodeElement.getAttribute('data-n-id');
            let tooltip = document.getElementById("tooltip");
            let tooltipContent = document.querySelector(".tooltip-content");

            let position = OrgChart._menuPosition(this, tooltip, chart.getSvg());

            tooltipContent.innerHTML = chart.get(id).tooltip;
            tooltip.style.left = position.x + 150 + "px";
            tooltip.style.top = position.y + "px";
            tooltip.classList.add("visible");

        });

        fieldElement.addEventListener('mouseleave', function () {
            let tooltip = document.getElementById("tooltip");
            if (tooltip) {
                tooltip.classList.remove('visible');
            }
        });
    }
});

Step 4: Style the Tooltip with CSS

css
html, body{
  width: 100%;
  height: 100%;
  padding: 0;
  margin:0;
  overflow: hidden;
  font-family: Helvetica;
}

#tree{
  width:100%;
  height:100%;
}

.tooltip {
    position: absolute;
    z-index: 999;
    width: 2.2em;
    height: 2.2em;
    cursor: pointer;
}

/* Tooltip bubble */

.tooltip-content {
    position: absolute;
    background: #F57C00;
    z-index: 9999;
    width: 200px;
    bottom: 50%;
    margin-bottom: -1em;
    padding: 20px;
    border-radius: 20px;
    font-size: 1.1em;
    text-align: center;
    color: #fff;
    opacity: 0;
    pointer-events: none;
    transition: opacity 0.3s, transform 0.3s;
}

.tooltip-west .tooltip-content {
    left: 33px;
    transform-origin: -2em 50%;
    transform: translate3d(0,50%,0) rotate3d(1,1,1,30deg);
}

.visible .tooltip .tooltip-content {
    opacity: 1;
    transform: translate3d(0,50%,0) rotate3d(0,0,0,0);
    pointer-events: auto;
}

/* Tooltip arrow */

.tooltip-content::after {
    content: '';
    position: absolute;
    width: 2em;
    height: 2em;
    top: 50%;
    margin-top: -1em;
    background: url(https://balkan.app/OrgChartJS-Demos/customTemplateTooltip.svg)
        no-repeat center;
    background-size: 100%;
}

.tooltip-west .tooltip-content::after {
    right: 99%;
}

This creates a clean dark tooltip with smooth fade and scale animation.

Final Thoughts

With this approach, you can add rich and branded tooltips to your OrgChart JS diagrams without changing templates.

You can easily extend it to show:

  • Node photos
  • HTML badges
  • Dynamic API-loaded content
  • Action links or buttons

If you need advanced node interactions in OrgChart JS, custom tooltip behavior is a great next step.

Tooltip on node hover with OrgChart JS