【问题标题】:How to make a flex-box container smoothly resize when items are not rendered?未渲​​染项目时如何使弹性盒容器平滑调整大小?
【发布时间】:2021-04-16 20:11:03
【问题描述】:

我想在 flex-box 容器中为自动高度创建一个过渡。 我有一个包含名称、积分、状态和警报的用户栏。

有时会呈现警报消息,有时不会。它使用display: none 我想要实现的是在我单击警报消息时平滑地调整 flex-box 容器的高度和过渡。

这是一个基本示例(不工作)

const $user_alert = document.querySelector('user-alert')

$user_alert.onclick = () => {
    $user_alert.classList.add('hide')
  setTimeout(() => $user_alert.classList.remove('hide'), 1e3)
}
body {
  display: flex;
  width: 100vw;
  height: 100vh;
  margin: 0;
  background-color: aliceblue;
}

user-bar {
  width: 100%;
  display: flex;
  flex-direction: column;
  align-items: center;
  justify-content: center;
  transition: all 2s ease-in-out;
}

user-alert {
  cursor: pointer;
  color: red;
}

.hide {
  display: none;
}
<user-bar>
  <user-name>Albert Einstein</user-name>
  <user-points>10000</user-points>
  <user-status>on</user-status>
  <user-alert>Time to Party Hard</user-alert>
</user-bar>

如果不为用户栏中的每个元素定义高度,我无法弄清楚如何创建简单的过渡...也许使用 display: none 是不可能的。

任何帮助或想法将不胜感激!

【问题讨论】:

  • 这能回答你的问题吗? CSS Opacity transition with display: none
  • 将不需要动画,只需将display: none;.hide 类替换为`可见性:隐藏;`。这可能会有所帮助:codepen.io/manaskhandelwal1/pen/zYKJbPq
  • Manas,这是另一种选择,谢谢。我想避免保留用户警报消息的空间。
  • disinfor,答案是关注具有display: none 的元素,谢谢,但我想平滑地调整容器的高度,独立于其项目转换或者可能无法独立。

标签: html css flexbox css-animations css-transitions


【解决方案1】:
  1. dispaly: none 更改为transform: scale(0)
  2. 除了display: flex 添加transform: scale(1) 让我们知道这是否有效!

【讨论】:

  • 非常感谢,答案很好,但我不允许在该组件中更改 display: none
  • 投票给一个很好的答案:)
  • 没问题,但你能帮帮我吗?保持display: none
  • 您不能对布尔属性进行转换。见这里stackoverflow.com/questions/3331353/…
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-02-24
  • 2023-04-10
  • 1970-01-01
  • 1970-01-01
  • 2017-10-03
相关资源
最近更新 更多