SlideDown
import SlideDown from "@intility/bifrost-react/SlideDown";
Animate height
Animating height is tricky because CSS can't transition to keyword auto
,
this component creates two wrapper div
s which use the
.bf-expand
class.
This component is used internally by <Accordion.Item>
,
<Message expandable>
, <Table.Row content>
,
and <Nav.Group>
(when inside expanded sidebar or mobile menu).
Pass a boolean to the open
prop to control its open/collapsed state:
<SlideDown open={booleanState}>
<p>My content...</p>
</SlideDown>
<SlideDown open={booleanState}>
<p>My content...</p>
</SlideDown>
Combined with <Button.Expand>
you can create
expandable content like this;
<Button.Expand open={isOpen} onClick={() => setIsOpen(!isOpen)}>
Click here to toggle the content below
</Button.Expand>
<SlideDown open={isOpen}>
<p>My content...</p>
</SlideDown>
<Button.Expand open={isOpen} onClick={() => setIsOpen(!isOpen)}>
Click here to toggle the content below
</Button.Expand>
<SlideDown open={isOpen}>
<p>My content...</p>
</SlideDown>
Padding
The technique used
internally
does not allow padding
on the wrapper element.
Avoid padding on the <SlideDown>
itself
<SlideDown open={booleanState} style={{ padding: "16px" }}>
<p>Will not be hidden properly :(</p>
</SlideDown>
<SlideDown open={booleanState} style={{ padding: "16px" }}>
<p>Will not be hidden properly :(</p>
</SlideDown>
Instead apply padding to a container around your content
<SlideDown open={booleanState}>
<div style={{ padding: "16px" }}>
<p>Ahh, that's much better</p>
</div>
</SlideDown>
<SlideDown open={booleanState}>
<div style={{ padding: "16px" }}>
<p>Ahh, that's much better</p>
</div>
</SlideDown>