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

React组件重叠问题:Banner组件覆盖AboutUs组件咨询

组件重叠问题的解决方案

问题根源

Banner组件里的<img>和所有子元素都用了absolute定位,而父容器<div className="relative">没有设置高度——绝对定位元素会脱离文档流,不占据父容器空间,导致父容器高度为0。后续的AboutUs组件会从文档流顶部开始渲染,看起来就像是被Banner的绝对定位元素覆盖了。

修复方案

有两种常用的解决办法:

方法一:给父容器设置与图片匹配的高度

既然图片已经定义了h-80 md:h-96的高度,直接把这个高度加到父容器上,让父容器占据对应空间:

function Banner() {
  return (
    <>
      {/* 新增h-80 md:h-96,和图片高度对齐 */}
      <div className="relative h-80 md:h-96">
        <img
          className="w-full h-full object-cover object-center absolute brightness-75"
          alt="banner"
          src={bannerImage}
        />
        <div className="absolute bg-white top-2 left-2 md:top-5 md:left-5 bg-transparent border border-solid cursor-default hover:scale-110 transition-all duration-300 hover:opacity-30 border-white">
          <h1 className=" text-sm md:text-xl font-semibold md:px-5 md:py-2 px-2 py-1">
            FAMILY LAW
          </h1>
        </div>
        <div className="absolute top-1/2 left-1/2 transform -translate-x-1/2 translate-y-12 md:translate-y-28">
          <h2 className="text-center font-medium text-white">
            We Always <span className=" text-[#E5912E]">care</span> about our
            client <span className=" text-[#E5912E]">satisfaction</span>
          </h2>
          <br />
          <p className="font-bold text-xl md:text-4xl text-center text-white transition-all duration-300">
            <span className=" text-[#E5912E]">JUSTICE</span> FOR ALL
          </p>
          <br />
          <div className="flex space-x-2 justify-center">
            <div className="bg-[#E5912E] px-3 py-1 rounded-sm cursor-pointer">
              <h2 className="text-white text-sm text-center">Know More</h2>
            </div>
            <div className="bg-transparent border border-solid px-4 py-1 rounded-sm cursor-pointer">
              <h2 className="text-white text-sm text-center">About us</h2>
            </div>
          </div>
        </div>
      </div>
    </>
  );
}

方法二:移除图片的absolute定位

如果不需要图片保持绝对定位,直接去掉absolute类,让图片占据正常文档流空间,父容器会自动被图片撑起高度:

function Banner() {
  return (
    <>
      <div className="relative">
        <img
          {/* 移除absolute类 */}
          className="w-full h-80 md:h-96 object-cover object-center brightness-75"
          alt="banner"
          src={bannerImage}
        />
        <div className="absolute bg-white top-2 left-2 md:top-5 md:left-5 bg-transparent border border-solid cursor-default hover:scale-110 transition-all duration-300 hover:opacity-30 border-white">
          <h1 className=" text-sm md:text-xl font-semibold md:px-5 md:py-2 px-2 py-1">
            FAMILY LAW
          </h1>
        </div>
        <div className="absolute top-1/2 left-1/2 transform -translate-x-1/2 translate-y-12 md:translate-y-28">
          <h2 className="text-center font-medium text-white">
            We Always <span className=" text-[#E5912E]">care</span> about our
            client <span className=" text-[#E5912E]">satisfaction</span>
          </h2>
          <br />
          <p className="font-bold text-xl md:text-4xl text-center text-white transition-all duration-300">
            <span className=" text-[#E5912E]">JUSTICE</span> FOR ALL
          </p>
          <br />
          <div className="flex space-x-2 justify-center">
            <div className="bg-[#E5912E] px-3 py-1 rounded-sm cursor-pointer">
              <h2 className="text-white text-sm text-center">Know More</h2>
            </div>
            <div className="bg-transparent border border-solid px-4 py-1 rounded-sm cursor-pointer">
              <h2 className="text-white text-sm text-center">About us</h2>
            </div>
          </div>
        </div>
      </div>
    </>
  );
}

方案说明

  • 方法一适合需要保留图片绝对定位的场景(比如后续要在图片上叠加更多元素);
  • 方法二更简洁,适合仅用图片做背景、叠加文字的常规场景。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.27 15:02:17