You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用Tailwind CSS实现容器hover时元素的平滑移动动画?

问题

我有一个div,hover时会改变尺寸,内部包含两个仅在div较大时才能容纳的元素。其中一个元素在父div未被hover时通过position: absolute隐藏;当父div被hover时该元素显示,但第二个元素会被瞬间挤到div边缘。如何让第二个元素以ease等方式平滑移动?

以下是复现的简化版本:

HTML代码

<div id="main">
  <div id="one"></div>
  <div id="second"></div>
</div>

原CSS代码

@import "tailwindcss";

@theme {
}

@keyframes make-small {
  from {
    width: 450px;
  }

  to {
    width: 250px;
  }
}

@keyframes asd {
  from {
    position: static;
    opacity: 100;
  }

  to {
    position: absolute;
    opacity: 0;
  }
}

#main {
  width: 450px;
  height: 200px;
  border: solid 1px black;
  margin: 100px;
  display: flex;
  justify-content: space-around;
}

#one {
  width: 200px;
  height: 200px;
  border: solid 1px red;
}

#second {
  position: static;
  visibility: visible;
  width: 200px;
  height: 200px;
  border: solid 1px blue;
}

#main:hover {
  animation-duration: 1s;
  animation-name: make-small;
  animation-fill-mode: forwards;
}

#main:hover #second {
  animation-duration: 1s;
  animation-name: asd;
  animation-fill-mode: forwards;
}

需求:实现蓝色方块消失后,红色方块平滑移动到父div中间位置,使用Tailwind CSS完成。


解决方案

核心问题是你用动画修改了不可过渡的position属性,且父容器尺寸变化与子元素状态切换的节奏不同步。用Tailwind内置的过渡类可以更简洁地实现平滑效果:

步骤1:调整HTML结构,添加Tailwind基础类

<div id="main" class="w-[450px] h-[200px] border border-black m-[100px] flex justify-around transition-all duration-1000 relative">
  <div id="one" class="w-[200px] h-[200px] border border-red transition-all duration-1000"></div>
  <div id="second" class="w-[200px] h-[200px] border border-blue opacity-100 transition-all duration-1000 absolute right-[-200px]"></div>
</div>

步骤2:用Tailwind hover类实现状态切换

@import "tailwindcss";

@theme {
}

#main:hover {
  @apply w-[250px];
}

#main:hover #one {
  @apply mx-auto;
}

#main:hover #second {
  @apply opacity-0 right-[-300px];
}

实现原理

  • 父容器#main添加transition-all duration-1000,让宽度变化平滑过渡
  • 蓝色方块#second默认用absolute定位到容器外,通过opacity和right属性的过渡实现平滑消失(这两个属性支持CSS过渡)
  • 红色方块#one在hover时添加mx-auto,配合父容器的宽度变化,通过transition-all实现平滑居中移动
  • 统一过渡时长为1000ms,保证所有动画节奏同步

内容的提问来源于stack exchange,提问作者havaka

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.14 11:01:09