Socket
Socket
Sign inDemoInstall

@grrr/accessible-tabs

Package Overview
Dependencies
0
Maintainers
4
Versions
2
Alerts
File Explorer

Advanced tools

Install Socket

Detect and block malicious and high-risk dependencies

Install

    @grrr/accessible-tabs

Accessible tabs enhancer, providing tablist, tab and tabpanel roles and spec-compliant tab switching behaviour.


Version published
Weekly downloads
6
decreased by-50%
Maintainers
4
Created
Weekly downloads
 

Readme

Source

Accessible Tabs

Build Status

JavaScript utility library

Built with ❤️ by GRRR.

Installation

$ npm install @grrr/accessible-tabs

Note: depending on your setup additional configuration might be needed. This package is published with untranspiled JavaScript, as EcmaScript Modules (ESM).

Usage

Import the module, construct and initialize it. The tabs constructor accepts an options object as secondary argument. See the Markup section below for the specific DOM it expects.

import Tabs from '@grrr/accessible-tabs';

const tabs = Tabs(document.querySelector('.js-tablist'), { /* options */ });
tabs.init();

Options

Options will fall back to their defaults, which are listed here:

{
    selectedTab: 0, // Zero-based index for the initially selected tab.
}

Markup

The module enhances a basic list of anchors referencing sections:

<ul class="js-tablist">
    <li>
        <a href="#section1">Section 1</a>
    </li>
    <li>
        <a href="#section2">Section 2</a>
    </li>
</ul>
<section id="section1">
    <h2>Section 1</h2>
    <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit.</p>
</section>
<section id="section2">
    <h2>Section 2</h2>
    <p>Nullam at diam nec arcu suscipit auctor non a erat.</p>
</section>

When fully enhanced, this will be the final markup:

<ul class="js-tablist" role="tablist">
    <li role="presentation">
        <a href="#section1" role="tab" id="section1-tab" aria-selected="true">Section 1</a>
    </li>
    <li role="presentation">
        <a href="#section2" role="tab" id="section2-tab" tabindex="-1">Section 2</a>
    </li>
</ul>
<section id="section1" role="tabpanel" tabindex="-1" aria-labelledby="section1-tab">
    <h2>Section 1</h2>
    <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit.</p>
</section>
<section id="section2" role="tabpanel" tabindex="-1" aria-labelledby="section2-tab" hidden>
    <h2>Section 2</h2>
    <p>Nullam at diam nec arcu suscipit auctor non a erat.</p>
</section>
Pre-enhancing & layout shifts

It's possible to pre-enhance the markup. Mainly to make semantic styling easier (e.g. .tab-class [role="tab"]), and to prevent layout shifts during page load (because of tabpanels being hidden and new styling being applied). However, this should be used with caution since it interferes with the semantics of the non-enhanced version.

To prevent layout shifts, one could use a styling strategy like this:

.js section:not([role="tabpanel"]):not(:first-of-type) {
    display: none;
}

Note: the .js class could come from a library like Modernizr, and helps deciding which styling should be applied based on the availability of JavaScript.

Keywords

FAQs

Last updated on 25 Jun 2021

Did you know?

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Install

Related posts

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc