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

如何避免transform:scale放大时CSS动画与元素重叠?

问题解决:图片scale动画溢出覆盖下方元素的处理

问题分析

用transform: scale()做图片放大动画时,元素会生成独立堆叠上下文,常规z-index无法跨上下文调整层级。同时图片父容器#div1未设置溢出限制,导致图片放大后超出容器范围,覆盖下方的#div2;而header处于main外部,默认堆叠顺序高于main内元素,所以图片会显示在header下方。

解决方案

  1. 给图片父容器#div1添加overflow: hidden,限制图片放大后的显示范围,避免溢出覆盖#div2
  2. 若要确保header始终在最上层,可给header设置position: relative和z-index(可选,默认顺序已满足需求)

修改后的完整代码

HTML

<header>
Header
</header>  

<main>
     <div id="div1">
        <img id="imgGrow" src="https://upload.wikimedia.org/wikipedia/commons/thumb/7/73/Lion_waiting_in_Namibia.jpg/1200px-Lion_waiting_in_Namibia.jpg">
      </div>
      <div id="div2">
      1<br>2<br>3<br>4<br>5<br>6
      </div>
</main>

CSS

main {
  width: 100%;
  height: 100vh;
  overflow-y: hidden;
}

header {
  background-color:yellow;
  padding: 20px;
  /* 可选:明确header堆叠层级,增强保障 */
  position: relative;
  z-index: 10;
}

#div1 {
  /* 核心修改:限制图片溢出范围 */
  overflow: hidden;
}

#div2 {
  height: 300px;
  background-color: blue;
  color: white;
}

#imgGrow {
  height: 100%;
  width: 100%;
  animation: imgGrow 2s ease forwards;
  object-fit: cover;
}
        
@keyframes imgGrow {
  0% {
    transform: scale(1.0);
  }
  100% {
    transform: scale(1.5);
  }
}

JavaScript

document.addEventListener("DOMContentLoaded", function() {  
  document.getElementById("div1").style.height = window.innerHeight 
   - document.querySelector("header").offsetHeight
   - document.getElementById("div2").offsetHeight
   + "px";
});

关键修改说明

  • #div1新增overflow: hidden:图片放大时仅在容器内显示,不会溢出到#div2区域
  • header的position和z-index设置:明确堆叠优先级,确保不会被main内元素覆盖(默认顺序已生效,此为可选增强配置)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.30 04:20:22