When CSS Isn’t Sufficient: JavaScript Necessities For Accessible Parts

No Comments

Because the writer of ModernCSS.dev, I’m an enormous proponent of CSS options. And, I really like seeing the intelligent methods folks use CSS for actually out-of-the-box designs and interactivity! Nevertheless, I’ve seen a development towards selling “CSS-only” elements utilizing strategies just like the “checkbox hack”. Sadly, hacks like these depart a big quantity of customers unable to make use of your interface.

This articles covers a number of widespread elements and why CSS isn’t enough for protecting accessibility by detailing the JavaScript necessities. These necessities are based mostly on the Internet Content material Accessibility Tips (WCAG) and extra analysis from accessibility specialists. I received’t prescribe JavaScript options or demo CSS, however fairly study what must be accounted for when creating every part. A JavaScript framework can definitely be used however is just not vital as a way to add the occasions and options mentioned.

The necessities listed are by and huge not non-compulsory — they’re vital to assist make sure the accessibility of your elements.

When you’re utilizing a framework or part library, you should use this text to assist consider if the offered elements meet accessibility necessities. It’s necessary to know that most of the objects famous are usually not going to be absolutely coated by automated accessibility testing instruments like aXe, and due to this fact want some handbook testing. Or, you should use a testing framework like Cypress to create checks for the required performance.

Understand that this text is targeted on informing you of JavaScript concerns for every interface part. This isn’t a complete useful resource for all of the implementation particulars for creating absolutely accessible elements, similar to vital aria and even markup. Sources are included for every kind to help you in studying extra in regards to the wider concerns for every part.

Figuring out If CSS-Solely Is An Acceptable Answer

Listed here are just a few inquiries to ask earlier than you proceed with a CSS-only answer. We’ll cowl a number of the phrases introduced right here in additional context alongside their associated elements.

Is that this on your personal enjoyment?
Then completely go all in on CSS, push the boundaries, and study what the language can do! 🎉
Does the characteristic embody exhibiting and hiding of content material?
Then you definitely want JS to at minimal toggle aria and to allow closing on Esc. For sure varieties of elements that additionally change state, you may additionally want to speak modifications by triggering updates inside an ARIA reside area.
Is the pure focus order probably the most best?
If the pure order looses the connection between a set off and the aspect it triggered, or a keyboard consumer can’t even entry the content material through pure tab order, then you definitely want JS to help in focus administration.
Does the stylized management provide the proper details about the performance?
Customers of assistive expertise like display readers obtain info based mostly on semantics and ARIA that helps them decide what a management does. And, customers of speech recognition want to have the ability to establish the part’s label or kind to work out the phrase to make use of to function the controls. For instance, in case your part is styled like tabs however makes use of radio buttons to “work” like tabs, a display reader might hear “radio button” and a speech consumer might attempt to use the phrase “tab” to function them. In these circumstances, you’ll want JS to allow utilizing the suitable controls and semantics to attain the specified performance.
Does the impact depend on hover and/or focus?
Then you could want JS to help in another answer for offering equal entry or persistent entry to the content material particularly for contact display customers and people utilizing desktop zoom of 200%+ or magnification software program.

Fast tip: One other reference while you’re creating any sort of personalized management is the Customized Management Accessible Improvement Guidelines from the W3 “Utilizing ARIA” information. This mentions a number of factors above, with just a few further design and semantic concerns.


Narrowing the definition of a tooltip is a bit difficult, however for this part we’re speaking about small textual content labels that seem on mouse hover close to a triggering aspect. They overlay different content material, don’t require interplay, and disappear when a consumer removes hover or focus.

The CSS-only answer right here could seem utterly fantastic, and could be achieved with one thing like:

<button class=”tooltip-trigger”>I’ve a tooltip</button>
<span class=”tooltip”>Tooltip</span>

.tooltip {
show: none;

.tooltip-trigger:hover + .tooltip,
.tooltip-trigger:focus + .tooltip {
show: block;

Nevertheless, this ignores fairly a listing of accessibility issues and excludes many customers from accessing the tooltip content material.

A big group of excluded customers are these utilizing contact screens the place :hover will probably not be triggered since on contact screens, a :hover occasion triggers in sync with a :focus occasion. Which means any associated motion linked to the triggering aspect — similar to a button or hyperlink — will hearth alongside the tooltip being revealed. This implies the consumer might miss the tooltip, or not have time to learn its contents.

Within the case that the tooltip is connected to an interactive aspect with no occasions, the tooltip might present however not be dismissible till one other aspect good points focus, and within the meantime might block content material and forestall a consumer from doing a activity.

Moreover, customers who want to make use of zoom or magnification software program to navigate additionally expertise fairly a barrier to utilizing tooltips. Since tooltips are revealed on hover, if these customers want to alter their discipline of view by panning the display to learn the tooltip it could trigger it to vanish. Tooltips additionally take away management from the consumer as there may be typically nothing to inform the consumer a tooltip will seem forward of time. The overlay of content material might stop them from doing a activity. In some circumstances similar to a tooltip tied to a kind discipline, cellular or different on-screen keyboards can obscure the tooltip content material. And, if they don’t seem to be appropriately linked to the triggering aspect, some assistive expertise customers might not even know a tooltip has appeared.

Steerage for the habits of tooltips comes from WCAG Success Criterion 1.4.13 — Content material on Hover or Focus. This criterion is meant to assist low imaginative and prescient customers and people utilizing zoom and magnification software program. The guiding rules for tooltip (and different content material showing on hover and focus) embody:

The tooltip could be dismissed with out shifting hover or focus
The revealed tooltip content material could be hovered with out it disappearing
The extra content material doesn’t disappear based mostly on a timeout, however waits for a consumer to take away hover or focus or in any other case dismiss it

To completely meet these tips requires some JavaScript help, significantly to permit for dismissing the content material.

Customers of assistive expertise will assume that dismissal habits is tied to the Esc key, which requires a JavaScript listener.
In keeping with Sarah Higley’s analysis described within the subsequent part, including a visual “shut” button throughout the tooltip would additionally require JavaScript to deal with its shut occasion.
It’s attainable that JavaScript may have to reinforce your styling answer to make sure a consumer can hover over the tooltip content material with out it dismissing in the course of the consumer shifting their mouse.

Alternate options To Tooltips

Tooltips must be a final resort. Sarah Higley — an accessibility skilled who has a specific ardour for dissuading using tooltips — presents this straightforward take a look at:

“Why am I including this textual content to the UI? The place else may it go?”

— Sarah Higley from the presentation “Tooltips: Investigation Into 4 Components

Primarily based on analysis Sarah was concerned with for her function at Microsoft, another answer is a devoted “toggletip”. Primarily, this implies offering an extra aspect to permit a consumer to deliberately set off the exhibiting and hiding of additional content material. Not like tooltips, toggletips can retain semantics of parts throughout the revealed content material. In addition they give the consumer again the management of toggling them, and retain discoverability and operability by extra customers and particularly contact display customers.

When you’ve remembered the title attribute exists, simply know that it suffers all the identical points we famous from our CSS-only answer. In different phrases — don’t use title beneath the idea it’s a suitable tooltip answer.

For extra info, try Sarah’s presentation on YouTube in addition to her in depth article on tooltips. To study extra about tooltips versus toggletips and a bit extra information on why to not use title, evaluate Heydon Pickering’s article from Inclusive Parts: Tooltips and Toggletips.


Modals — aka lightboxes or dialogs — are in-page home windows that seem after a triggering motion. They overlay different web page content material, might include structured info together with further actions, and infrequently have a semi-transparent backdrop to assist distinguish the modal window from the remainder of the web page.

I’ve seen just a few variations of a CSS-only modal (and am responsible of constructing one for an older model of my portfolio). They might use the “checkbox hack”, make use of the habits of :goal, or attempt to vogue it off of :focus (which might be actually an overlarge tooltip in disguise).

As for the HTML dialog aspect, remember that it’s not thought of to be comprehensively accessible. So, whereas I completely encourage of us to make use of native HTML earlier than customized options, sadly this one breaks that concept. You possibly can study extra about why the HTML dialog isn’t accessible.

Not like tooltips, modals are meant to permit structured content material. This implies doubtlessly a heading, some paragraph content material, and interactive parts like hyperlinks, buttons and even types. To ensure that probably the most customers to entry that content material, they have to have the ability to use keyboard occasions, significantly tabbing. For longer modal content material, arrow keys must also retain the power to scroll. And like tooltips, they need to be dismissible with the Esc key — and there’s no approach to allow that with CSS-only.

JavaScript is required for focus administration inside modals. Modals ought to entice focus, which implies as soon as focus is throughout the modal, a consumer ought to not have the ability to tab out of it into the web page content material behind it. However first, focus has to get inside of the modal, which additionally requires JavaScript for a completely accessible modal answer.

Right here’s the sequence of modal associated occasions that should be managed with JavaScript:

Occasion listener on a button opens the modal
Focus is positioned throughout the modal; which aspect varies based mostly on modal content material (see resolution tree)
Focus is trapped throughout the modal till it’s dismissed
Ideally, a consumer is ready to shut a modal with the Esc key along with a devoted shut button or a harmful button motion similar to “Cancel” if acknowledgement of modal content material is required
If Esc is allowed, clicks on the modal backdrop must also dismiss the modal

Upon dismissal, if no navigation occurred, focus is positioned again on the triggering button aspect

Modal Focus Resolution Tree

Primarily based on the WAI-ARIA Authoring Practices Modal Dialog Instance, here’s a simplified resolution tree for the place to put focus as soon as a modal is opened. Context will at all times dictate the selection right here, and ideally focus is managed additional than merely “the primary focusable aspect”. Actually, typically non-focusable parts must be chosen.

Major topic of the modal is a kind.
Focus first kind discipline.
Modal content material is critical in size and pushes modal actions out of view.
Focus a heading if current, or first paragraph.
Function of the modal is procedural (instance: affirmation of motion) with a number of accessible actions.
Deal with the “least harmful” motion based mostly on the context (instance: “OK”).
Function of the modal is procedural with one motion.
Deal with the primary focusable aspect

Fast tip: Within the case of needing to focus a non-focusable aspect, similar to a heading or paragraph, add tabindex=”-1″ which permits the aspect to grow to be programmatically focusable with JS however doesn’t add it to the DOM tab order.

Seek advice from the WAI-ARIA modal demo for extra info on different necessities for establishing ARIA and extra particulars on tips on how to choose which aspect so as to add focus to. The demo additionally contains JavaScript to exemplify tips on how to do focus administration.

For a ready-to-go answer, Kitty Giraudel has created a11y-dialog which incorporates the characteristic necessities we mentioned. Adrian Roselli additionally has researched managing focus of modal dialogs and created a demo and compiled info on how completely different browser and display reader combos will talk the centered aspect.


Tabbed interfaces contain a collection of triggers that show corresponding content material panels one by one. The CSS “hacks” you could discover for these contain utilizing stylized radio buttons, or :goal, which each permit solely revealing a single panel at a time.

Listed here are the tab options that require JavaScript:

Toggling the aria-selected attribute to true for the present tab and false for unselected tabs
Making a roving tabindex to tell apart tab choice from focus
Transfer focus between tabs by responding to arrow key occasions (and optionally Residence and Finish)

Optionally, you can also make tab choice comply with focus — which means when a tab is targeted its additionally then chosen and reveals its related tab panel. The WAI-ARIA Authoring Practices presents this information to creating a selection for whether or not choice ought to comply with focus.

Whether or not or not you select to have choice comply with focus, additionally, you will use JavaScript to hear for arrow key occasions to maneuver focus between tab parts. That is another sample to permit navigation of tab choices since using a roving tabindex (described subsequent) alters the pure keyboard tab focus order.

About Roving tabindex

The idea of a roving tabindex is that the worth of the tabindex worth is programmatically managed to handle the main target order of parts. With regard to tabs, because of this solely the chosen tab is a part of the main target order by means of setting tabindex=”0″, and unselected tabs are set to tabindex=”-1″ which removes them from the pure keyboard focus order.

The rationale for that is in order that when a tab is chosen, the following tab will land a consumer’s focus throughout the related tab panel. It’s possible you’ll select to make the aspect that’s the tab panel focusable by assigning it tabindex=”0″, or that is probably not vital if there’s a assure of a focusable aspect throughout the tab panel. When you tab panel content material might be extra variable or complicated, you could think about managing focus based on the choice tree we reviewed for modals.

Instance Tab Patterns

Listed here are some reference patterns for creating tabs:

Tabpanel demo from Deque College
Tab widget checks from Scott O’Hara (checks a number of practical patterns)
Tabbed Interfaces from Heydon Pickering’s Inclusive Parts, which demonstrates how tabs is usually a progressive enhancement of a desk of contents


Additionally known as slideshows or sliders, carousels contain a collection of rotating content material panels (aka “slides”) that embody management mechanisms. You’ll discover these in lots of configurations with a variety of content material. They’re considerably notoriously thought of a foul design sample.

The difficult half about CSS-only carousels is that they could not provide controls, or they could use sudden controls to control the carousel motion. For instance, you may once more use the “checkbox hack” to trigger the carousel to transition, however checkboxes impart the incorrect kind of knowledge in regards to the interplay to customers of assistive tech. Moreover, in the event you model the checkbox labels to visually seem as ahead and backward arrows, you might be seemingly to present customers of speech recognition software program the incorrect impression of what they need to say to regulate the carousel.

Extra lately, native CSS assist for scroll snap has landed. At first, this looks as if the right CSS-only answer. However, even automated accessibility checking will flag these as un-navigable by keyboard customers in case there may be there no approach to navigate them through interactive parts. There are different accessibility and consumer expertise issues with the default habits of this characteristic, a few of which I’ve included in my scroll snap demo on SmolCSS.

Regardless of the big selection in how carousels look, there are some widespread traits. One choice is to create a carousel utilizing tab markup since successfully it’s the identical underlying interface with an altered visible presentation. In comparison with tabs, carousels might provide further controls for earlier and subsequent, and in addition pause if the carousel is auto-playing.

The next are JavaScript concerns relying in your carousel options:

Utilizing Paginated Controls
Upon choice of a numbered merchandise, programmatically focus the related carousel slide. It will contain establishing slide containers utilizing roving tabindex so to focus the present slide, however stop entry to off-screen slides.
Utilizing Auto-Play
Embrace a pause management, and in addition allow pausing when the slide is hovered or an interactive aspect inside it’s centered. Moreover, you may examine for prefers-reduced-motion inside JavaScript to load the slideshow in a paused state to respect consumer preferences.
Utilizing Earlier/Subsequent Controls
Embrace a visually hidden aspect marked as aria-live=”well mannered” and upon these controls being activated, populate the reside area with a sign of the present place, similar to “Slide 2 of 4”.

Sources For Constructing Accessible Carousels

Thorough implementation particulars and concerns in addition to a full code instance from the W3C Internet Accessibility tutorial on carousels
Deque College’s instance of enhancing a tab interface right into a carousel
The WAI-ARIA Authoring Practices instance of an auto-rotating picture carousel
A choice of carousel sources in Smashing’s roundup of accessible elements

Dropdown Menus

This refers to a part the place a button toggles open a listing of hyperlinks, usually used for navigation menus. CSS implementations that cease at exhibiting the menu on :hover or :focus solely miss some necessary particulars.

I’ll admit, I even thought that through the use of the newer :focus-within property we may safely implement a CSS-only answer. You’ll see that my article on CSS dropdown menus was amended to incorporate notes and sources on the required JavaScript (I saved the title in order that others looking for that answer will hopefully full the JS implementation, too). Particularly, counting on solely CSS means violating WCAG Success Criterion 1.4.13: Content material on Hover or Focus which we realized about with tooltips.

We have to add in JavaScript for some methods that ought to sound acquainted at this level:

Toggling aria-expanded on the menu button between true and false by listening to click on occasions
Closing an open menu upon use of the Esc key, and returning focus to the menu toggle button
Ideally, closing open menus when focus is moved exterior of the menu
Optionally available: Implement arrow keys in addition to Residence and Finish keys for keyboard navigation between menu toggle buttons and hyperlinks throughout the dropdowns

Fast tip: Guarantee the proper implementation of the dropdown menu by associating the menu show to the selector of .dropdown-toggle[aria-expanded=`”true”] + .dropdownrather than basing the menu show on the presence of an extra JS-added class likeactive`. This removes some complexity out of your JS answer, too!

That is additionally known as a “disclosure sample” and you will discover extra particulars within the WAI-ARIA Authoring Practices’s Instance Disclosure Navigation Menu.

Further sources on creating accessible elements

Smashing’s Full Information to Accessible Entrance-Finish Parts
Carie Fisher’s article Good, Higher, Greatest: Untangling The Complicated World Of Accessible Patterns
Demos and data on widespread design patterns and widgets accessible from the WAI-ARIA Authoring Practices 1.2
Deque College’s Code Library
Scott O’Hara’s Accessible Parts
Heydon Pickering’s Inclusive Parts

    About Marketing Solution Australia

    We are a digital marketing company with a focus on helping our customers achieve great results across several key areas.

    Request a free quote

    We offer professional SEO services that help websites increase their organic search score drastically in order to compete for the highest rankings even when it comes to highly competitive keywords.

    Subscribe to our newsletter!

    More from our blog

    See all posts

    Leave a Comment