The most powerful Sticky library available for React!
- 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!
 
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).
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 /> passes along all props you provide to it without interference. That's right - no restrictions - go nuts!
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.
You can also specify a class name to be applied when the element becomes sticky:
app.jsx
<StickyContainer>
  ...
  <Sticky stickyClassName={customClassName}>
    <header />
  </Sticky>
  ...
</StickyContainer>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 />.
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>You can specify a class name that would be applied to the resulting element:
app.jsx
<StickyContainer>
  ...
  <Sticky className={className}>
    <header />
  </Sticky>
  ...
</StickyContainer>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.
Use the onStickyStateChange prop to fire a callback function when the sticky state changes:
app.jsx
<StickyContainer>
  ...
  <Sticky onStickyStateChange={this.handleStickyStateChange}>
    <header />
  </Sticky
  ...
</StickyContainer>Use the isActive prop to manually turn sticky on or off:
app.jsx
<StickyContainer>
  ...
  <Sticky isActive={false}>
    <header />
  </Sticky
  ...
</StickyContainer>MIT