Links: Name, role and states
A link needs to have certain properties programmatically exposed so that users who rely on assistive technologies know what component they’re dealing with.
Programmatically exposing content means assigning certain markup to it so that software or machines can reliably interpret what it is.
To learn about why it’s important to programmatically expose certain information about user interface elements, see the Knowledge Areas:
Accessible name
A link must have a programmatically determinable accessible name. This name is how assistive technologies (AT), like speech recognition or screen reader software, identify and refer to the link. Ideally, the name clearly indicates the link’s target or purpose — for example, ‘Buy now!’ or ‘All about tuatara’.
Meeting the Web Accessibility Standard
When a link has an accessible name, this helps meet WCAG 2:
- Success Criterion 1.1.1 Non-text Content (Level A)
- Success Criterion 1.3.1 Info and Relationships (Level A)
- Success Criterion 4.1.2 Name, Role, Value (Level A).
How links get accessible names
Interactive components like links can get their accessible names in different ways. Most of the time, a link’s accessible name is derived from its visible text.
To learn how components get their accessible names and how AT present them to users, see the following Knowledge Areas:
Link text should describe link purpose
Ideally, a link’s text — which normally contributes to the link’s accessible name — will describe the link’s target or purpose so that users know upfront what activating the link will do.
Providing clear, descriptive link text also helps screen reader users. Screen reader software allows the user to call up a list of all the links on a page for quicker access. Since, in this view, each link is removed from its surrounding page context, it can be difficult to determine the link's purpose if the link text alone does not make the target of the link clear.
For more information and examples, see:
- Link Text — Link Text and Appearance — WebAIM
- Link text — Google developer documentation style guide.
Note: In some cases, a link’s target or purpose is not clear from the link text alone, but it is clear from the link text along with the link’s surrounding context.
In this scenario, it’s important that all users, including AT users, can access the link's surrounding context in order to figure out the link’s purpose. To do this, make sure that the link’s surrounding context can be programmatically determined.
A link’s programmatically determined link context is any information that a browser or AT can reliably determine is associated with the link. This includes information that is:
- in the same sentence, paragraph, list item, or table cell as the link
- in the table header cell for the data cell that contains the link
- in the preceding heading (if the heading’s text makes the link’s purpose clear and distinct from other links under the same heading).
For more on programmatically determined link context and how to use it to clarify a link’s purpose, see:
Meeting the Web Accessibility Standard
When a link’s target or purpose can be determined from the link text alone or from the link text plus the link’s programmatically determined link context, it meets WCAG 2 Success Criterion 2.4.4 Link Purpose (In Context) (Level A).
Accessible name must include any visible text label
If a link has a visible text label (link text), its accessible name must include all of the text in the label, no matter how the accessible name is derived.
To learn more about the difference between an interactive component’s label and name, see “Label” and “Name” as Defined in WCAG — WebAIM.
Typically, a link’s accessible name will be derived from its visible text label, in which case the accessible name will exactly match the label.
However, if a link’s accessible name is derived from some other content, make sure that the accessible name includes all of the text that’s in the link’s visible text label, if it has one.
Meeting the Web Accessibility Standard
When a link’s accessible name includes all of the text that’s in the link’s visible text label, this meets WCAG 2 Success Criterion 2.5.3 Label in Name (Level A).
Role
A link needs to have a role of link
, so that users who rely on assistive technologies can know what type of user interface component it is. This lets them know what to expect and how to interact with it.
Meeting the Web Accessibility Standard
When a link has a role of link
, this helps meet WCAG 2:
- Success Criterion 1.3.1 Info and Relationships (Level A)
- Success Criterion 4.1.2 Name, Role, Value (Level A).
Native HTML links
If you create a link using native HTML methods, such as <a href>
or <area href>
, the browser already assigns it a role of link
.
Custom links
If you create a custom link out of other elements, the link
role needs to be added explicitly.
This requires using ARIA to give the element a role
attribute with a value of link
.
More information on the link
role
States
All interactive elements, like links, have different states.
A link can have the following basic states:
- default — unvisited link
- visited — the link has already been visited and is listed in the browser’s history
- hovered — a pointer’s cursor is over the link (not applicable to keyboard users)
- focused — the link has keyboard focus
- active — the link is currently being activated (clicked).
Meeting the Web Accessibility Standard
When a link’s state is visually indicated and also programmatically exposed, this helps meet WCAG 2 Success Criterion 1.3.1 Info and Relationships (Level A).
When a link’s different states are programmatically exposed, this helps meet WCAG 2 Success Criterion 4.1.2 Name, Role, Value (Level A).
Programmatic presentation of states
States need to be programmatically exposed so that users of assistive technologies know, for example, if the link has focus.
States exposed by the browser
A link’s basic states are automatically registered and exposed programmatically by the browser, so no further work is needed.
Custom states
If a link is used in some custom widget, it might have other states that the developer will need to ensure are being programmatically exposed for assistive technologies. What those states are will depend on the function of the link.
Visual presentation of states
To help sighted users, a link’s states can be styled visually using the related CSS pseudo-classes:
:link
:hover
:focus
:active
:visited
.
For more on styling the different link states, see:
Focus state
A link’s focus states needs an obvious visual style so that sighted keyboard users know that the link has focus and is ready to be interacted with.
For more, see Visible focus indicators — Knowledge Area: Keyboard accessibility.
Limitations to :visited
styles
There are some restrictions to how much one can visually style visited links using the :visited
pseudo-class. For more information, see: