Stack
Stack is a layout utility component that makes it easy to stack items together and apply a space between them.
Import
import { Stack } from '@trendmicro/react-styled-ui';
Usage
By default, each item is stacked vertically. Stack clones it's children and passes the spacing to them using the margin property.
direction Prop | Item Spacing |
|---|
| column | margin-bottom |
| column-reverse | margin-top |
| row | margin-right |
| row-reverse | margin-left |
Vertically stacked items
EDITABLE EXAMPLE
const Item = (props) => {
const [colorMode] = useColorMode();
const [colorStyle] = useColorStyle({ colorMode });
const boxShadow = colorStyle.shadow.thin;
const borderColor = colorMode === 'dark' ? 'gray:70' : 'gray:20';
return (
<Box p="2x" boxShadow={boxShadow} border={1} borderColor={borderColor} {...props} />
);
};
function Example() {
return (
<Stack direction="column" spacing="1rem">
<Item>Item 1</Item>
<Item>Item 2</Item>
<Item>Item 3</Item>
</Stack>
);
}
render(<Example />);
Vertically stacked items in reverse order
EDITABLE EXAMPLE
const Item = (props) => {
const [colorMode] = useColorMode();
const [colorStyle] = useColorStyle({ colorMode });
const boxShadow = colorStyle.shadow.thin;
const borderColor = colorMode === 'dark' ? 'gray:70' : 'gray:20';
return (
<Box p="2x" boxShadow={boxShadow} border={1} borderColor={borderColor} {...props} />
);
};
function Example() {
return (
<Stack direction="column-reverse" spacing="1rem">
<Item>Item 1</Item>
<Item>Item 2</Item>
<Item>Item 3</Item>
</Stack>
);
}
render(<Example />);
Horizontally stacked items
EDITABLE EXAMPLE
const Item = (props) => {
const [colorMode] = useColorMode();
const [colorStyle] = useColorStyle({ colorMode });
const boxShadow = colorStyle.shadow.thin;
const borderColor = colorMode === 'dark' ? 'gray:70' : 'gray:20';
return (
<Box p="2x" boxShadow={boxShadow} border={1} borderColor={borderColor} {...props} />
);
};
function Example() {
return (
<Stack direction="row" spacing="1rem">
<Item>Item 1</Item>
<Item>Item 2</Item>
<Item>Item 3</Item>
</Stack>
);
}
render(<Example />);
Horizontally stacked items in reverse order
EDITABLE EXAMPLE
const Item = (props) => {
const [colorMode] = useColorMode();
const [colorStyle] = useColorStyle({ colorMode });
const boxShadow = colorStyle.shadow.thin;
const borderColor = colorMode === 'dark' ? 'gray:70' : 'gray:20';
return (
<Box p="2x" boxShadow={boxShadow} border={1} borderColor={borderColor} {...props} />
);
};
function Example() {
return (
<Stack direction="row-reverse" spacing="1rem">
<Item>Item 1</Item>
<Item>Item 2</Item>
<Item>Item 3</Item>
</Stack>
);
}
render(<Example />);
Props
| Name | Type | Default | Description |
|---|
| direction | string | 'column' | The direction to stack the items. One of: 'column', 'column-reverse', 'row', 'row-reverse' |
| spacing | number | string | 0 | The space between each stack item. |
| shouldWrapChildren | boolean | false | If true, the children will be wrapped in a Box with display: inline-block, and the Box will take the spacing props. |