Skip to Content

Flex

A utility component that makes it easier to work with CSS flexbox and iTwinUI design tokens.

Usage

The Flex component is a generic container that can be wrapped around the items that need to be laid out using CSS flexbox. These items can be used directly or with Flex.Item for more granular customization.

Flex offers a gap prop, which can accept a value corresponding to iTwinUI size tokens (e.g. "x", "xs"). By default, a gap of "xs" is used.

import * as React from 'react';
import { Flex } from '@itwin/itwinui-react';

export default () => {
  return (
    <Flex>
      <MyItem>1</MyItem>
      <MyItem>2</MyItem>
      <MyItem>3</MyItem>
    </Flex>
  );
};

const MyItem = ({ children = '' }) => (
  <div className='demo-item-container'>{children}</div>
);

The Flex component offers props that are equivalent to those of the CSS flexbox, such as alignItems (defaults to "center"), justifyContent, flexDirection, and flexWrap.

Spacer

The Flex.Spacer subcomponent fills up the available space between flex items. This subcomponent is useful when it is necessary to push certain items to the edges.

import * as React from 'react';
import { Flex } from '@itwin/itwinui-react';

export default () => {
  return (
    <Flex className='demo-container'>
      <MyItem>1</MyItem>
      <MyItem>2</MyItem>

      <Flex.Spacer />

      <MyItem>3</MyItem>
      <MyItem>4</MyItem>
      <MyItem>5</MyItem>
    </Flex>
  );
};

const MyItem = ({ children = '' }) => (
  <div className='demo-item-container'>{children}</div>
);

Flex Items

The Flex.Item subcomponent allows customizing individual flex items using the flex, alignSelf and gapBefore/gapAfter props.

import * as React from 'react';
import { Flex } from '@itwin/itwinui-react';

export default () => {
  return (
    <Flex className='demo-container'>
      <Flex.Item flex='1'>
        <MyItem>1</MyItem>
      </Flex.Item>

      <Flex.Item flex='3'>
        <MyItem>2</MyItem>
      </Flex.Item>

      <Flex.Item flex='1'>
        <MyItem>3</MyItem>
      </Flex.Item>
    </Flex>
  );
};

const MyItem = ({ children = '' }) => (
  <div className='demo-item-container'>{children}</div>
);

The gapBefore/gapAfter props can used to override the gap at an individual level, for when you need a different gap than the one set in the parent Flex.

import * as React from 'react';
import { Flex } from '@itwin/itwinui-react';

export default () => {
  return (
    /* '2xl' gap between all items that don't specify `gapBefore` or `gapAfter` */
    <Flex gap='2xl'>
      <Flex.Item>
        <MyItem>1</MyItem>
      </Flex.Item>

      <Flex.Item>
        <MyItem>2</MyItem>
      </Flex.Item>

      {/* ⬇️ will always have 's' gap between 3 and 4  */}
      <Flex.Item gapAfter='s'>
        <MyItem>3</MyItem>
      </Flex.Item>

      <Flex.Item>
        <MyItem>4</MyItem>
      </Flex.Item>

      {/* ⬇️ will always have '3xs' gap between 4 and 5 */}
      <Flex.Item gapBefore='3xs'>
        <MyItem>5</MyItem>
      </Flex.Item>

      <Flex.Item>
        <MyItem>6</MyItem>
      </Flex.Item>
    </Flex>
  );
};

const MyItem = ({ children = '' }) => (
  <div className='demo-item-container'>{children}</div>
);

Props

Prop Description Default
display
Value of the display property.
"flex" | "inline-flex"
'flex'
justifyContent
Value of the justify-content property.
JustifyContent
'flex-start'
alignItems
Value of the align-items property. Defaults to 'center' but you might want to use 'flex-start' in some cases.
AlignItems
'center'
gap
Value of the gap property.
Supports aliases for iTwinUI size tokens: 3xs, 2xs, xs, s, m, l, xl, 2xl, 3xl
Also accepts any valid css value (e.g. "1rem" or "2px")
"s" | "3xs" | "2xs" | "xs" | "m" | "l" | "xl" | "2xl" | "3xl" | AnyString
'xs'
flexDirection
Value of the direction property.
FlexDirection
'row'
flexWrap
Value of the flex-wrap property.
FlexWrap
'nowrap'
as
"symbol" | "object" | "div" | "a" | "abbr" | "address" | "area" | "article" | "aside" | "audio" | "b" | "base" | "bdi" | "bdo" | "big" | "blockquote" | "body" | "br" | "button" | "canvas" | ... 158 more ... | FunctionComponent<...>