【发布时间】:2022-01-30 01:16:10
【问题描述】:
我想要一个 flexbox(容器,而不是项目)动画/过渡,因为它可以拉伸和收缩以适应其中出现的不同数量的项目。有没有办法让这成为可能?我只能找到为其中的项目大小设置动画的解决方案,而不是 flexbox 本身。
请看下面场景的sn-p:
const { useState } = React
const App = () => {
const [showSecondDiv, setShowSecondDiv] = useState(true);
return (
<div>
<button onClick={() => setShowSecondDiv(!showSecondDiv)}>{(showSecondDiv? "Shrink" : "Expand") + " flexbox"}</button>
<div className="flex-container">
<div>Hello</div>
{showSecondDiv ? <div>World</div> : null}
</div>
</div>
)
}
ReactDOM.render(<App />,
document.getElementById("root"))
.flex-container {
border-style: solid;
display: flex;
flex-direction: column;
transition: grow 2s;
max-width: 100px;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/17.0.1/umd/react.production.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/react-dom/17.0.1/umd/react-dom.production.min.js"></script>
<div id="root">
<!-- This element's contents will be replaced with your component. -->
</div>
【问题讨论】:
-
我可以通过改变孩子的最大高度来产生你想要的行为,但我认为你不能通过使用 Flexbox 添加一个过渡。您可以添加
transition: all 2s并查看没有产生所需效果的过渡属性。你想让我回答那个实现吗? -
抱歉,我不确定我是否理解。通过改变最大高度的实现,你会产生我想要的行为(即,动画 flexbox 本身的收缩/扩展行为)吗?
-
我添加了答案。
标签: css flexbox css-transitions