⚡ 编程实验室🏗️ HTML🎨 CSS⚡ JavaScript🐍 Python🗄️ SQL☕ Java⚛️ React💚 Vue🟢 Node.js⚙️ C语言🐘 PHP🐹 Go🔷 TypeScript🐬 MySQL🔧 C++🎯 C#🦀 Rust🅱️ Bootstrap💡 jQuery🎸 Django🍃 MongoDB👗 Sass🎪 Kotlin📊 R语言📋 XML📊 Excel🐘 PostgreSQL🐳 Docker🅰️ Angular🎮 游戏🏠 网站首页

HTML 原生模态最佳实践

HTML原生模态实现(不使用UI库):dialog元素+showModal自动管理焦点和aria-modal、ESC关闭/lock background scroll/ inert属性配合、与React Portal/Vue Teleport模态对比 · 难度:入门 · +10XP

HTML 原生模态弹窗最佳实践

前面学了dialog和inert,现在把它们组合起来做一个完整的、无障碍友好的模态弹窗。

完整模板

<dialog id="modal" aria-labelledby="modalTitle">
  <h2 id="modalTitle">确认操作</h2>
  <p>你确定要执行此操作吗?</p>
  <form method="dialog">
    <button type="submit" value="cancel">取消</button>
    <button type="submit" value="confirm">确定</button>
  </form>
</dialog>

<script> modal.showModal(); main.setAttribute('inert', ''); modal.addEventListener('close', () => { main.removeAttribute('inert'); if (modal.returnValue === 'confirm') { /* 执行操作 */ } }); modal.addEventListener('click', (e) => { if (e.target === modal) modal.close(); // 点击遮罩关闭 }); </script>

模态弹窗设计清单

检查项实现方式
背景不可交互主内容区设inert
ESC关闭showModal()自动支持
焦点锁定showModal()自动支持
无障碍标题aria-labelledby
点击遮罩关闭click判断e.target===modal

动手练习

  1. 基础练习:复制模板做删除确认弹窗。
  2. 进阶应用:做登录弹窗——弹窗内表单,提交后处理登录,显示欢迎XXX。
  3. 项目实战:把项目中所有alert/confirm/prompt替换成dialog模态弹窗。

Ctrl+Enter
🚀 升级VIP
解锁全部课程+AI助手

🏆 学习排行

加载中...

📊 统计

📖 101 篇
0 完成
🔥 0