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

如何在悬停时切换图片且不破坏并排布局的容器?

悬停切换图片的实现方案

纯CSS实现(推荐)

完全可以用纯CSS实现你要的悬停切换效果,不需要JS。核心思路是把两张图片放在同一个容器内,通过定位让它们重叠,利用:hover伪类配合过渡动画切换显示状态。

修改后的HTML

给图片容器添加第二张图片,确保两张图都在.easter-egg里:

<section class="blu">
    <div class="container reveal">
        <div class=" box1">
            <h1 class="revealsl fix">big test</h1>
            <p ></p> 
            <div class="revealsl fix buffer" id="line1">
                <span id="a"><p>test</p></span><span id="b">A secret website easter egg!<br> </span>
            </div>
            <button class="button" style="vertical-align:middle"><span>button </span></button>
        </div>
      <div class="box2">
        <div class="easter-egg">
            <img src="https://images.saymedia-content.com/.image/ar_1:1%2Cc_fill%2Ccs_srgb%2Cfl_progressive%2Cq_auto:eco%2Cw_1200/MTk2NzY3MjA5ODc0MjY5ODI2/top-10-cutest-cat-photos-of-all-time.jpg" class="home-pic main-img">
            <img src="替换为你的hover图片地址" class="home-pic hover-img">
          </div>
      </div>
</section>

修改后的CSS

给.easter-egg设置相对定位,让两张图片绝对重叠,通过opacity和transition实现平滑过渡:

/* 新增的CSS */
.easter-egg {
    position: relative;
    height: 100%;
    width: 100%;
}

.home-pic {
    position: absolute;
    top: 0;
    left: 0;
    height: 100%;
    width: 100%;
    object-fit: cover; /* 保持图片比例填充容器 */
    transition: opacity 0.3s ease; /* 平滑过渡效果 */
}

.hover-img {
    opacity: 0; /* 默认隐藏hover图 */
}

.easter-egg:hover .main-img {
    opacity: 0; /* 悬停时隐藏主图 */
}

.easter-egg:hover .hover-img {
    opacity: 1; /* 悬停时显示hover图 */
}

/* 保留你原有的其他CSS */
.blu {
    background: #3D5A6C;
    position: relative;
}

.box1{
    height: 500px;
    width: 500px;
    background: #B287A3; 
    text-align: center;   
    justify-content: center;
}
.box1 h1 {
      margin: 0px;
      padding: 0px;
      margin-top: 175px;

}
.box2{
    height: 500px;
    width: 500px;
    overflow: hidden; /* 防止图片溢出 */
}
      
.container {
    background: #3D5A6C;
    display: flex;
    justify-content: center;
    padding: 5%;
    column-gap:20px;
}
      
.container box2, box1 {
    padding: 2%;
}

  .button {
    display: inline-block;
    border-radius: 4px;
    background-color: #433A3F;
    border: none;
    color: #FFFFFF;
    text-align: center;
    font-size: 20px;
    padding: 10px;
    width: 200px;
    transition: all 0.5s;
    cursor: pointer;
    margin: 2px;
    overflow: hidden;
  }
  
  .button span {
    cursor: pointer;
    display: inline-block;
    position: relative;
    transition: 0.5s;
  }
  
  .button span:after {
    content: '\2708';
    position: absolute;
    opacity: 0;
    top: 0;
    right: -20px;
    transition: 0.5s;
  }
  
  .button:hover span {
    padding-right: 25px;
  }
  
  .button:hover span:after {
    opacity: 1;
    right: 0;
}
.sev-won {
    text-decoration: none;

}
  div#line1 span#a {
    display: inline;
  }
  
  div#line1:hover span#a {
    display: none;
  }
  
  div#line1 span#b {
    display: none;
    text-align: center;
  }
  
  div#line1:hover span#b {
    display: inline;
  }

这样就能实现主图→悬停显示hover图→离开恢复主图的平滑切换效果,完全符合你的需求。


JavaScript实现方案

如果一定要用JS实现,思路是监听容器的mouseenter和mouseleave事件,切换图片的src或者控制图片的显示状态。

修改后的HTML(只保留一张图)

<section class="blu">
    <div class="container reveal">
        <div class=" box1">
            <h1 class="revealsl fix">big test</h1>
            <p ></p> 
            <div class="revealsl fix buffer" id="line1">
                <span id="a"><p>test</p></span><span id="b">A secret website easter egg!<br> </span>
            </div>
            <button class="button" style="vertical-align:middle"><span>button </span></button>
        </div>
      <div class="box2">
        <div class="easter-egg">
            <img src="https://images.saymedia-content.com/.image/ar_1:1%2Cc_fill%2Ccs_srgb%2Cfl_progressive%2Cq_auto:eco%2Cw_1200/MTk2NzY3MjA5ODc0MjY5ODI2/top-10-cutest-cat-photos-of-all-time.jpg" class="home-pic" id="swap-img">
          </div>
      </div>
</section>

JavaScript代码(基础版)

const imgElement = document.getElementById('swap-img');
const mainSrc = imgElement.src;
const hoverSrc = '替换为你的hover图片地址';

imgElement.parentElement.addEventListener('mouseenter', () => {
    imgElement.src = hoverSrc;
});

imgElement.parentElement.addEventListener('mouseleave', () => {
    imgElement.src = mainSrc;
});

JavaScript代码(带平滑过渡)

如果想要平滑过渡,可以预加载图片并配合opacity动画:

const imgElement = document.getElementById('swap-img');
const mainSrc = imgElement.src;
const hoverSrc = '替换为你的hover图片地址';

// 预加载hover图片,避免切换时加载延迟
const hoverImg = new Image();
hoverImg.src = hoverSrc;

imgElement.parentElement.addEventListener('mouseenter', () => {
    imgElement.style.opacity = '0';
    setTimeout(() => {
        imgElement.src = hoverSrc;
        imgElement.style.opacity = '1';
    }, 300); // 对应CSS过渡时间
});

imgElement.parentElement.addEventListener('mouseleave', () => {
    imgElement.style.opacity = '0';
    setTimeout(() => {
        imgElement.src = mainSrc;
        imgElement.style.opacity = '1';
    }, 300);
});

同时给图片添加CSS过渡:

.home-pic {
    transition: opacity 0.3s ease;
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.12 01:12:33