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

React项目中Tailwind CSS的ease-in-out过渡失效及背景屏蔽需求

弹窗过渡失效与背景操作屏蔽解决方案

一、修复淡入过渡效果

过渡不生效的核心原因是初始状态未设置可过渡的隐藏属性,display: none无法触发CSS过渡,必须用opacity和visibility组合控制:

  1. 弹窗初始样式(隐藏状态):
<div id="exit-modal" class="fixed inset-0 flex items-center justify-center bg-black/50 opacity-0 invisible transition-all ease-in-out duration-300">
  <!-- 弹窗内容 -->
  <div class="bg-white p-6 rounded-lg">
    <p>确认退出吗?</p>
    <button id="cancel-btn">取消</button>
  </div>
</div>
  • opacity-0:初始完全透明
  • invisible:初始不可见(避免点击穿透)
  • transition-all:对所有属性应用过渡
  1. JavaScript控制显示/隐藏:
const exitBtn = document.getElementById('exit-btn');
const exitModal = document.getElementById('exit-modal');
const cancelBtn = document.getElementById('cancel-btn');

// 显示弹窗
exitBtn.addEventListener('click', () => {
  exitModal.classList.remove('opacity-0', 'invisible');
});

// 隐藏弹窗
cancelBtn.addEventListener('click', () => {
  exitModal.classList.add('opacity-0', 'invisible');
});

二、屏蔽背景操作(禁止滚动)

通过给body添加/移除overflow-hidden类实现:

修改JavaScript代码,在弹窗显示时给body加类,隐藏时移除:

// 显示弹窗
exitBtn.addEventListener('click', () => {
  exitModal.classList.remove('opacity-0', 'invisible');
  document.body.classList.add('overflow-hidden');
});

// 隐藏弹窗
cancelBtn.addEventListener('click', () => {
  exitModal.classList.add('opacity-0', 'invisible');
  document.body.classList.remove('overflow-hidden');
});
  • overflow-hidden会让body的滚动条消失,同时禁止页面滚动

额外注意事项

  • 如果弹窗原先是用display: none控制,必须替换成opacity+visibility的组合,因为display属性不支持CSS过渡
  • 若使用React/Vue等框架,逻辑一致:通过状态切换对应的类即可

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.12 07:34:53