原生 <details> 折叠块:标题行左侧主色 + / −,展开后标题行加底色和分隔线。常见问题、档案、默认收起的长表格。正文里编辑手写的 mw-collapsible 是另一回事,这里是模板 / 小部件用的。
基本
Vue 版照 Naive UI 叫 AkCollapse + AkCollapseItem(同 n-collapse):v-model 是展开项 name 的数组;标题用 title 或 #header 插槽,展开内容写在默认插槽里(正文排版照常生效)。
手风琴
accordion:同一时间只展开一项,展开一项时收起其他。
键盘与可访问性
每项就是原生 <details> + <summary>:按钮语义、展开状态、Enter / 空格开合都是浏览器给的,不另加 aria-expanded;页内查找(Ctrl+F)命中收起的内容时浏览器会自动展开,v-model 跟着同步。<summary> 带 aria-controls 指向内容区。另外补了 WAI-ARIA Accordion 的可选键盘支持:
| 键 | 行为 |
|---|---|
Enter / 空格 | 展开 / 收起当前项 |
↓ / ↑ | 移到下一项 / 上一项的标题(首尾循环) |
Home / End | 第一项 / 最后一项的标题 |
Vue API
AkCollapse
| 属性 | 类型 | 默认 | 说明 |
|---|---|---|---|
accordion | boolean | false | 手风琴:同一时间只展开一项(展开一项时收起其他) |
modelValue | CollapseName[] | [] | 展开项的 name 数组 |
| 事件 | 参数 | 说明 |
|---|---|---|
update:modelValue | [value: CollapseName[]] |
| 插槽 | 说明 |
|---|---|
default | 若干 AkCollapseItem |
AkCollapseItem
| 属性 | 类型 | 默认 | 说明 |
|---|---|---|---|
name | CollapseName | — | 标识,= AkCollapse 的 v-model 数组里的值;不写时自动生成(只能靠点击开合) |
title | string | — | 标题;要放图标 / 标签时改用 #header 插槽 |
| 插槽 | 说明 |
|---|---|
header | 标题(代替 title) |
default | 展开后的内容(正文排版照常生效) |
CSS 实现
模板直接输出 <details>,不需要脚本;要默认展开写 open。
| 块 | 元素 __ | 修饰 -- |
|---|
