UNPKG

@dnb/eufemia

Version:

DNB Eufemia Design System UI Library

163 lines (135 loc) 3.88 kB
--- title: 'Flex Stack' description: '`Flex.Stack` is an outer block element that wraps content to ensure proper layout and spacing between form elements, larger regions and headings. It stretches its content horizontally (100%).' version: 10.104.0 generatedAt: 2026-04-17T18:46:12.770Z checksum: 090b7d977ba4be5e2c4c04d199a30a4048416c59f443a56985df2f80629d9c40 --- # Flex Stack ## Import ```tsx import { Flex } from '@dnb/eufemia' render(<Flex.Stack />) ``` ## Description `Flex.Stack` is an outer block element that wraps content to ensure proper layout and spacing between form elements, larger regions and headings. It stretches its content horizontally (100%). It uses [Flex.Container](/uilib/layout/flex/container) under the hood. ## Relevant links - [Source code](https://github.com/dnbexperience/eufemia/tree/main/packages/dnb-eufemia/src/components/flex/Stack.tsx) - [Docs code](https://github.com/dnbexperience/eufemia/tree/main/packages/dnb-design-system-portal/src/docs/uilib/layout/flex/stack/) ## Accessibility It uses a `section` element. Which allows you to add an `aria-label` or `aria-labelledby` to provide screen readers with landmarks. ```tsx render( <Flex.Stack aria-labelledby="unique-id"> <Form.SubHeading id="unique-id">Heading</Form.SubHeading> <Card> <P>Content inside a landmark ...</P> </Card> </Flex.Stack> ) ``` ## Demos ### With input fields ```tsx render( <Flex.Stack> <Field.String label="Label" value="Foo" /> <Field.String label="Label" value="Foo" /> <Form.SubmitButton /> </Flex.Stack> ) ``` ### With paragraphs ```tsx render( <Flex.Stack> <P> Lorem ipsum dolor sit amet, consectetur adipiscing elit. Morbi cursus pharetra elit in bibendum. </P> <P> Praesent nunc ipsum, convallis eget convallis gravida, vehicula vitae metus. </P> </Flex.Stack> ) ``` ### With main heading ```tsx render( <Flex.Stack> <Form.MainHeading>Heading</Form.MainHeading> <P>Lorem ipsum dolor sit amet, consectetur adipiscing elit.</P> <P>Aliquam at felis rutrum, luctus dui at, bibendum ipsum.</P> </Flex.Stack> ) ``` ### With Card ```tsx render( <Flex.Stack> <Card gap="medium"> <P>Lorem ipsum dolor sit amet, consectetur adipiscing elit.</P> <P>Aliquam at felis rutrum, luctus dui at, bibendum ipsum.</P> </Card> <Card gap="medium"> <P>Lorem ipsum dolor sit amet, consectetur adipiscing elit.</P> <P>Aliquam at felis rutrum, luctus dui at, bibendum ipsum.</P> </Card> </Flex.Stack> ) ``` ### With Card and heading ```tsx render( <Flex.Stack> <Form.MainHeading>Main heading</Form.MainHeading> <Card gap="medium"> <P>Lorem ipsum dolor sit amet, consectetur adipiscing elit.</P> <P>Aliquam at felis rutrum, luctus dui at, bibendum ipsum.</P> </Card> </Flex.Stack> ) ``` ### With Card and headings ```tsx render( <Flex.Stack> <Form.MainHeading>Main heading</Form.MainHeading> <Form.SubHeading>Sub heading</Form.SubHeading> <Card gap="medium"> <P>Lorem ipsum dolor sit amet, consectetur adipiscing elit.</P> <P>Aliquam at felis rutrum, luctus dui at, bibendum ipsum.</P> </Card> </Flex.Stack> ) ``` ## Properties ```json { "props": { "direction": { "doc": "Defaults to `vertical`.", "type": "string", "status": "optional" }, "align": { "doc": "Defaults to `stretch`.", "type": "string", "status": "optional" }, "[Flex.Container](/uilib/layout/flex/container/properties)": { "doc": "Flex.Container properties.", "type": "Various", "status": "optional" }, "[Space](/uilib/layout/space/properties)": { "doc": "Spacing properties like `top` or `bottom` are supported.", "type": ["string", "object"], "status": "optional" } } } ```