【问题标题】:Applying transition on flexbox justify-content property在 flexbox justify-content 属性上应用过渡
【发布时间】:2016-12-29 02:08:14
【问题描述】:

我有一个 CSS 类,在悬停时应该将 justify-content 属性从 center 更改为 flex-start,延迟 1 秒。

所以一切正常,除了justify-content之外,一切都被推迟了。

.menuItem:hover {
    transition-property: all;
    transition-delay: 1s;
    justify-content: flex-start;
}

我做错了吗?如果是这样,我该如何实现这种行为?

【问题讨论】:

标签: css flexbox


【解决方案1】:

您可以使用两个弹性项目来实现您的目标,其中过渡位于“弹性”属性上。

.container {
  display: flex;
  justify-content: center;
  border: 1px solid gray;
}

.content {
  flex: 1;
  max-width: fit-content;
  border: 1px solid orangered;
}

.dummy {
  flex: 0;
  transition: flex 1s;
  border: 1px solid limegreen;
}

.container:hover .hovered {
  flex: auto;
}
<div class="container">

  <div class="content"> hover over me </div>
  
  <div class="dummy hovered" />
  
</div>

您好 Fabricio,此部分是针对您的问题。干杯

.container {
  display: flex;
  justify-content: center;
  border: 1px solid gray;
}

.content {
  width: fit-content;
  border: 1px solid orangered;
}

.dummy {
  transition: flex 1s;
  border: 1px solid limegreen;
}

.after {
  flex-grow: 1;
}

.before {
  flex-grow: 0;
}

.container:hover .before {
  flex-grow: 1;
}
<div class="container">

  <div class="dummy before" ></div>

  <div class="content"> hover over me </div>
  
  <div class="dummy after" ></div>
  
</div>

【讨论】:

  • 我喜欢你的解决方案(投票赞成),但你能反过来做吗(这是我需要的)?我尝试对您的技术进行逆向工程,并设法使其从左到中为文本设置动画,但不幸的是,一旦我将鼠标悬停,它就会跳回左侧(没有动画)。 :(
  • @Fabricio 嗨,伙计,我刚刚为您的问题添加了上面的另一个示例。
  • 它有一个额外的div,但我可以使用它。很好的工作。谢谢,伙计!
【解决方案2】:

您不能为“justify-content”设置动画,但如果您需要为元素设置动画以从一侧移动到另一侧,您可以这样做:

.parent {
   display: flex;
}

.menuItem:hover {
  flex: 1;
  animation: moveAnim .3s alternate 1;
}

@keyframes moveAnim {
  from { flex: none }
  to{ flex: 1 }
}

【讨论】:

    【解决方案3】:

    justify-content 不是可转换的属性。您可以找到兼容属性的完整列表here。所有未列出的属性都应该简单地捕捉到它们的新值。

    如果您碰巧只需要为单个元素设置动画,您可以尝试使用绝对定位。

    #wrapper {
        position: relative;
    }
    
    #element {
        position: absolute;
        left: 50%;
        transform: translateX(-50%);
        transition: all 300ms;
    }
    
    #element:hover {
        left: 0;
        transform: translateX(0);
    }
    

    请记住,这适用于多个元素。

    【讨论】:

    • @Pachu 我已经用解决方法更新了我的答案 - 假设您只有一个元素可以制作动画。
    • 嗨,我找到了一种完美的方法,这不是一种解决方法,我已经添加了一个答案,我会投票给你的答案,因为你帮助我找到了另一种方法。
    • 不错的替代行为。谢谢!
    • 很遗憾justify-content 不支持带过渡的补间。基于这个答案,我整理了一个代码笔,它使用.scss 创建动画来计算元素的停止点。 codepen.io/csalmeida/full/WLOvJw
    • 不要相信这个解决方案,translateX 会移动它的内容,但它会继续使用右边的空间,所以如果你在#element 正下方放置了一个按钮,它将无法点击
    猜你喜欢
    • 1970-01-01
    • 2017-05-24
    • 2014-07-25
    • 2022-11-13
    • 2019-04-27
    • 1970-01-01
    • 2022-01-15
    • 2017-01-26
    • 2014-12-11
    相关资源
    最近更新 更多