| Server IP : 14.225.204.176 / Your IP : 216.73.216.6 Web Server : nginx/1.24.0 System : Linux nodejs-ybgk 6.8.0-40-generic #40-Ubuntu SMP PREEMPT_DYNAMIC Fri Jul 5 10:34:03 UTC 2024 x86_64 User : root ( 0) PHP Version : 8.1.34 Disable Function : NONE MySQL : OFF | cURL : ON | WGET : ON | Perl : ON | Python : OFF | Sudo : ON | Pkexec : OFF Directory : /var/www/html/php/zinisoft.net-react/node_modules/react-slidedown/ |
Upload File : |
react-slidedown
============================
React component which uses CSS to animate a child from its current height to ```height: auto``` when mounting/updating/unmounting.
[](http://travis-ci.org/frankwallis/react-slidedown)
[Live Demo](https://ykxm1vz5vv.codesandbox.io/)
## Overview ##
CSS does not currently support animating element height to ```height: auto``` and so *normally* javascript is used to achieve this effect.
This component uses CSS to perform the animation, following an algorithm ([first described here](http://n12v.com/css-transition-to-from-auto)). The desired height of the element is calculated, and then css is used to transition that height. After the transition has completed the height is set to ```height: auto```.
react-slidedown is perfect for dropdown lists, popup menus, accordions and closeable panels which have varying sized content.
I am not aware of any cross-browser issues from IE10 and onwards.
## Installation ##
```sh
npm install react-slidedown --save
```
## Usage ##
Simply wrap the component you want to slide with the ```SlideDown``` component:
```js
import React from 'react'
import {SlideDown} from 'react-slidedown'
import 'react-slidedown/lib/slidedown.css'
export function MyDropdown(props) {
return (
<SlideDown className={'my-dropdown-slidedown'}>
{props.open ? props.children : null}
</SlideDown>
)
}
```
In the example above the css file needed by react-slidedown is included via JavaScript which is the normal way of doing things when using [webpack css-loader](https://github.com/webpack-contrib/css-loader), it is also populated in the ```style``` property of package.json so if you are using [parcelify](https://github.com/rotundasoftware/parcelify) it should get included automatically. Otherwise it is also possibe to import it from css:
```
@import "node_modules/react-slidedown/lib/slidedown.css";
```
## Props
| Property | Type | Default | Required? | Description |
|:---|:---|:---|:---:|:---|
| children | Children | | No | When provided the component opens and when removed the component closes |
| closed | Boolean | | No | If `true` the component will close even if children are provided |
| className | String | | No | CSS class name to be used in addition to the `react-slidedown` class name |
| transitionOnAppear | Boolean | `true` | No | Do a transition animation on initial mount |
| as | String | `div` | No | The outermost Element type to render |
## Example ##
To quickly see a live demonstration of react-slidedown go [here](https://ykxm1vz5vv.codesandbox.io/).
To build and run this example project:
```
git clone https://github.com/frankwallis/react-slidedown.git
cd react-slidedown
npm install
npm start
```
## Customisation ##
You can customise the transition used for the animation by overriding styles on the ```SlideDown``` component:
```cs
.react-slidedown.my-dropdown-slidedown {
transition-duration: 1.2s;
transition-timing-function: cubic-bezier(0.1, 0.7, 1.0, 0.1);
}
```
The default values used are:
```cs
.react-slidedown {
transition-duration: .5s;
transition-timing-function: ease-in-out;
}
```