Tooltips, info icons and hover pop-ups: showing fees, sizes and help text to everyone
How to make tooltips, info icons, size guides and hover pop-ups on a small business website work with a keyboard, touch and screen readers: show key fees in text, a copyable toggletip button, the hover rules in WCAG 1.4.13, platform notes and a 5-minute check.
Small business sites hide a lot of useful words behind a little "i" or "?" icon: the shipping fee, what "deposit" means, the size chart, the cancellation rule, why a field asks for a date of birth, or the name of a colour swatch. That text often only appears when a mouse hovers over it. Keyboard users can't reach it, phone users have no hover, screen readers may never hear it, people who zoom in see it cut off or covering what they're reading, and AI shopping assistants that read your page can miss it too. Shoppers are already wary of conditions they only find at the till. The fix is simple: put important details on the page, and make any pop-up hint work with a keyboard, touch and a screen reader (1.4.13 Content on Hover or Focus). Here's how.
1. First ask: does this need to be hidden at all?
If the hidden text changes what someone pays, books or agrees to, show it in plain text next to the price, button or field. Fees, deposits, minimums, cancellation windows, delivery cut-offs and "required" notes belong on the page. Keep pop-up hints for small extras. Visible help text tied to the field is also the easiest kind for screen readers (3.3.2 Labels or Instructions, 1.3.1 Info and Relationships).
<label for="party-size">Party size (required)</label> <input id="party-size" name="party" type="number" min="1" aria-describedby="party-help" required> <p id="party-help">Groups of 8 or more need a $50 deposit, refunded if you cancel 48 hours ahead.</p> <p class="price">$36.00 <span>+ $6.95 shipping, free over $75</span></p> <!-- example amounts and rules; use your real ones -->
The amounts and rules above are example details. Use your own.
2. If you need a pop-up hint, use a button ("toggletip")
An info icon that people can click or tap, and reach with the Tab key, works for mouse, touch, keyboard and screen readers. It needs a real button with a name, it should say whether it is open, the text should stay until the person closes it or moves on, and Escape should close it. This is a pattern many accessibility teams recommend over hover-only tooltips (2.1.1 Keyboard, 4.1.2 Name, Role, Value).
<p>
Delivery fee: $6.95
<button type="button" class="tip-btn" aria-expanded="false" aria-controls="fee-tip">
<span aria-hidden="true">i</span><span class="visually-hidden">About the delivery fee</span>
</button>
</p>
<p id="fee-tip" class="tip" hidden>Covers same-day delivery within 10 miles. Free on orders over $75.</p>
<style>
.tip-btn { min-width: 24px; min-height: 24px; border: 2px solid #1a1a1a; border-radius: 50%; background: #fff; color: #1a1a1a; }
.tip-btn:focus-visible { outline: 3px solid #1a1a1a; outline-offset: 2px; }
.tip { border: 1px solid #1a1a1a; padding: .5rem .75rem; max-width: 30rem; background: #fff; color: #1a1a1a; }
.visually-hidden { position: absolute; width: 1px; height: 1px; overflow: hidden; clip: rect(0 0 0 0); white-space: nowrap; }
</style>
<script>
document.querySelectorAll('.tip-btn').forEach(function (btn) {
var tip = document.getElementById(btn.getAttribute('aria-controls'));
function setOpen(open) { btn.setAttribute('aria-expanded', open); tip.hidden = !open; }
btn.addEventListener('click', function () { setOpen(tip.hidden); });
document.addEventListener('keydown', function (e) {
if (e.key === 'Escape' && !tip.hidden) { setOpen(false); btn.focus(); }
});
});
</script>
<!-- example fee and wording; use your real details -->
The hint sits right after the button in the page, so a screen reader reaches it next and it doesn't cover other content. The button is at least 24 by 24 CSS pixels so it's easy to tap (2.5.8 Target Size (Minimum)), and its border stands out against the page (1.4.11 Non-text Contrast).
3. If you keep a hover tooltip, meet the three rules
Some themes and apps show a tooltip on hover. WCAG 1.4.13 asks that extra content which appears on hover or focus is:
- Dismissible: people can close it without moving the mouse or focus, usually with Escape, so it doesn't cover what they're reading.
- Hoverable: people can move the mouse onto the tooltip without it vanishing, which matters for anyone using screen magnification.
- Persistent: it stays until the person moves away or closes it, not on a 2-second timer.
It must also appear on keyboard focus, not only on mouse hover. A CSS-only starting point:
<span class="hint">
<button type="button" aria-describedby="size-hint">Size guide</button>
<span role="tooltip" id="size-hint">Runs small. Order one size up if between sizes.</span>
</span>
<style>
.hint { position: relative; display: inline-block; }
.hint [role="tooltip"] { display: none; position: absolute; top: 100%; left: 0; z-index: 10;
margin-top: 0; padding: .5rem .75rem; width: max-content; max-width: 16rem;
background: #1a1a1a; color: #fff; }
/* shows on hover AND keyboard focus, and stays while the pointer is over the tooltip itself */
.hint:hover [role="tooltip"], .hint:focus-within [role="tooltip"] { display: block; }
.hint.dismissed [role="tooltip"] { display: none; }
</style>
<script>
// Escape hides the tooltip without moving focus
document.addEventListener('keydown', function (e) {
if (e.key === 'Escape') document.querySelectorAll('.hint').forEach(function (h) { h.classList.add('dismissed'); });
});
document.querySelectorAll('.hint').forEach(function (h) {
h.addEventListener('mouseleave', function () { h.classList.remove('dismissed'); });
h.addEventListener('focusout', function () { h.classList.remove('dismissed'); });
});
</script>
<!-- example wording; use your real size advice -->
There is no gap between the button and the tooltip (margin-top: 0), so the pointer can move onto it. Touch screens have no hover, so on phones this still depends on focus. For anything important, the toggletip in section 2 or plain text in section 1 is safer.
4. Don't rely on the title attribute
The browser's built-in title tooltip (the little yellow box) only shows on mouse hover, can't be reached by keyboard or touch, can't be zoomed and is read inconsistently by screen readers. It's fine as a bonus, but never as the only place a name or instruction lives. Icon-only buttons need a real accessible name, such as visible text or aria-label. See accessible links and buttons.
5. Hover menus, previews and "quick view"
The same rules apply to drop-down menus that open on hover, product cards that show a second photo or "Add to cart" only on hover, and map pins with hover cards. Make sure each opens with the keyboard, stays open while the pointer is on it, closes with Escape, and that the "Add to cart" or details link is reachable without hovering. See navigation menus and drop-downs.
Platform notes
- WordPress: tooltip and "info icon" plugins vary a lot. Test each one with Tab and Escape, and avoid plugins that only use hover or the
titleattribute. For WooCommerce fees, show them as text in the product description and cart. See WordPress fixes. - Shopify: theme "info" badges, size chart pop-ups and shipping app tooltips are theme or app code. Put shipping costs and size advice in the product description as text, and test any pop-up with a keyboard. See Shopify fixes.
- Squarespace, Wix and GoDaddy: built-in hover effects on images and buttons can hide text until hover. Use visible text blocks for details, and check any hover reveal also works when you Tab to it. See Squarespace, Wix and GoDaddy.
- Webflow and AI-built sites: custom interactions often trigger "on hover" only. Add the same interaction for focus or click, and make the trigger a real button. AI builders often add hover-only info icons and "?" badges with no name. See Webflow fixes and AI-built sites.
Settings and app names change often, so check your platform's or app's own help pages for the current option.
Common mistakes
- Shipping fees, deposits or cancellation rules shown only in a hover tooltip.
- An "i" or "?" icon that is a plain
<span>or image, so Tab skips it. - Tooltips that disappear when you move the mouse onto them, or after a couple of seconds.
- Tooltips that can't be closed and cover the field or price underneath.
- Colour swatch names, icon button names or form instructions only in a
titleattribute. - "Add to cart" or product details that only appear when hovering over the card.
- Tiny info icons that are hard to tap on a phone.
- An overlay widget instead of real fixes. See overlays vs real fixes.
A 5-minute check you can do today
- On your product, booking or quote page, list every "i", "?" or hover hint. Does any of them hide a fee, deposit, rule or requirement? Move that into plain text.
- Using only Tab, Shift+Tab, Enter and Space, reach each info icon and open it. Can you always see where you are? See our keyboard test.
- With a hint open, press Escape. Does it close?
- Hover a hint with the mouse, then move the mouse onto the hint text. Does it stay?
- On your phone, tap each info icon. Does the text appear, and can you close it?
- Zoom to 200%. Does any pop-up cover the thing you're reading or run off the screen?
What a scan can and can't check here
Our scan is automated, so it finds only part of the barriers on the pages it visits. It can flag info icons and buttons with no accessible name, low contrast and some ARIA mistakes. It can't tell whether a tooltip opens with the keyboard, stays put when you hover it, closes with Escape, or hides a fee people need to know, which is why the 5-minute check above matters. Our Fix-Pack reports include copy-paste fixes for your platform for what the scan finds.
Related: accessible contact forms, form error messages, don't rely on colour alone, online store checkout, mobile zoom and tap targets.
This is general technical guidance, not legal advice, and it doesn't certify compliance with the ADA or any law, or protect against claims.
Want the fixes written for you?
Start with a free homepage snapshot. The $149 Fix-Pack scans up to 10 pages and gives copy-paste fixes for your platform within 48 hours, with a 14-day refund promise. See a sample report first.
This is general technical guidance, not legal advice, and it does not certify compliance with the ADA or any law.
Have a staff or team page? See meet the team page accessibility.
Related guides
- Drag, swipe and slider controls: price filters, before-and-after photos and galleries everyone can use
- Site search that everyone can use: search boxes, suggestions and results pages
- Product grids that everyone can shop: cards, Load more, quick view and add to cart
- Product pages shoppers can trust: size charts, options, quantity and photo zoom
This guide is general technical information, not legal advice. Following it does not certify ADA or any legal compliance. Automated checks find only part of accessibility barriers.
Check your own site, then decide
- Free homepage snapshot. Your top 3 issues in about a minute. No signup, no card.
- $149 Fix-Pack, if you want the full list. Up to 10 pages scanned, issues ranked by impact, copy-paste fixes for your platform, delivered within 48 hours, plus one re-scan after you apply them.
Get my free snapshot Order the Fix-Pack – $149
14-day refund promise. See a sample report first. A technical report, not legal advice; automated checks find only part of accessibility barriers.