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

标签 javascript css animation flexbox css-animations

假设我们有一个带有输入字段的按钮,输入字段会增长以占据可用空间:

enter image description here

单击按钮时,按钮旁边会出现额外的上下文:

enter image description here

内容的宽度是动态的——我们不能硬编码。输入自然收缩。

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

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

Playground

最佳答案

您可以使用关键帧动画来做到这一点。关键是设置一个大于元素大小的 max-width。请注意,动画时间考虑了总的最大宽度。

CSS

.test {
  animation-name: test;
  animation-duration: 1s;
  animation-direction: forwards;
  overflow: hidden;
  white-space: nowrap;
}
@keyframes test {
  0% {
    max-width: 0;
  }
  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

关于javascript - 如何为动态宽度内容设置动画?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54797426/

相关文章:

javascript - 为什么在 ajax 或 javascript 函数调用后输入字段会被禁用?

iOS 允许在给定时间发生一次触摸事件

.net - 无法使用 css 更改内容/子页面控件

javascript - 轮播不自动滑动 JQuery 1.12.4 和 Bootstrap 3.3.6

silverlight - 如何在加载 silverlight 时淡入图像?

objective-c - 如何使用 CAMediaTimingFunction 映射自定义值?

javascript - 在 ES6 代码中扩展 EcmaScript 5 类

javascript - laravel 回声 : "Uncaught ReferenceError: Echo is not defined"

javascript - 如何阻止 Wordpress 页面跳转/滚动到 iframe?

jquery - 如何去除黄色行突出显示