react-sticky-plus v1.1.8
react-sticky 
The most powerful Sticky library available for React!
Demos
Highlights
- Fully-nestable, allowing you to build awesome layouts with familiar syntax
- Sane defaults so you spend less time configuring
- Allows multiple Sticky elements on the page at once with compositional awareness!
Installation
npm install react-stickyTip: run npm build to build the compressed UMD version suitable for inclusion via CommonJS, AMD, and even good old fashioned <script> tags (available as ReactSticky).
Overview & Basic Example
It all starts with a <StickyContainer />. This is basically a plain ol' <div /> with a React-managed padding-top css attribute. As you scroll down the page, all <Sticky /> tags within
will be constrained to the bounds of its closest <StickyContainer /> parent.
The elements you actually want to "stick" should be wrapped in the <Sticky /> tag. The full list of props are available below, but typical usage will look something like so:
app.jsx
import React from 'react';
import { StickyContainer, Sticky } from 'react-sticky';
...
class App extends React.Component ({
render() {
return (
...
<StickyContainer>
...
<Sticky>
<header>
...
</header>
</Sticky>
...
</StickyContainer>
...
);
},
});When the "stickiness" becomes activated, the following inline style rules are applied to the Sticky element:
position: fixed;
top: 0;
left: 0;
width: < width is inherited from the closest StickyContainer >Note that the calculation of the Sticky element's height does not currently take margins into account. If you have margins on this element it may result in unexpected behavior.
<StickyContainer /> Props
<StickyContainer /> passes along all props you provide to it without interference. That's right - no restrictions - go nuts!
<Sticky /> Props
position (default: 'top')
Position of the sticky element. Possible values are 'top' or 'bottom':
app.jsx
<StickyContainer>
<Sticky position="bottom">
<header />
</Sticky>
</StickyContainer>Note: If you've chosen 'bottom' position sticky will set bottom css prop instead of top:
position: fixed;
bottom: 0;
left: 0;
width: < width is inherited from the closest StickyContainer >stickyStyle (default: {})
In the event that you wish to override the style rules applied, simply pass in the style object as a prop:
app.jsx
<StickyContainer>
<Sticky stickyStyle={customStyleObject}>
<header />
</Sticky>
</StickyContainer>Note: You likely want to avoid messing with the following attributes in your stickyStyle: left, top, and width.
stickyClassName (default: 'sticky')
You can also specify a class name to be applied when the element becomes sticky:
app.jsx
<StickyContainer>
...
<Sticky stickyClassName={customClassName}>
<header />
</Sticky>
...
</StickyContainer>topOffset (default: 0)
Sticky state will be triggered when the top of the element is topOffset pixels from the top of the closest <StickyContainer />. Positive numbers give the impression of a lazy sticky state, whereas negative numbers are more eager in their attachment.
app.jsx
<StickyContainer>
...
<Sticky topOffset={80}>
<SomeChild />
</Sticky>
...
</StickyContainer>The above would result in an element that becomes sticky once its top is greater than or equal to 80px away from the top of the <StickyContainer />.
bottomOffset (default: 0)
Sticky state will be triggered when the bottom of the element is bottomOffset pixels from the bottom of the closest <StickyContainer />.
app.jsx
<StickyContainer>
...
<Sticky bottomOffset={80}>
<SomeChild />
</Sticky>
...
</StickyContainer>className (default: '')
You can specify a class name that would be applied to the resulting element:
app.jsx
<StickyContainer>
...
<Sticky className={className}>
<header />
</Sticky>
...
</StickyContainer>style (default: {})
You can also specify a style object that would be applied to the resulting element:
app.jsx
<StickyContainer>
...
<Sticky style={{background: 'red'}}>
<header />
</Sticky>
</StickyContainer>Note: In the event that stickyStyle rules conflict with style rules, stickyStyle rules take precedence ONLY while sticky state is active.
onStickyStateChange (default: function() {})
Use the onStickyStateChange prop to fire a callback function when the sticky state changes:
app.jsx
<StickyContainer>
...
<Sticky onStickyStateChange={this.handleStickyStateChange}>
<header />
</Sticky
...
</StickyContainer>isActive (default: true)
Use the isActive prop to manually turn sticky on or off:
app.jsx
<StickyContainer>
...
<Sticky isActive={false}>
<header />
</Sticky
...
</StickyContainer>License
MIT