如何为动态宽度内容设置动画?

时间:2019-02-21 00:36:37

标签: javascript css animation flexbox css-animations

比方说,我们有一个带有输入字段的按钮,其中输入字段不断增长以占据可用空间:

enter image description here

单击按钮后,按钮旁边会显示其他上下文:

enter image description here

内容的宽度是动态的-我们无法对其进行硬编码。输入自然缩小。

您如何为动态内容的外观设置动画,使其从按钮后面滑动?

我正在寻找CSS动画解决方案。

Playground

1 个答案:

答案 0 :(得分:2)

您可以使用关键帧动画来执行此操作。关键是将最大宽度设置为大于元素的大小。请注意,动画时间会考虑总的最大宽度。

CSS

.test {
  animation-name: test;
  animation-duration: 1s;
  animation-direction: forwards;
  overflow: hidden;
  white-space: nowrap
}
@keyframes test {
  0% {
    max-width: 0px
  }
  100% {
    max-width: 200px;
  }
}

然后您只需要将类添加到动态对象

function App() {
  const [isOpen, setIsOpen] = useState(false);

  return (
    <div className="container">
      <button onClick={() => setIsOpen(!isOpen)}>
        {isOpen ? "Hide" : "Show"}
      </button>
      {isOpen && <div class='test'>Dynamic Content</div>}
      <input type="text" />
    </div>
  );
}

您可以根据需要切换动画的持续时间,并使其在删除时发生,但我会留给您玩。

https://codesandbox.io/s/6wj6z1ppxr