TooltipComponent
import Example from ‘../../src/@primer/gatsby-theme-doctocat/components/example’ import RequiresJSFlash from ‘../../src/@primer/gatsby-theme-doctocat/components/requires-js-flash’
Tooltip
only appears on mouse hover or keyboard focus and contain a label or description text.
Use tooltips sparingly and as a last resort.
When using a tooltip, follow the provided guidelines to avoid accessibility issues.
- Tooltip text should be brief and to the point. The tooltip content must be a string.
- Tooltips should contain only non-essential text. Tooltips can easily be missed and are not accessible on touch devices so never use tooltips to convey critical information.
Accessibility
- Never set tooltips on static elements. Tooltips should only be used on interactive elements like buttons or links to avoid excluding keyboard-only users and screen reader users.
- Place
Tooltip
adjacent after its trigger element in the DOM. This allows screen reader users to navigate to and copy the tooltip content.Which
type
should I set?Setting
:description
establishes anaria-describedby
relationship, while:label
establishes anaria-labelledby
relationship between the trigger element and the tooltip,
The type
drastically changes semantics and screen reader behavior so follow these guidelines carefully:
- When there is already a visible label text on the trigger element, the tooltip is likely intended to supplement the existing text, so set
type: :description
. The majority of tooltips will fall under this category. - When there is no visible text on the trigger element and the tooltip content is appropriate as a label for the element, set
type: :label
. This type is usually only appropriate for an icon-only control.
Arguments
Name | Type | Default | Description |
---|---|---|---|
tag |
Symbol, String |
:tooltip |
The rendered tag name |
for_id |
String |
N/A | The ID of the element that the tooltip should be attached to. |
text |
String |
N/A | The text content of the tooltip. This should be brief and no longer than a sentence. |
type |
Symbol |
:description |
One of :description and :label . |
direction |
Symbol |
:top |
One of :bottom , :left , :right , or :top . |
classes |
String |
"" |
Classes and attributes |
attributes |
Hash |
{} |
Classes and attributes |
Examples
As a description for an icon-only button
If the tooltip content provides supplementary description, set type: :description
to establish an aria-describedby
relationship. The trigger element should also have a concise accessible label via aria-label
.
<%= render(Ariadne::HeroiconComponent.new(icon: :moon, variant: HeroiconsHelper::Icon::VARIANT_OUTLINE, attributes: { id: "bold-button-0" })) %>
<%= render(Ariadne::TooltipComponent.new(for_id: "bold-button-0", type: :description, text: "Add bold text", direction: :top)) %>
As a label for an icon-only button
If the tooltip labels the icon-only button, set type: :label
. This tooltip content becomes the accessible name for the button.
<%= render(Ariadne::ButtonComponent.new(attributes: { id: "like-button" })) { "👍" } %>
<%= render(Ariadne::TooltipComponent.new(for_id: "like-button", type: :label, text: "Like", direction: :top)) %>
As a description for a button with visible label
If the button already has visible label text, the tooltip content is likely supplementary so set type: :description
.
<%= render(Ariadne::ButtonComponent.new(attributes: {id: "save-button"}, scheme: :success)) { "Save" } %>
<%= render(Ariadne::TooltipComponent.new(for_id: "save-button", type: :description, text: "This will immediately impact all organization members", direction: :right)) %>
With direction
Set direction of tooltip with direction
. The tooltip is responsive and will automatically adjust direction to avoid cutting off.
<%= render(Ariadne::ButtonComponent.new(attributes: {id: "North", m: 2})) { "North" } %>
<%= render(Ariadne::TooltipComponent.new(for_id: "North", type: :description, text: "This is a North-facing tooltip, and is responsive.", direction: :top)) %>
<%= render(Ariadne::ButtonComponent.new(attributes: {id: "South", m: 2})) { "South" } %>
<%= render(Ariadne::TooltipComponent.new(for_id: "South", type: :description, text: "This is a South-facing tooltip and is responsive.", direction: :bottom)) %>
<%= render(Ariadne::ButtonComponent.new(attributes: {id: "East", m: 2})) { "East" } %>
<%= render(Ariadne::TooltipComponent.new(for_id: "East", type: :description, text: "This is a East-facing tooltip and is responsive.", direction: :right)) %>
<%= render(Ariadne::ButtonComponent.new(attributes: {id: "West", m: 2})) { "West" } %>
<%= render(Ariadne::TooltipComponent.new(for_id: "West""", type: :description, text: "This is a West-facing tooltip and is responsive.", direction: :left)) %>
With relative parent
When the tooltip and trigger element have a parent container with relative: position
, it should not affect width of the tooltip.
<span style="position: relative;">
<%= render(Ariadne::ButtonComponent.new(attributes: {id: "test-button"}, scheme: :info)) { "Test" } %>
<%= render(Ariadne::TooltipComponent.new(for_id: "test-button", type: :description, text: "This tooltip should take up the full width", direction: :bottom)) %>
</span>
Have questions?
Still have questions? Talk to support.