Affix
Make an element stick to viewport.
When To Use#
When user browses a long web page, some content need to stick to the viewport. This is common for menus and actions.
Please note that Affix should not cover other content on the page, especially when the size of the viewport is small.
Examples
import { Affix, Button } from 'antd';
ReactDOM.render(
<div>
<Affix>
<Button type="primary">Affix top</Button>
</Affix>
<br />
<Affix offsetBottom={0}>
<Button type="primary">Affix bottom</Button>
</Affix>
</div>,
mountNode
);
import { Affix, Button } from 'antd';
class Demo extends React.Component {
render() {
return (
<div className="scrollable-container" ref={(node) => { this.container = node; }}>
<div className="background">
<Affix target={() => this.container}>
<Button type="primary">
Fixed at the top of container
</Button>
</Affix>
</div>
</div>
);
}
}
ReactDOM.render(<Demo />, mountNode);
import { Affix, Button } from 'antd';
ReactDOM.render(
<Affix offsetTop={120} onChange={affixed => console.log(affixed)}>
<Button>120px to affix top</Button>
</Affix>,
mountNode
);
API#
Property | Description | Type | Default |
---|---|---|---|
offsetTop | Pixels to offset from top when calculating position of scroll | number | 0 |
offsetBottom | Pixels to offset from bottom when calculating position of scroll | number | - |
target | specifies the scrollable area dom node | () => HTMLElement | () => window |
onChange | Callback for when affix state is changed | Function(affixed) | - |
Note: Children of Affix
can not be position: absolute
, but you can set Affix
as position: absolute
:
<Affix style={{ position: 'absolute', top: y, left: x}}>
...
</Affix>