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

如何用CSS实现子元素hover时带动画的缩放显示与隐藏?

高效CSS解决方案

直接用CSS伪类结合关键帧动画就能实现,核心是利用:hover控制动画触发,配合animation-fill-mode保持动画结束后的状态。

1. 先定义两个关键帧动画

@keyframes Growth {
  from {
    transform: scale(0);
    opacity: 0;
  }
  to {
    transform: scale(1);
    opacity: 1;
  }
}

@keyframes Shrink {
  from {
    transform: scale(1);
    opacity: 1;
  }
  to {
    transform: scale(0);
    opacity: 0;
  }
}

2. 设置基础样式

给父元素.wrapper__shopcart设置相对定位,确保子元素模态框能基于它定位;给.wrapper__shopcart-modal设置默认隐藏状态,同时指定动画的基础参数:

.wrapper__shopcart {
  position: relative;
  /* 可按需添加宽度、高度、cursor: pointer等样式 */
}

.wrapper__shopcart-modal {
  position: absolute;
  /* 按需调整位置,比如top: 100%, right: 0 */
  top: 100%;
  right: 0;
  transform: scale(0);
  opacity: 0;
  animation-duration: 0.3s;
  animation-timing-function: ease;
  animation-fill-mode: forwards; /* 动画结束后保持最终状态 */
}

3. 实现hover交互

通过:hover和:not(:hover)伪类分别触发显示、隐藏动画:

/* 鼠标悬停时,模态框执行Growth动画 */
.wrapper__shopcart:hover .wrapper__shopcart-modal {
  animation-name: Growth;
}

/* 鼠标移开时,模态框执行Shrink动画 */
.wrapper__shopcart:not(:hover) .wrapper__shopcart-modal {
  animation-name: Shrink;
}

补充优化(可选)

如果担心页面初始加载时模态框闪显,可以给模态框加上visibility属性,配合动画控制可见性:

@keyframes Growth {
  from {
    visibility: visible;
    transform: scale(0);
    opacity: 0;
  }
  to {
    visibility: visible;
    transform: scale(1);
    opacity: 1;
  }
}

@keyframes Shrink {
  from {
    visibility: visible;
    transform: scale(1);
    opacity: 1;
  }
  to {
    visibility: hidden;
    transform: scale(0);
    opacity: 0;
  }
}

.wrapper__shopcart-modal {
  /* 其他样式不变 */
  visibility: hidden;
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.20 21:32:09