组件
Modal 对话框
对话框遮罩层;需 pivcss.min.js(Tab 焦点陷阱 + Esc 回到触发按钮)。
基础
确认删除
此操作不可撤销,是否继续?
<button type="button" class="pvs-btn pvs-btn--primary pvs-btn--sm" data-pvs-modal-open="demo-modal">打开 Modal</button>
<div class="pvs-modal" id="demo-modal">
<div class="pvs-modal__backdrop">
</div>
<div class="pvs-modal__dialog">
<div class="pvs-modal__header">
<h3 class="pvs-modal__title">确认删除</h3>
<button type="button" class="pvs-close" data-pvs-modal-close aria-label="关闭">×</button>
</div>
<div class="pvs-modal__body">
<p class="pvs-m-0">此操作不可撤销,是否继续?</p>
</div>
<div class="pvs-modal__footer">
<button type="button" class="pvs-btn pvs-btn--ghost" data-pvs-modal-close>取消</button>
<button type="button" class="pvs-btn pvs-btn--danger">删除</button>
</div>
</div>
</div>尺寸
对话框宽度:pvs-modal--sm / 默认 / --lg。
小号对话框
根元素 pvs-modal--sm
默认宽度
无尺寸修饰符时的标准宽度。
大号对话框
根元素 pvs-modal--lg,适合表单或宽表格。
<div class="pvs-flex pvs-gap-2 pvs-flex-wrap">
<button type="button" class="pvs-btn pvs-btn--outline pvs-btn--sm" data-pvs-modal-open="demo-modal-sm">小号</button>
<button type="button" class="pvs-btn pvs-btn--outline pvs-btn--sm" data-pvs-modal-open="demo-modal-md">默认</button>
<button type="button" class="pvs-btn pvs-btn--outline pvs-btn--sm" data-pvs-modal-open="demo-modal-lg">大号</button>
</div>
<div class="pvs-modal pvs-modal--sm" id="demo-modal-sm">
<div class="pvs-modal__backdrop">
</div>
<div class="pvs-modal__dialog">
<div class="pvs-modal__header">
<h3 class="pvs-modal__title">小号对话框</h3>
<button type="button" class="pvs-close" data-pvs-modal-close aria-label="关闭">×</button>
</div>
<div class="pvs-modal__body">
<p class="pvs-m-0 pvs-text-sm">根元素 <code>pvs-modal--sm</code>
</p>
</div>
<div class="pvs-modal__footer">
<button type="button" class="pvs-btn pvs-btn--ghost pvs-btn--sm" data-pvs-modal-close>关闭</button>
</div>
</div>
</div>
<div class="pvs-modal" id="demo-modal-md">
<div class="pvs-modal__backdrop">
</div>
<div class="pvs-modal__dialog">
<div class="pvs-modal__header">
<h3 class="pvs-modal__title">默认宽度</h3>
<button type="button" class="pvs-close" data-pvs-modal-close aria-label="关闭">×</button>
</div>
<div class="pvs-modal__body">
<p class="pvs-m-0">无尺寸修饰符时的标准宽度。</p>
</div>
<div class="pvs-modal__footer">
<button type="button" class="pvs-btn pvs-btn--ghost" data-pvs-modal-close>关闭</button>
</div>
</div>
</div>
<div class="pvs-modal pvs-modal--lg" id="demo-modal-lg">
<div class="pvs-modal__backdrop">
</div>
<div class="pvs-modal__dialog">
<div class="pvs-modal__header">
<h3 class="pvs-modal__title">大号对话框</h3>
<button type="button" class="pvs-close" data-pvs-modal-close aria-label="关闭">×</button>
</div>
<div class="pvs-modal__body">
<p class="pvs-m-0">根元素 <code>pvs-modal--lg</code>,适合表单或宽表格。</p>
</div>
<div class="pvs-modal__footer">
<button type="button" class="pvs-btn pvs-btn--ghost" data-pvs-modal-close>关闭</button>
</div>
</div>
</div>Full & scroll body
pvs-modal--full 全屏;pvs-modal--scroll 仅 body 区滚动。
可滚动正文
pvs-modal--scroll:header/footer 固定,body 溢出滚动。
…
…
…
<button type="button" class="pvs-btn pvs-btn--outline pvs-btn--sm" data-pvs-modal-open="demo-modal-scroll">长内容 Modal</button>
<div class="pvs-modal pvs-modal--scroll" id="demo-modal-scroll">
<div class="pvs-modal__backdrop">
</div>
<div class="pvs-modal__dialog">
<div class="pvs-modal__header">
<h3 class="pvs-modal__title">可滚动正文</h3>
<button type="button" class="pvs-close" data-pvs-modal-close aria-label="关闭">×</button>
</div>
<div class="pvs-modal__body">
<p class="pvs-m-0">pvs-modal--scroll:header/footer 固定,body 溢出滚动。</p>
<p class="pvs-mt-4">…</p>
<p class="pvs-mt-4">…</p>
<p class="pvs-mt-4">…</p>
</div>
<div class="pvs-modal__footer">
<button type="button" class="pvs-btn pvs-btn--primary pvs-btn--sm" data-pvs-modal-close>确定</button>
</div>
</div>
</div>结构
div.pvs-modal#id → backdrop + div.pvs-modal__dialog → header / body / footer
数据属性
| 类名 | 说明 |
|---|---|
data-pvs-modal-open | 值为 modal id |
data-pvs-modal-close | 关闭(按钮或遮罩逻辑由 JS 处理) |
类名速查
| 类名 | 说明 |
|---|---|
pvs-modal | 根(默认隐藏) |
pvs-modal__dialog | 对话框卡片 |
pvs-modal__header / __title | 标题区 |
pvs-modal__body | 正文 |
pvs-modal__footer | 底栏按钮区 |
pvs-modal--sm / --lg | 宽度 |
pvs-modal--full | 全屏对话框 |
pvs-modal--scroll | body 区滚动 |
Tab 陷阱 | 打开后焦点在对话框内循环 |
Esc | 关闭并焦点回到 data-pvs-modal-open 按钮 |
body.pvs-modal-open | 打开时锁滚动 |