@material/tab-bar

14.0.0 • Public • Published

Tab Bar

Tabs organize and allow navigation between groups of content that are related and at the same level of hierarchy. The Tab Bar contains the Tab Scroller and Tab components.

Design & API Documentation

Installation

npm install @material/tab-bar

Basic Usage

HTML Structure

<div class="mdc-tab-bar" role="tablist">
  <div class="mdc-tab-scroller">
    <div class="mdc-tab-scroller__scroll-area">
      <div class="mdc-tab-scroller__scroll-content">
        <button class="mdc-tab mdc-tab--active" role="tab" aria-selected="true" tabindex="0">
          <span class="mdc-tab__content">
            <span class="mdc-tab__icon material-icons" aria-hidden="true">favorite</span>
            <span class="mdc-tab__text-label">Favorites</span>
          </span>
          <span class="mdc-tab-indicator mdc-tab-indicator--active">
            <span class="mdc-tab-indicator__content mdc-tab-indicator__content--underline"></span>
          </span>
          <span class="mdc-tab__ripple"></span>
          <div class="mdc-tab__focus-ring"></div>
        </button>
      </div>
    </div>
  </div>
</div>

Styles

@use "@material/tab-bar/mdc-tab-bar";
@use "@material/tab-scroller/mdc-tab-scroller";
@use "@material/tab-indicator/mdc-tab-indicator";
@use "@material/tab/mdc-tab";

JavaScript Instantiation

import {MDCTabBar} from '@material/tab-bar';

const tabBar = new MDCTabBar(document.querySelector('.mdc-tab-bar'));

See Importing the JS component for more information on how to import JavaScript.

Variants

MDC Tab Bar does not have any variants; however, its subcomponents do. See the Tab Scroller, Tab, and Tab Indicator documentation for more information.

Tab Icons

We recommend using Material Icons from Google Fonts:

<head>
  <link rel="stylesheet" href="https://fonts.googleapis.com/icon?family=Material+Icons">
</head>

However, you can also use SVG, Font Awesome, or any other icon library you wish.

Style Customization

CSS Classes

CSS Class Description
mdc-tab-bar Mandatory.

Sass Mixins

To customize the width of the tab bar, use the following mixin.

Mixin Description
width($width) Customizes the width of the tab bar.
density($density-scale) Sets density scale to default tab bar variant. Use stacked-density mixin for stacked variant. Supported density scales -4, -3, -2, -1 and 0.
stacked-density($density-scale) Sets density scale to stacked tab bar variant. Supported density scales -4, -3, -2, -1 and 0.
tab-scroller-transition($duration-ms, $timing-function) Sets the CSS transition for the tab scrolling animation. This mixin is a proxy to mdc-tab-scroller-transition mixin.

MDCTabBar Properties and Methods

Property Value Type Description
focusOnActivate boolean (write-only) Sets whether tabs focus themselves when activated. Defaults to true.
useAutomaticActivation boolean (write-only) Sets how tabs activate in response to keyboard interaction. Automatic (true) activates as soon as a tab is focused with arrow keys; manual (false) activates only when the user presses space/enter. The default is automatic (true).
Method Signature Description
activateTab(index: number) => void Activates the tab at the given index.
scrollIntoView(index: number) => void Scrolls the tab at the given index into view.
Event Name Event Data Structure Description
MDCTabBar:activated {"detail": {"index": number}} Emitted when a Tab is activated with the index of the activated Tab. Listen for this to update content when a Tab becomes active.

Usage within Web Frameworks

If you are using a JavaScript framework, such as React or Angular, you can create a Tab Bar for your framework. Depending on your needs, you can use the Simple Approach: Wrapping MDC Web Vanilla Components, or the Advanced Approach: Using Foundations and Adapters. Please follow the instructions here.

MDCTabBarAdapter

Method Signature Description
scrollTo(scrollX: number) => void Scrolls the Tab Scroller to the given position.
incrementScroll(scrollXIncrement: number) => void Increments the Tab Scroller by the given value.
getScrollPosition() => number Returns the scroll position of the Tab Scroller.
getScrollContentWidth() => number Returns the width of the Tab Scroller's scroll content element.
getOffsetWidth() => number Returns the offsetWidth of the root element.
isRTL() => boolean Returns if the text direction is RTL.
setActiveTab(index: number) => void Sets the tab at the given index to be activated.
activateTabAtIndex(index: number, clientRect: ClientRect) => void Activates the Tab at the given index with the given clientRect.
deactivateTabAtIndex(index) => void Deactivates the Tab at the given index.
focusTabAtIndex(index: number) => void Focuses the Tab at the given index.
getTabIndicatorClientRectAtIndex(index: number) => ClientRect Returns the client rect of the Tab at the given index.
getTabDimensionsAtIndex(index) => MDCTabDimensions Returns the dimensions of the Tab at the given index.
getTabListLength() => number Returns the number of child Tab components.
getPreviousActiveTabIndex() => number Returns the index of the previously active Tab.
getFocusedTabIndex() => number Returns the index of the focused Tab.
getIndexOfTabById(id: string) => number Returns the index of the given Tab ID.
notifyTabActivated(index: number) => void Emits the MDCTabBar:activated event.

MDCTabBarFoundation

Method Signature Description
activateTab(index: number) => void Activates the tab at the given index.
setUseAutomaticActivation(useAutomaticActivation: boolean) => void Sets how tabs activate in response to keyboard interaction. Automatic (true) activates as soon as a tab is focused with arrow keys; manual (false) activates only when the user presses space/enter.
handleKeyDown(evt: Event) => void Handles the logic for the "keydown" event.
handleTabInteraction(evt: Event) => void Handles the logic for the "MDCTab:interacted" event.
scrollIntoView(index: number) => void Scrolls the Tab at the given index into view.

Package Sidebar

Install

npm i @material/tab-bar

Weekly Downloads

849,509

Version

14.0.0

License

MIT

Unpacked Size

572 kB

Total Files

36

Last publish

Collaborators

  • yefim
  • abhiomkar
  • azakus
  • bicknellr
  • material-admin
  • aprigogin
  • patrickrodee
  • aomarks
  • emarquez
  • esgonzalez
  • asyncliz
  • candysonya
  • ssuarez
  • taylorv