evokit-box
Version:
The content block allows to apply indents, position and more
650 lines (508 loc) • 19.6 kB
Markdown
[evokit]: /packages/evokit/
[CHANGELOG]: /packages/evokit-box/CHANGELOG.md
[css-variable-usage]: //w3schools.com/css/css3_variables.asp
[react-component]: //reactjs.org/docs/react-component.html
[create_theme]: /public/theming.html
[installation]: /docs/getting-started/installation.md
[quik-start]: /docs/getting-started/quick-start.md
[use-props]: /docs/getting-started/props.md
[box-align]: #box-align
[box-background]: #box-background
[box-border]: #box-border
[box-border-color]: #box-border-color
[box-border-width]: #box-border-width
[box-border-style]: #box-border-style
[box-display]: #box-display
[box-empty]: #box-empty
[box-height]: #box-height
[box-margin]: #box-margin
[box-opacity]: #box-opacity
[box-overflow]: #box-overflow
[box-padding]: #box-padding
[box-place]: #box-place
[box-position]: #box-position
[box-round]: #box-round
[box-width]: #box-width
[box-zindex]: #box-zindex
# EvoKit - Box
[](https://www.npmjs.com/package/evokit-box)
[][CHANGELOG]
The content block allows to apply indents, position and more. Contains one element `<Box>`
---
## Install
> Peer dependencies [evokit]. More about [install][installation]
```bash
npm install evokit-box --save
```
## Usage
> More about [usage][quik-start]
```jsx
import React from 'react';
import { Box } from 'evokit-box';
import 'evokit-box/style.css';
const App = () => (
<Box box-margin='xs xl'>
...
</Box>
);
```
[](https://codesandbox.io/embed/boxusage-3r9iy?fontsize=14&runonclick=0 ':include :type=iframe width=100% height=500px')
## Props
> Also supports other valid props of the React Element. More about [use props][use-props]
### `<Box />`
| Prop name | Default value | Possible value | Description |
|------------------------|---------------|----------------|-------------|
| [box-align] | `none` | `none` `left` `center` `right` | Horizontal alignment |
| [box-background] | `null` | [Create theme][create_theme] | Background color |
| [box-border] `*` | `null` | [Create theme][create_theme] | Border color, width and style |
| [box-border-color] `*` | `null` | [Create theme][create_theme] | Border color |
| [box-border-width] `*` | `none` | `none` `xxs` `xs` `s` `m` `l` `xl` `xxl` `3xl` `4xl` `5xl` | Border width |
| [box-border-style] `*` | `solid` | `solid` `dotted` `dashed` | Border style |
| [box-display] | `block` | `block` `inline-block` `inline` `none` `none:empty` | Display type |
| [box-height] | `auto` | `auto` `1-1` | Set the height |
| [box-margin] `*` | `none` | `none` `xxs` `xs` `s` `m` `l` `xl` `xxl` `3xl` `4xl` `5xl` `auto` | Indent around block |
| [box-opacity] | `null` | `0` `10` `20` `30` `40` `50` `60` `70` `80` `90` `100` | Set the opacity in % |
| [box-overflow] `*` | `visible` | `auto` `hidden` `scroll` `visible` | Display overflow block content |
| [box-padding] `*` | `none` | `none` `xxs` `xs` `s` `m` `l` `xl` `xxl` `3xl` `4xl` `5xl` | Indent around an block content |
| [box-place] | `null` | `none` `top` `top-left` `top-right` `center` `center-left` `center-right` `bottom` `bottom-left` `bottom-right` | Position place, depending [box-position] |
| [box-position] `*` | `static` | `static` `relative` `absolute` `fixed` `sticky` | Positioning method |
| [box-round] `*` | `none` | `none` `full` `xxs` `xs` `s` `m` `l` `xl` `xxl` `3xl` `4xl` `5xl` | Corner rounding |
| [box-width] | `auto` | `auto` `1-1` `*-2` `*-3` `*-4` `*-5` `*-6` `*-7` `*-8` `*-9` `*-10` | Set the width |
| [box-zindex] | `null` | `none` `xxs` `xs` `s` `m` `l` `xl` `xxl` `3xl` `4xl` `5xl` | Position z-index, depending [box-position] |
> `*` — prop has advanced params
## Customize
> This set of css variables is default, if you want to override one or more value, please use the rules [css-variable-usage], define them below the css import.
```css
@custom-media --ek-box-media-small only screen and (min-width: 480px);
@custom-media --ek-box-media-medium only screen and (min-width: 768px);
@custom-media --ek-box-media-large only screen and (min-width: 960px);
@custom-media --ek-box-media-wide only screen and (min-width: 1200px);
@custom-media --ek-box-media-huge only screen and (min-width: 1400px);
:root {
/* prop 'box-padding', 'box-margin' */
--ek-box-indent-xxs: 5px;
--ek-box-indent-xs: 10px;
--ek-box-indent-s: 15px;
--ek-box-indent-m: 20px;
--ek-box-indent-l: 25px;
--ek-box-indent-xl: 30px;
--ek-box-indent-xxl: 35px;
--ek-box-indent-3xl: 40px;
--ek-box-indent-4xl: 45px;
--ek-box-indent-5xl: 50px;
/* prop 'box-round' */
--ek-box-round-xxs: 2px;
--ek-box-round-xs: 4px;
--ek-box-round-s: 6px;
--ek-box-round-m: 8px;
--ek-box-round-l: 10px;
--ek-box-round-xl: 12px;
--ek-box-round-xxl: 14px;
--ek-box-round-3xl: 16px;
--ek-box-round-4xl: 18px;
--ek-box-round-5xl: 20px;
/* prop 'box-border-width' */
--ek-box-border-width-xxs: 1px;
--ek-box-border-width-xs: 2px;
--ek-box-border-width-s: 3px;
--ek-box-border-width-m: 4px;
--ek-box-border-width-l: 5px;
--ek-box-border-width-xl: 6px;
--ek-box-border-width-xxl: 7px;
--ek-box-border-width-3xl: 8px;
--ek-box-border-width-4xl: 9px;
--ek-box-border-width-5xl: 10px;
/* prop 'box-zindex' */
--ek-box-zindex-xxs: 5;
--ek-box-zindex-xs: 10;
--ek-box-zindex-s: 15;
--ek-box-zindex-m: 20;
--ek-box-zindex-l: 25;
--ek-box-zindex-xl: 30;
--ek-box-zindex-xxl: 35;
--ek-box-zindex-3xl: 40;
--ek-box-zindex-4xl: 45;
--ek-box-zindex-5xl: 50;
}
```
---
## `box-display`
- `block` - shown as blocky
- `block-inline` - block element that is wrapped around by other elements
- `inline` - displayed as inline
- `none` - remove from a document
- `none:empty` - Hide if contain either nothing or only an HTML comment
```jsx
<Box box-display='none'>
...
</Box>
```
## `box-align`
- `none` - No alignment
- `left` - Align to the left
- `center` - Center alignment
- `right` - Align to the right
```jsx
<Box box-align='center'>
...
</Box>
```
## `box-margin`
The property allows you to set the indentation value for all sides of an element at once or to determine it only for specified sides.
!> **DEPRECATED** props `box-margin-lr` and `box-margin-tb`, please use multi values
**Advanced props**
- `box-margin-top` <sup>{1}</sup>
- `box-margin-right` <sup>{2}</sup>
- `box-margin-bottom` <sup>{3}</sup>
- `box-margin-left` <sup>{4}</sup>
**Multi values** _(set value separated by a space)_
- `box-margin="{1,3} {2,4}"`
- `box-margin="{1} {2,4} {3}"`
- `box-margin="{1} {2} {3} {4}"`
**List of values**
| Value | CSS var | CSS value |
|--------|-----------------------|-----------|
| `none` | --- | `0px` |
| `auto` | --- | `auto` |
| `xxs` | `--ek-box-indent-xxs` | `5px` |
| `xs` | `--ek-box-indent-xs` | `10px` |
| `s` | `--ek-box-indent-s` | `15px` |
| `m` | `--ek-box-indent-m` | `20px` |
| `l` | `--ek-box-indent-l` | `25px` |
| `xl` | `--ek-box-indent-xl` | `30px` |
| `xxl` | `--ek-box-indent-xxl` | `35px` |
| `3xl` | `--ek-box-indent-3xl` | `40px` |
| `4xl` | `--ek-box-indent-4xl` | `45px` |
| `5xl` | `--ek-box-indent-5xl` | `50px` |
```jsx
<Box box-margin='s' />
<Box box-margin='s m' />
<Box box-margin='s m l' />
<Box box-margin='s m l xl' />
<Box
box-margin-top='s'
box-margin-right='m'
box-margin-bottom='l'
box-margin-left='xl'
/>
```
## `box-padding`
The property allows you to set the indentation value for all sides of an element at once or to determine it only for specified sides.
!> **DEPRECATED** props `box-padding-lr` and `box-padding-tb`, please use multi values
**Advanced props**
- `box-padding-top` <sup>{1}</sup>
- `box-padding-right` <sup>{2}</sup>
- `box-padding-bottom` <sup>{3}</sup>
- `box-padding-left` <sup>{4}</sup>
**Multi values** _(set value separated by a space)_
- `box-padding="{1,3} {2,4}"`
- `box-padding="{1} {2,4} {3}"`
- `box-padding="{1} {2} {3} {4}"`
**List of values**
| Value | CSS var | CSS value |
|--------|-----------------------|-----------|
| `none` | --- | `0px` |
| `xxs` | `--ek-box-indent-xxs` | `5px` |
| `xs` | `--ek-box-indent-xs` | `10px` |
| `s` | `--ek-box-indent-s` | `15px` |
| `m` | `--ek-box-indent-m` | `20px` |
| `l` | `--ek-box-indent-l` | `25px` |
| `xl` | `--ek-box-indent-xl` | `30px` |
| `xxl` | `--ek-box-indent-xxl` | `35px` |
| `3xl` | `--ek-box-indent-3xl` | `40px` |
| `4xl` | `--ek-box-indent-4xl` | `45px` |
| `5xl` | `--ek-box-indent-5xl` | `50px` |
```jsx
<Box box-padding='s' />
<Box box-padding='s m' />
<Box box-padding='s m l' />
<Box box-padding='s m l xl' />
<Box
box-padding-top='s'
box-padding-right='m'
box-padding-bottom='l'
box-padding-left='xl'
/>
```
## `box-round`
The property allows you to set the fillet value for all corners of the element at the same time or to determine it only for the specified angle.
!> **DEPRECATED** props `box-round-top`, `box-round-right`, `box-round-bottom` and `box-round-left`, please use multi values
**Advanced props**
- `box-round-top-left` <sup>{1}</sup>
- `box-round-top-right` <sup>{2}</sup>
- `box-round-bottom-right` <sup>{3}</sup>
- `box-round-bottom-left` <sup>{4}</sup>
**Multi values** _(set value separated by a space)_
- `box-round="{1,3} {2,4}"`
- `box-round="{1} {2,4} {3}"`
- `box-round="{1} {2} {3} {4}"`
**List of values**
| Value | CSS var | CSS value |
|--------|-----------------------|-----------|
| `none` | --- | `0px` |
| `full` | --- | `50%` |
| `xxs` | `--ek-box-round-xxs` | `2px` |
| `xs` | `--ek-box-round-xs` | `4px` |
| `s` | `--ek-box-round-s` | `6px` |
| `m` | `--ek-box-round-m` | `8px` |
| `l` | `--ek-box-round-l` | `10px` |
| `xl` | `--ek-box-round-xl` | `12px` |
| `xxl` | `--ek-box-round-xxl` | `14px` |
| `3xl` | `--ek-box-round-3xl` | `16px` |
| `4xl` | `--ek-box-round-4xl` | `18px` |
| `5xl` | `--ek-box-round-5xl` | `20px` |
```jsx
<Box box-round='s' />
<Box box-round='s m' />
<Box box-round='s m l' />
<Box box-round='s m l xl' />
<Box
box-round-top-left='s'
box-round-top-right='m'
box-round-bottom-right='l'
box-round-bottom-left='xl'
/>
```
## `box-width`
- `auto` - value: `auto`
- See table, for example: `3-4` = `75%`
<div class='tableHovered' data-tooltip-content='box-width'></div>
| |1|2|3|4|5|6|7|8|9|10|
|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|
|1|`100%`|`50%`|`33.33%`|`25%`|`20%`|`16.66%`|`14.28%`|`12.5%`|`11.11%`|`10%`|
|2|---|`100%`|`66.66%`|`50%`|`40%`|`33.33%`|`28.57%`|`25%`|`22.22%`|`20%`|
|3|---|---|`100%`|`75%`|`60%`|`50%`|`42.85%`|`37.5%`|`33.33%`|`30%`|
|4|---|---|---|`100%`|`80%`|`66.66%`|`57.14%`|`50%`|`44.44%`|`40%`|
|5|---|---|---|---|`100%`|`83.33%`|`71.42%`|`62.5%`|`55.55%`|`50%`|
|6|---|---|---|---|---|`100%`|`85.71%`|`75%`|`66.66%`|`60%`|
|7|---|---|---|---|---|---|`100%`|`87.5%`|`77.77%`|`70%`|
|8|---|---|---|---|---|---|---|`100%`|`88.88%`|`80%`|
|9|---|---|---|---|---|---|---|---|`100%`|`90%`|
|10|---|---|---|---|---|---|---|---|---|`100%`|
```jsx
<Box box-width='3-4'>
...
</Box>
```
## `box-height`
- `auto` - value: `auto`
- `1-1` - value: `100%`
```jsx
<Box box-height='1-1'>
...
</Box>
```
## `box-position`
The property allows you to set the type of positioning, location place on all sides and z-index
**Advanced props**
- `box-position` <sup>{1}</sup>
- [`box-place`][box-place] <sup>{2}</sup>
- [`box-zindex`][box-zindex] <sup>{3}</sup>
**Multi values** _(set value separated by a space)_
- `box-position="{1}"`
- `box-position="{1} {2}"`
- `box-position="{1} {2} {3}"`
```jsx
<Box box-position='absolute' />
<Box box-position='absolute center' />
<Box box-position='absolute center xs' />
```
## `box-place`
> Use with prop `box-position`
**List of values**
| Value | Description |
|-----------------|--------------------------|
| `none` | Reset placement |
| `top` | Center top placement |
| `top-left` | Left top placement |
| `top-right` | Right top placement |
| `center` | Center placement |
| `center-left` | Left center placement |
| `center-right` | Right center placement |
| `bottom` | Center bottom placement |
| `bottom-left` | Left bottom placement |
| `bottom-right` | Right bottom placement |
```jsx
<Box box-position='absolute' box-place='center'>
...
</Box>
```
## `box-zindex`
> Use with prop `box-position`
**List of values**
| Value | CSS var | CSS value |
|--------|-----------------------|-----------|
| `none` | --- | `0` |
| `xxs` | `--ek-box-zindex-xxs` | `5` |
| `xs` | `--ek-box-zindex-xs` | `10` |
| `s` | `--ek-box-zindex-s` | `15` |
| `m` | `--ek-box-zindex-m` | `20` |
| `l` | `--ek-box-zindex-l` | `25` |
| `xl` | `--ek-box-zindex-xl` | `30` |
| `xxl` | `--ek-box-zindex-xxl` | `35` |
| `3xl` | `--ek-box-zindex-3xl` | `40` |
| `4xl` | `--ek-box-zindex-4xl` | `45` |
| `5xl` | `--ek-box-zindex-5xl` | `50` |
```jsx
<Box box-position='absolute' box-zindex='xs'>
...
</Box>
```
## `box-overflow`
The property allows you to set the value for all axes at the same time or to determine it only for the specified axis
**Advanced props**
- `box-overflow-x` <sup>{1}</sup>
- `box-overflow-y` <sup>{2}</sup>
**Multi values** _(set value separated by a space)_
- `box-overflow="{1} {2}"`
**List of values**
- `auto` - Scroll bars are added only when needed
- `hidden` - Only the area inside the element is displayed, the rest will be hidden
- `scroll` - Scroll bars are always added
- `visible` - The entire content of the element is displayed, even beyond the specified height and width
```jsx
<Box box-overflow='scroll' />
<Box box-overflow='visible scroll' />
<Box box-overflow-x='visible' box-overflow-y='scroll' />
```
## `box-border`
!> **DEPRECATED** props `box-border-lr` and `box-border-tb`, please use the separately `box-border-left` and `box-border-right` or `box-border-top` and `box-border-bottom`
**Advanced props**
- `box-border-top`
- `box-border-right`
- `box-border-bottom`
- `box-border-left`
**Multi values** _(set value separated by a space)_
- `box-border="{1}"`
- `box-border="{1} {2}"`
- `box-border="{1} {2} {3}"`
> {1} - [color][box-border-color], {2} - [width][box-border-width], {3} - [style][box-border-style]
```jsx
<Box box-border="{THEME_NAME}" />
<Box box-border="{THEME_NAME} xs" />
<Box box-border="{THEME_NAME} xs dotted" />
<Box box-border-top="{THEME_NAME}" />
<Box box-border-top="{THEME_NAME} xs" />
<Box box-border-top="{THEME_NAME} xs dotted" />
```
> Set the `THEME_NAME` depending on the [theming][create_theme]
## `box-border-width`
The property allows you to set the border width for all sides of an element at once or to determine it only for specified sides.
**Advanced props**
- `box-border-width-top` <sup>{1}</sup>
- `box-border-width-right` <sup>{2}</sup>
- `box-border-width-bottom` <sup>{3}</sup>
- `box-border-width-left` <sup>{4}</sup>
**Multi values** _(set value separated by a space)_
- `box-border-width="{1,3} {2,4}"`
- `box-border-width="{1} {2,4} {3}"`
- `box-border-width="{1} {2} {3} {4}"`
**List of values**
| Value | CSS var | CSS value |
|--------|------------------------------|-----------|
| `none` | --- | `0px` |
| `xxs` | `--ek-box-border-width-xxs` | `1px` |
| `xs` | `--ek-box-border-width-xs` | `2px` |
| `s` | `--ek-box-border-width-s` | `3px` |
| `m` | `--ek-box-border-width-m` | `4px` |
| `l` | `--ek-box-border-width-l` | `5px` |
| `xl` | `--ek-box-border-width-xl` | `6px` |
| `xxl` | `--ek-box-border-width-xxl` | `7px` |
| `3xl` | `--ek-box-border-width-3xl` | `8px` |
| `4xl` | `--ek-box-border-width-4xl` | `9px` |
| `5xl` | `--ek-box-border-width-5xl` | `10px` |
```jsx
<Box box-border-width='s' />
<Box box-border-width='s m' />
<Box box-border-width='s m l' />
<Box box-border-width='s m l xl' />
<Box
box-border-width-top='s'
box-border-width-right='m'
box-border-width-bottom='l'
box-border-width-left='xl'
/>
```
## `box-border-color`
The property allows you to set the border color for all sides of an element at once or to determine it only for specified sides.
**Advanced props**
- `box-border-color-top` <sup>{1}</sup>
- `box-border-color-right` <sup>{2}</sup>
- `box-border-color-bottom` <sup>{3}</sup>
- `box-border-color-left` <sup>{4}</sup>
**Multi values** _(set value separated by a space)_
- `box-border-color="{1,3} {2,4}"`
- `box-border-color="{1} {2,4} {3}"`
- `box-border-color="{1} {2} {3} {4}"`
```jsx
<Box box-border-color='{THEME_NAME}' />
<Box box-border-color='{THEME_NAME} {THEME_NAME}' />
<Box box-border-color='{THEME_NAME} {THEME_NAME} {THEME_NAME}' />
<Box box-border-color='{THEME_NAME} {THEME_NAME} {THEME_NAME} {THEME_NAME}' />
<Box
box-border-color-top='{THEME_NAME}'
box-border-color-right='{THEME_NAME}'
box-border-color-bottom='{THEME_NAME}'
box-border-color-left='{THEME_NAME}'
/>
```
> Set the `THEME_NAME` depending on the [theming][create_theme]
## `box-border-style`
The property allows you to set the border style for all sides of an element at once or to determine it only for specified sides.
**Advanced props**
- `box-border-style-top` <sup>{1}</sup>
- `box-border-style-right` <sup>{2}</sup>
- `box-border-style-bottom` <sup>{3}</sup>
- `box-border-style-left` <sup>{4}</sup>
**Multi values** _(set value separated by a space)_
- `box-border-style="{1,3} {2,4}"`
- `box-border-style="{1} {2,4} {3}"`
- `box-border-style="{1} {2} {3} {4}"`
**Values**
- `solid` - solid style _(default)_
- `dotted` - dotted style
- `dashed` - dashed style
```jsx
<Box box-border-style='solid' />
<Box box-border-style='solid dotted' />
<Box box-border-style='solid dotted dashed' />
<Box box-border-style='solid dotted dashed solid' />
<Box
box-border-style-top='solid'
box-border-style-right='dotted'
box-border-style-bottom='dashed'
box-border-style-left='solid'
/>
```
## `box-background`
```jsx
<Box box-background='{THEME_NAME}'>
...
</Box>
```
> Set the `THEME_NAME` depending on the [theming][create_theme]
## `box-opacity`
- `0` - value: `0`
- `10` - value: `0.1`
- `20` - value: `0.2`
- `30` - value: `0.3`
- `40` - value: `0.4`
- `50` - value: `0.5`
- `60` - value: `0.6`
- `70` - value: `0.7`
- `80` - value: `0.8`
- `90` - value: `0.9`
- `100` - value: `1`
```jsx
<Box box-opacity='50'>
...
</Box>
```
## `box-empty`
!> In version [evokit-box@3.4.0][CHANGELOG] **DEPRECATED** prop `box-empty='hidden'`, please use `box-display='none:empty'`
The `<Box>` will be hidden `display: none` that contain either nothing or only an HTML comment.
```jsx
<Box box-empty='hidden'>
{null}
</Box>
```