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

如何用HTML和CSS实现点击触发弹窗并模糊背景卡片效果

解决方案

要实现点击「查看更多」弹出长描述弹窗并给背景卡片添加模糊效果,你需要补充弹窗的HTML结构、对应的CSS样式,再用JavaScript处理交互逻辑,同时修正HTML里的小问题。具体步骤如下:

1. 修正并完善HTML结构

  • 普通HTML里要使用class而非className(className是React专属语法)
  • 添加弹窗容器,包含长描述内容和关闭按钮
  • 将「查看更多」的链接改为按钮,方便绑定点击事件

修正后的HTML:

<div>
    <section>
        <div class="container">
            <div class="card">
                <div class="content">
                    <div class="contentBx">
                        <h2>>PR1</h2>
                        <p>PR1 is a health related tracker..<button class="see-more-btn">查看更多</button></p>
                    </div>
                </div>
            </div>
        </div>
    </section>
    <!-- 弹窗容器 -->
    <div class="modal">
        <div class="modal-content">
            <button class="close-modal">&times;</button>
            <h3>PR1 详细介绍</h3>
            <p>这里是PR1的长描述内容:PR1是一款专注于健康数据追踪的应用,支持记录心率、步数、睡眠质量等多种健康指标,还能生成个性化的健康报告,帮助你更好地管理自己的身体健康。</p>
        </div>
    </div>
</div>

2. 补充弹窗与交互的CSS样式

添加弹窗的基础样式,设置默认隐藏状态,同时优化模糊效果的过渡动画:

* {
    margin: 0;
    padding: 0;
    box-sizing: border-box;
}

.container {
    position: relative;
    z-index: 1;
    display: flex;
    justify-content: left;
    align-items: left;
    flex-wrap: wrap;
    margin: 40px 0;
}

.container .card {
    position: relative;
    width: 300px;
    height: 400px;
    background: rgba(255, 255, 255, 0.05);
    margin: 20px;
    box-shadow: 0 15px 35px rgba(0, 0, 0, 0.5);
    border-radius: 15px;
    display: flex;
    justify-content: center;
    align-items: center;
    backdrop-filter: blur(10px);
    transition: filter 0.3s ease; /* 添加模糊过渡动画 */
}

.container .card .content {
    position: relative;
    display: flex;
    justify-content: center;
    align-items: center;
    flex-direction: column;
    transition: 0.5s;
}

.container .card:hover .content {
    transform: translateY(-20px);
}

.container .card .content .contentBx h2 {
    color: #000000;
    text-transform: uppercase;
    letter-spacing: 2px;
    font-weight: 500;
    font-size: 18px;
    text-align: center;
    margin: 20px 0 10px;
    line-height: 1.1em;
}

.container .card .content .contentBx p {
    color: #000000;
    letter-spacing: 2px;
    font-weight: 500;
    font-size: 14px;
    text-align: left;
    margin: 20px 0 10px;
    line-height: 1.1em;
    padding-left: 15px;
}

.container .card .content .contentBx .see-more-btn {
    background: transparent;
    border: none;
    color: #0066cc;
    cursor: pointer;
    text-decoration: underline;
    font-size: 14px;
    margin-left: 5px;
}

.container .card .sci {
    position: absolute;
    bottom: 50px;
    display: flex;
}

.container .card .sci li {
    list-style: none;
    margin: 0 10px;
    transform: translateY(40px);
    transition: 0.5s;
    opacity: 0;
}

.container .card:hover .sci li {
    transform: translateY(0px);
    opacity: 1;
}

.container .card .sci li a {
    color: #000000;
    font-size: 20px;
}

.blur-filter {
    filter: blur(2px);
}

/* 弹窗样式 */
.modal {
    position: fixed;
    top: 0;
    left: 0;
    width: 100%;
    height: 100%;
    background: rgba(0, 0, 0, 0.5);
    display: none; /* 默认隐藏弹窗 */
    justify-content: center;
    align-items: center;
    z-index: 1000; /* 确保弹窗在最上层 */
}

.modal.active {
    display: flex; /* 显示弹窗 */
}

.modal-content {
    background: white;
    padding: 25px;
    border-radius: 10px;
    width: 80%;
    max-width: 500px;
    position: relative;
}

.close-modal {
    position: absolute;
    top: 10px;
    right: 15px;
    font-size: 24px;
    border: none;
    background: transparent;
    cursor: pointer;
    color: #666;
}

.modal-content h3 {
    margin-bottom: 15px;
    color: #333;
}

.modal-content p {
    color: #555;
    line-height: 1.6;
}

3. 添加JavaScript处理交互逻辑

绑定点击事件,控制弹窗的显示/隐藏以及卡片的模糊效果:

const seeMoreBtn = document.querySelector('.see-more-btn');
const modal = document.querySelector('.modal');
const closeModalBtn = document.querySelector('.close-modal');
const card = document.querySelector('.card');

// 点击查看更多:显示弹窗,给卡片加模糊
seeMoreBtn.addEventListener('click', () => {
    modal.classList.add('active');
    card.classList.add('blur-filter');
});

// 点击关闭按钮:隐藏弹窗,移除卡片模糊
closeModalBtn.addEventListener('click', () => {
    modal.classList.remove('active');
    card.classList.remove('blur-filter');
});

// 点击弹窗背景:同样关闭弹窗
modal.addEventListener('click', (e) => {
    if (e.target === modal) {
        modal.classList.remove('active');
        card.classList.remove('blur-filter');
    }
});

关键说明

  • 修复了className的语法错误,普通HTML必须使用class属性
  • 弹窗采用固定定位覆盖整个视口,默认隐藏,添加active类后触发显示
  • 通过给卡片添加blur-filter类实现模糊效果,配合CSS过渡动画让效果更流畅
  • 覆盖了多种关闭弹窗的场景:点击关闭按钮、点击弹窗背景

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.07 08:35:21