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

如何用CSS实现卡片内图片的鼠标悬停切换效果?

实现卡片内图片悬停切换的方案

方法一:纯CSS实现(无需JavaScript)

这种方法无需修改卡片核心结构,仅通过在图片容器内添加第二张图片,利用CSS控制悬停时的显示状态,完全不影响卡片本身样式。

修改后的HTML代码

<div class="container">
    <div class="row row-cols-1 row-cols-sm-2 row-cols-md-3 g-6">
        <!-- 1 Alexis -->
        <div class="col" style="margin-bottom: 2rem;">
            <div class="card card-team h-100">
                <!-- 新增图片容器,用于控制两张图片的层级与显示 -->
                <div class="image-hover-container" style="text-align: center; position: relative; display: inline-block;">
                    <!-- 原图片 -->
                    <img src="./src/img/nosotros/AlexisSanchez.jpeg"
                        style="width: 150px; height: 150px; margin-top: 1rem;box-shadow: 2px 2px 2px 1px rgba(0, 0, 0, 0.1);"
                        class="img-fluid rounded" alt="Alexis">
                    <!-- 悬停显示的图片,默认隐藏 -->
                    <img src="./src/img/nosotros/AlexisSanchez-hover.jpeg"
                        style="width: 150px; height: 150px; margin-top: 1rem;box-shadow: 2px 2px 2px 1px rgba(0, 0, 0, 0.1); position: absolute; top: 0; left: 0; opacity: 0; transition: opacity 0.3s ease;"
                        class="img-fluid rounded" alt="Alexis 悬停">
                </div>
                <div class="card-body">
                    <div class="title__card">
                        <span>Alexis Sánchez León</span>
                    </div>
                    <div class="subtitle__card">
                        <span>Desarrollador Java | Ing. Industrial</span>
                    </div>
                    <p class="card-text" style="text-align: justify;">Soy un desarrollador Java, enfocado en
                        el frontend y en la gestión de proyectos con el marco de trabajo SCRUM para la
                        entrega de valor oportuna.</p>
                </div>
                <!-- redes sociales -->
                <div class="social__media card-footer ">
                    <a href="https://github.com/ALEXISSL10" target="_blank"><span><i
                                class="bi bi-github social__media__icon"></i></span></a>
                    <a href="https://www.linkedin.com/in/alexis-s%C3%A1nchez-le%C3%B3n"
                        target="_blank"><span><i class="bi bi-linkedin social__media__icon"></i></span></a>
                </div>
            </div>
        </div>
    </div>
</div>

配套CSS样式(可放在<style>标签或外部样式表)

/* 悬停时切换两张图片的透明度,实现平滑过渡 */
.image-hover-container:hover img:first-child {
    opacity: 0;
}
.image-hover-container:hover img:last-child {
    opacity: 1;
}

注:建议将图片容器的内联样式移到CSS类中,让代码更整洁。

方法二:JavaScript实现(修改图片src属性)

如果不想添加额外图片标签,可以通过监听鼠标事件直接修改原图片的src属性,同样不会改动卡片本身结构。

修改后的HTML代码(仅给图片添加标识类与悬停图地址)

<div class="container">
    <div class="row row-cols-1 row-cols-sm-2 row-cols-md-3 g-6">
        <!-- 1 Alexis -->
        <div class="col" style="margin-bottom: 2rem;">
            <div class="card card-team h-100">
                <div style="text-align: center;">
                    <!-- 添加类与data属性存储悬停图地址 -->
                    <img src="./src/img/nosotros/AlexisSanchez.jpeg"
                        style="width: 150px; height: 150px; margin-top: 1rem;box-shadow: 2px 2px 2px 1px rgba(0, 0, 0, 0.1);"
                        class="img-fluid-hover img-fluid rounded" alt="Alexis"
                        data-hover-src="./src/img/nosotros/AlexisSanchez-hover.jpeg">
                </div>
                <div class="card-body">
                    <div class="title__card">
                        <span>Alexis Sánchez León</span>
                    </div>
                    <div class="subtitle__card">
                        <span>Desarrollador Java | Ing. Industrial</span>
                    </div>
                    <p class="card-text" style="text-align: justify;">Soy un desarrollador Java, enfocado en
                        el frontend y en la gestión de proyectos con el marco de trabajo SCRUM para la
                        entrega de valor oportuna.</p>
                </div>
                <!-- redes sociales -->
                <div class="social__media card-footer ">
                    <a href="https://github.com/ALEXISSL10" target="_blank"><span><i
                                class="bi bi-github social__media__icon"></i></span></a>
                    <a href="https://www.linkedin.com/in/alexis-s%C3%A1nchez-le%C3%B3n"
                        target="_blank"><span><i class="bi bi-linkedin social__media__icon"></i></span></a>
                </div>
            </div>
        </div>
    </div>
</div>

JavaScript代码(放在<body>末尾或外部JS文件)

// 获取所有需要悬停切换的图片
const hoverImages = document.querySelectorAll('.img-fluid-hover');

hoverImages.forEach(img => {
    const originalSrc = img.src;
    const hoverSrc = img.dataset.hoverSrc;

    // 鼠标移入时切换为悬停图
    img.addEventListener('mouseover', () => {
        img.src = hoverSrc;
    });

    // 鼠标移出时恢复原图
    img.addEventListener('mouseout', () => {
        img.src = originalSrc;
    });
});

以上两种方案均只针对图片元素操作,不会改动卡片本身的结构与样式,完全满足需求。

内容的提问来源于stack exchange,提问作者ROBERTO RIVAS MONZON

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.13 18:53:15