simple-flexbox
Version:
A simple way to make responsive layouts using Flexbox in React
129 lines (108 loc) • 6.44 kB
Markdown
## Simple Flexbox
A simple way to make responsive layouts using Flexbox in React. _Typescript supported._
## Installation
`npm install simple-flexbox` or `yarn add simple-flexbox`
## Examples
Look at a real UI created with `simple-flexbox` here: [https://llorentegerman.github.io/react-admin-dashboard/](https://llorentegerman.github.io/react-admin-dashboard/) and read the code here: [https://github.com/llorentegerman/react-admin-dashboard](https://github.com/llorentegerman/react-admin-dashboard).
See examples in [codesandbox](https://codesandbox.io/s/z3p04l3vol).
There are two main components, `Column` and `Row`.
```html
<Row vertical='center' horizontal='spaced'>
<Column vertical='end'>
<span> Content 1 </span>
<span> Content 2 </span>
</Column>
<Column>
<span> Content 3 </span>
<span> Content 4 </span>
<span> Content 5 </span>
</Column>
</Row>
```
[](https://codesandbox.io/s/z3p04l3vol)
# Row props
|property|accepted values|description|
| --------- | ----------- | ----------- |
|reverse| true or false | |
|vertical| 'start', 'center', 'end', 'stretch', 'baseline' | at **rows**, *vertical* and *alignItems* are the same |
|horizontal|'start', 'flex-start', 'center', 'end', 'flex-end', 'spaced', 'space-between', 'around', 'space-around', 'space-evenly'| at **rows**, *horizontal* and *justifyContent* are the same|
|justifyContent|'start', 'flex-start', 'center', 'end', 'flex-end', 'spaced', 'space-between', 'around', 'space-around', 'space-evenly'| at **rows**, *horizontal* and *justifyContent* are the same|
|alignItems|'start', 'center', 'end', 'stretch', 'baseline' | at **rows**, *vertical* and *alignItems* are the same |
|alignSelf|'start', 'center', 'end', 'stretch', 'baseline' | other alignment for the cross (vertical) axis |
|alignContent|'start', 'flex-start', 'center', 'end', 'flex-end', 'spaced', 'space-between', 'around', 'space-around', 'stretch'| other alignment for the cross (vertical) axis |
|flex| string| shorthand for grow, shrink and basis |
|flexGrow| number| flex-grow |
|flexShrink| number| flex-shrink |
|flexBasis| string| flex-basis |
|wrap| true or false| default: false |
|wrapReverse| true or false| default: false |
|any other property| any | i.e.: `style={{bakcgroundColor: 'red'}}`|
|breakpoints|array of objects| different styles are applied depending on `window.innerWidth`, see **Breakpoints** section below |
|element | 'article', 'aside', 'div', 'figure', 'footer', 'form', 'header', 'main', 'nav', 'section' | Defines to which html tag the styles will be applied. Default: `div` |
|componentRef| createRef() or callback ref| reference |
|children| | **required** |
# Column props
|property|accepted values|description|
| --------- | ----------- | ----------- |
|reverse| true or false | |
|horizontal| 'start', 'center', 'end', 'stretch', 'baseline' | at **column**, *horizontal* and *alignItems* are the same |
|vertical|'start', 'flex-start', 'center', 'end', 'flex-end', 'spaced', 'space-between', 'around', 'space-around', 'space-evenly'| at **column**, *vertical* and *justifyContent* are the same|
|justifyContent|'start', 'flex-start', 'center', 'end', 'flex-end', 'spaced', 'space-between', 'around', 'space-around', 'space-evenly'| at **column**, *vertical* and *justifyContent* are the same|
|alignItems|'start', 'center', 'end', 'stretch', 'baseline' | at **column**, *horizontal* and *alignItems* are the same |
|alignSelf|'start', 'center', 'end', 'stretch', 'baseline' | other alignment for the cross (horizontal) axis |
|alignContent|'start', 'flex-start', 'center', 'end', 'flex-end', 'spaced', 'space-between', 'around', 'space-around', 'stretch'| other alignment for the cross (horizontal) axis |
|flex| string| shorthand for grow, shrink and basis |
|flexGrow| number| flex-grow |
|flexShrink| number| flex-shrink |
|flexBasis| string| flex-basis |
|wrap| true or false| default: false |
|wrapReverse| true or false| default: false |
|any other property| any | i.e.: `style={{bakcgroundColor: 'red'}}`|
|breakpoints|array of objects| different styles are applied depending on `window.innerWidth`, see **Breakpoints** section below |
|element | 'article', 'aside', 'div', 'figure', 'footer', 'form', 'header', 'main', 'nav', 'section' | Defines to which html tag the styles will be applied. Default: `div` |
|componentRef| createRef() or callback ref| reference |
|children| | **required** |
Breakpoints
-------
The `breakpoints` property allows you to apply styles depending on `window.innerWidth`.
You must indicate the maximum **size** for which the styles will be applied, that means that the styles will be applied as long as `windows.width` <= **size**, where `size` is a number.
Breakpoints property must have this structure:
```
{
size1: { styles1 },
size2: { styles2 },
...
sizeN: { stylesN }
}
```
you can also use a `flexDirection` value such as `column, column-reverse, row, row-reverse`, or a `className`, in this case, the name of the class cannot be any of the 4 possible values of `flexDirection`, so, `className` cannot be any of these `column`, `column-reverse`, `row` or `row-reverse`.
```
{
size1: 'flexDirection value, for example: column, column-reverse, row or row-reverse',
size2: 'any className except column, column-reverse, row, row-reverse',
...
sizeN: 'column, column-reverse, row, row-reverse or className'
}
```
for example:
```
<Column breakpoints={{
850: { flexDirection: 'row', backgroundColor: 'green' },
600: 'row-reverse'
}}>
<b>Hello</b>
<span>world!</span>
</Column>
```
Breakpoints styles are applied cumulatively, for example, for the `Column` declared above, these will be the styles, depending on `window.innerWidth`:
`window.innerWidth > 850` --> `styles = {}`
`600 < window.innerWidth <= 850` --> `styles = { flexDirection: 'row', backgroundColor: 'green' }`
`window.innerWidth <= 600` --> `styles = { flexDirection: 'row-reverse', backgroundColor: 'green' }`
You can see this `breakpoints` examples in [codesandbox](https://codesandbox.io/s/z3p04l3vol).
License
-------
This software is released under the [MIT License](https://github.com/llorentegerman/simple-flexbox/blob/master/LICENSE).
Author
-------

[Germán Llorente](https://github.com/llorentegerman)