react-boxen
v1.1.2
Published
A layout primitive for React.
Downloads
97
Readme
React Boxen
A layout primitive for React.
React Boxen utilizes Styled Components to provide cross-browser layout.
Why?
- Flex Box Plus - Provides a helpful layer of abstraction on top of the robust (and sometimes confusing) display flex properties
- Child spacing - Provides consistent spacing between child elements vertically, horizontally, and wrapping
Installation
npm install react-boxen --save or yarn add react-boxen
Usage Examples
Spacing vertically
This example produces a layout with each child spaced vertically.
import React from "react"
import Box from "react-boxen"
const css = {
parent: `
padding: 1em;
background: lightgray;
`,
child: `
padding: 0.75em;
background: white;
`
}
export default () =>
<Box
css={css.parent}
childSpacing="10px">
<Box css={css.child}>Child 1</Box>
<Box css={css.child}>Child 2</Box>
<Box css={css.child}>Child 3</Box>
</Box>Spacing horizontally
This example produces a layout with each child spaced horizontally.
import React from "react"
import Box from "react-boxen"
const css = {
parent: `
padding: 1em;
background: lightgray;
`,
child: `
padding: 0.75em;
background: white;
`
}
export default () =>
<Box
css={css.parent}
childDirection="row"
childSpacing="10px">
<Box css={css.child}>Child 1</Box>
<Box css={css.child}>Child 2</Box>
<Box css={css.child}>Child 3</Box>
</Box>Child grow
When a child receives grow as a prop (or data-grow for native elements) it fills the available space.
import React from "react"
import Box from "react-boxen"
const css = {
parent: `
padding: 1em;
background: lightgray;
`,
child: `
padding: 0.75em;
background: white;
`
}
export default () =>
<Box
css={css.parent}
childDirection="row"
childSpacing="10px">
<Box css={css.child}>Child 1</Box>
<Box grow css={css.child}>Child 2</Box>
<Box css={css.child}>Child 3</Box>
</Box>API
Box Properties
Properties placed on the Box component directly.
Property | Type | Value (default *) | Description
--- | --- | --- | ---css | String | Template literal containing valid CSS | See styled-components documentation
childAlign | String | flex-start * flex-end center stretch baseline | Align children along the cross axis
childBasis | String | Length | Assigns flex-basis on children
childDirection | String | column * column-reverse row row-reverse | Vertical or horizontal orientation of children
childJustify | String | flex-start * flex-end center space-between space-around | Align children along the main axis
childWrap | String | nowrap * wrap wrap-reverse | Define whether or not children can wrap
childWrapLastGrow | Bool | True * | Setting to false preserves any orphan element's width when childWrap is wrap.
childSpacing | String | Length | Spacing between children on any axis (accepts shorthand value 5px 10em)
padding | String | Length | Accepts shorthand 5px 10em
...rest | Any | Any | Rest of props (aside from children) are spread onto Box itself (e.g. onClick, onPress, etc.)
Child Properties
Properties added to any direct child. For compound components use values as shown. For native elements (e.g. <div />) use data-<grow|shrink|...> (i.e. <div data-grow>Child</div>).
Property | Type | Value (default *) | Description
--- | --- | --- | ---basis | String | Length | Individual flex-basis. This controls the length (width or height) along the main axis.
grow | Number | 0 * | Amount Box should grow to fill available space
scroll | Bool | False * | Sets child wrapper to 100% height and overflow auto
shrink | Number | 0 * | Amount Box should shrink inside available space
spacerRef | Func | null * | A function used to access the reference of the child's wrapping Spacer
Roadmap
Technically, there is nothing preventing usage with React Native. The web is a more immediate proving ground. As the API solidifies, testing and support will be hammered out for RN. PRs are always welcome!
