SlideDown
Expand or collapse an element with a height transition
import SlideDown from "@intility/bifrost-react/SlideDown";SlideDown
Go to top
Animate height
Animating height is tricky because CSS can't transition to keyword auto,
this component creates two wrapper divs 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:
TSX
<SlideDown open={booleanState}>
<p>My content...</p>
</SlideDown>Combined with <Button.Expand> you can create
expandable content like this;
TSX
<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
TSX
<SlideDown open={booleanState} style={{ padding: "16px" }}>
<p>Will not be hidden properly :(</p>
</SlideDown>Instead apply padding to a container around your content
TSX
<SlideDown open={booleanState}>
<div style={{ padding: "16px" }}>
<p>Ahh, that's much better</p>
</div>
</SlideDown>Sandbox
import { useState } from "react"; import SlideDown from "@intility/bifrost-react/SlideDown"; import Button from "@intility/bifrost-react/Button"; export default function () { const [expanded, setExpanded] = useState(true); return ( <> <Button.Expand onClick={() => setExpanded(!expanded)} open={expanded}> Click here to toggle the content below </Button.Expand> <SlideDown open={expanded} className="bf-content"> <p> "I really wish I had my hammer." <br /> "Hammer?" <br /> "Quite unique. It was made from this special metal from the heart of a dying star. And when I spun it really, really fast it gave me the ability to fly." <br /> "You rode a hammer?" <br /> "No, I didn’t ride the hammer." <br /> "The hammer rode you on your back?" <br /> "No. I used to spin it really fast, and it would pull me off the..." <br /> "Oh, my God. The hammer pulled you off?" <br /> "The ground. It would pull me off the ground, up into the air, and I would fly. Every time I threw it, it would always come back to me." <br /> "Sounds like you had a pretty special and intimate relationship with this hammer and that losing it was almost comparable to losing a loved one." <br /> "That’s a nice way of putting it. </p> </SlideDown> <p className="bf-p">following content will be pushed down</p> </> ); }