Tabs

Tabs strukturieren verwandte Inhalte und ermöglichen einen schnellen Zugriff auf unterschiedliche Ansichten.

Grundlagen

Best Practices

Achte bei der Verwendung von Tabs darauf, dass ...

  • innerhalb eines Tabs nur thematisch eng verwandter Content gruppiert wird.
  • nie mehrere Tabs gleichzeitig relevant für eine Aufgabe sind. Alle relevanten Informationen müssen innerhalb eines Tabs direkt zugänglich sein.
  • idealerweise nicht mehr als sechs Tabs verwendet werden, um Übersichtlichkeit zu gewährleisten.
  • die Reihenfolge nach Wichtigkeit oder Häufigkeit der Nutzung erfolgt.
  • jeder Tab eigenständig verständlich ist und eine kurze und deutliche Beschriftung hat.
  • kein Content in mehreren Tabs gedoppelt wird.
  • sie keine Hauptnavigation ersetzen.
  • sie oberhalb von einer LayoutCard positioniert werden.
  • bei Statusanzeigen innerhalb eines Tabs – z. B. durch einen Danger-Alert – der Tab selbst ein entsprechendes Status-Icon erhält, um die Aufmerksamkeit darauf zu lenken.

Verwendung

Verwende Tabs, um ...

  • komplexe Inhalte in kleinere, übersichtlichere Ansichten zu gliedern.
  • umfangreiche Detailseiten in mehrere aufgaben- oder themenbezogene Abschnitte aufzuteilen.

Playground

Verwende <Tabs />, um Tabs darzustellen. Jeder einzelne Tab wird mit <Tab /> definiert und erhält seine Bezeichnung über <TabTitle />.

import {
  Header,
  Heading,
  Label,
  LabeledValue,
  LayoutCard,
  Section,
  Switch,
  Tab,
  Tabs,
  TabTitle,
  Text,
  TextField,
} from "@mittwald/flow-react-components";

<LayoutCard>
  <Tabs>
    <Tab>
      <TabTitle>Allgemein</TabTitle>
      <Section>
        <Heading>Allgemein</Heading>
        <TextField defaultValue="example@mittwald.de">
          <Label>E-Mail-Adresse</Label>
        </TextField>
      </Section>
    </Tab>
    <Tab id="storage">
      <TabTitle>Speicherplatz</TabTitle>
      <Section>
        <Heading>Speicherplatz</Heading>
        <LabeledValue>
          <Label>Verfügbarer Speicherplatz</Label>
          <Text>2.4 GB</Text>
        </LabeledValue>
      </Section>
    </Tab>
    <Tab>
      <TabTitle>Spamschutz</TabTitle>
      <Section>
        <Header>
          <Heading>Spamschutz</Heading>
          <Switch>Spamfilter</Switch>
        </Header>
        <Text>
          Der Spamfilter schützt dich vor ungewollten
          E-Mails. Niemand will Müll in seinem Postfach,
          daher empfehlen wir den Spamschutz immer aktiviert
          zu lassen.
        </Text>
      </Section>
    </Tab>
  </Tabs>
</LayoutCard>

Kollabierte Ansicht

Wenn die verfügbare Breite nicht ausreicht, wechseln die Tabs automatisch in eine kollabierte Ansicht.

Allgemeiner Inhalt
Speicherplatz Inhalt
Spamschutz Inhalt

Mit Status-Icon

Wenn der Inhalt eines Tabs eine wichtige Information oder Warnung enthält (z. B. in Form eines Alerts), muss der entsprechende Tab ein Status-Icon erhalten.

Allgemeiner Inhalt
Spamschutz Inhalt

Mit vorausgewähltem Tab

Standardmäßig sollte der erste Tab vorausgewählt sein. Falls ein anderer Tab initial aktiv sein soll, kann dies über defaultSelectedKey festgelegt werden.

Allgemeiner Inhalt
Speicherplatz Inhalt
Spamschutz Inhalt

Reihenfolge der Tabs

Es kann vorkommen, dass sich durch Rerendering die Reihenfolge der Tabs ändert, wenn innerhalb des Tabs Inhalte nachgeladen werden. Um das zu verhindern, sollte der Tab-Inhalt in eine eigene Component ausgelagert werden und um diese ein Suspense gelegt werden.


Properties

PropertyTypeDefaultDescription
tabNotFoundViewReactNode-
classNameClassNameOrFunction<TabsRenderProps>'react-aria-Tabs'The CSS [className](https://developer.mozilla.org/en-US/docs/Web/API/Element/className) for the element. A function may be provided to compute the class based on component state.
styleStyleOrFunction<TooltipRenderProps>-The inline [style](https://developer.mozilla.org/en-US/docs/Web/API/HTMLElement/style) for the element. A function may be provided to compute the style based on component state.
renderDOMRenderFunction<"div", TooltipRenderProps>-Overrides the default DOM element with a custom render function. This allows rendering existing components with built-in styles and behaviors such as router links, animation libraries, and pre-styled components. Requirements: - You must render the expected element type (e.g. if `<button>` is expected, you cannot render an `<a>`). - Only a single root DOM element can be rendered (no fragments). - You must pass through props and ref to the underlying DOM element, merging with your own prop as appropriate.
dirstring-
langstring-
hiddenboolean-
inertboolean-
translate"yes" | "no"-
isDisabledboolean-Whether the TabList is disabled. Shows that a selection exists, but is not available in that circumstance.
idstring-The element's unique identifier. See [MDN](https://developer.mozilla.org/en-US/docs/Web/HTML/Global_attributes/id).
slotstring-A slot name for the component. Slots allow the component to receive props from a parent component. An explicit `null` value indicates that the local props completely override all props received from a parent.
selectedKeyKey-The currently selected key in the collection (controlled).
defaultSelectedKeyKey-The initial selected keys in the collection (uncontrolled).
keyboardActivation"automatic" | "manual"'automatic'Whether tabs are activated automatically on focus or manually.
orientationOrientation'horizontal'The orientation of the tabs.
disabledKeysIterable<Key>-The item keys that are disabled. These items cannot be selected, focused, or otherwise interacted with.
childrenReactNode-
wrapWithReactElement<unknown, string | JSXElementConstructor<any>>-
refRef<HTMLSpanElement>-Allows getting a ref to the component instance. Once the component unmounts, React will set `ref.current` to `null` (or call the ref with `null` if you passed a callback ref). @see React Docs
keyKey-

Events

PropertyTypeDefaultDescription
onClickMouseEventHandler<HTMLDivElement>-
onClickCaptureMouseEventHandler<HTMLDivElement>-
onAuxClickMouseEventHandler<HTMLDivElement>-
onAuxClickCaptureMouseEventHandler<HTMLDivElement>-
onContextMenuMouseEventHandler<HTMLDivElement>-
onContextMenuCaptureMouseEventHandler<HTMLDivElement>-
onDoubleClickMouseEventHandler<HTMLDivElement>-
onDoubleClickCaptureMouseEventHandler<HTMLDivElement>-
onMouseDownMouseEventHandler<HTMLDivElement>-
onMouseDownCaptureMouseEventHandler<HTMLDivElement>-
onMouseEnterMouseEventHandler<HTMLDivElement>-
onMouseLeaveMouseEventHandler<HTMLDivElement>-
onMouseMoveMouseEventHandler<HTMLDivElement>-
onMouseMoveCaptureMouseEventHandler<HTMLDivElement>-
onMouseOutMouseEventHandler<HTMLDivElement>-
onMouseOutCaptureMouseEventHandler<HTMLDivElement>-
onMouseOverMouseEventHandler<HTMLDivElement>-
onMouseOverCaptureMouseEventHandler<HTMLDivElement>-
onMouseUpMouseEventHandler<HTMLDivElement>-
onMouseUpCaptureMouseEventHandler<HTMLDivElement>-
onTouchCancelTouchEventHandler<HTMLDivElement>-
onTouchCancelCaptureTouchEventHandler<HTMLDivElement>-
onTouchEndTouchEventHandler<HTMLDivElement>-
onTouchEndCaptureTouchEventHandler<HTMLDivElement>-
onTouchMoveTouchEventHandler<HTMLDivElement>-
onTouchMoveCaptureTouchEventHandler<HTMLDivElement>-
onTouchStartTouchEventHandler<HTMLDivElement>-
onTouchStartCaptureTouchEventHandler<HTMLDivElement>-
onPointerDownPointerEventHandler<HTMLDivElement>-
onPointerDownCapturePointerEventHandler<HTMLDivElement>-
onPointerMovePointerEventHandler<HTMLDivElement>-
onPointerMoveCapturePointerEventHandler<HTMLDivElement>-
onPointerUpPointerEventHandler<HTMLDivElement>-
onPointerUpCapturePointerEventHandler<HTMLDivElement>-
onPointerCancelPointerEventHandler<HTMLDivElement>-
onPointerCancelCapturePointerEventHandler<HTMLDivElement>-
onPointerEnterPointerEventHandler<HTMLDivElement>-
onPointerLeavePointerEventHandler<HTMLDivElement>-
onPointerOverPointerEventHandler<HTMLDivElement>-
onPointerOverCapturePointerEventHandler<HTMLDivElement>-
onPointerOutPointerEventHandler<HTMLDivElement>-
onPointerOutCapturePointerEventHandler<HTMLDivElement>-
onGotPointerCapturePointerEventHandler<HTMLDivElement>-
onGotPointerCaptureCapturePointerEventHandler<HTMLDivElement>-
onLostPointerCapturePointerEventHandler<HTMLDivElement>-
onLostPointerCaptureCapturePointerEventHandler<HTMLDivElement>-
onScrollUIEventHandler<HTMLDivElement>-
onScrollCaptureUIEventHandler<HTMLDivElement>-
onWheelWheelEventHandler<HTMLDivElement>-
onWheelCaptureWheelEventHandler<HTMLDivElement>-
onAnimationStartAnimationEventHandler<HTMLDivElement>-
onAnimationStartCaptureAnimationEventHandler<HTMLDivElement>-
onAnimationEndAnimationEventHandler<HTMLDivElement>-
onAnimationEndCaptureAnimationEventHandler<HTMLDivElement>-
onAnimationIterationAnimationEventHandler<HTMLDivElement>-
onAnimationIterationCaptureAnimationEventHandler<HTMLDivElement>-
onTransitionCancelTransitionEventHandler<HTMLDivElement>-
onTransitionCancelCaptureTransitionEventHandler<HTMLDivElement>-
onTransitionEndTransitionEventHandler<HTMLDivElement>-
onTransitionEndCaptureTransitionEventHandler<HTMLDivElement>-
onTransitionRunTransitionEventHandler<HTMLDivElement>-
onTransitionRunCaptureTransitionEventHandler<HTMLDivElement>-
onTransitionStartTransitionEventHandler<HTMLDivElement>-
onTransitionStartCaptureTransitionEventHandler<HTMLDivElement>-
onSelectionChange((key: Key) => void)-Handler that is called when the selection changes.

Accessibility

PropertyTypeDefaultDescription
aria-labelstring-Defines a string value that labels the current element.
aria-labelledbystring-Identifies the element (or elements) that labels the current element.
aria-describedbystring-Identifies the element (or elements) that describes the object.
aria-detailsstring-Identifies the element (or elements) that provide a detailed, extended description for the object.

Auf dieser Seite