跳过主内容
版本:v8

ion-accordion

阴影

手风琴在您的内容中提供可折叠的部分,以减少垂直空间,同时提供组织和分组信息的方法。所有 `ion-accordion` 组件都应分组在 `ion-accordion-group` 组件中。

基本用法

切换手风琴

哪个手风琴是打开的由设置 `ion-accordion-group` 上的 `value` 属性控制。设置此属性允许开发人员以编程方式展开或折叠某些手风琴。

监听手风琴状态更改

注意

大多数由其他组件(例如 InputTextarea)发出的 `ionChange` 事件会冒泡。结果,如果相关组件在手风琴内部使用,这些事件将冒泡并导致您在手风琴组上的 `ionChange` 监听器触发。

在手风琴内部使用发出 `ionChange` 的其他组件时,建议在手风琴组上具有 `ionChange` 回调以检查传递给回调的事件上的 `target` 键,以验证 `ionChange` 来自手风琴组而不是任何后代。

开发人员可以监听 `ionChange` 事件,以便在手风琴展开或折叠时收到通知。

控制台
从上面的示例中记录时,控制台消息将显示在此处。

多个手风琴

开发人员可以使用 `multiple` 属性允许一次打开多个手风琴。

禁用手风琴

单个手风琴

可以使用 `ion-accordion` 上的 `disabled` 属性禁用单个手风琴。

手风琴组

可以使用 `ion-accordion-group` 上的 `disabled` 属性禁用手风琴组。

只读手风琴

单个手风琴

可以使用 `ion-accordion` 上的 `readonly` 属性禁用单个手风琴。

手风琴组

可以使用 `ion-accordion-group` 上的 `readonly` 属性禁用手风琴组。

解剖学

`header` 槽用作将展开或折叠手风琴的切换。我们建议您在此处使用 `ion-item`,以利用可访问性和主题功能。

在 `header` 槽中使用 `ion-item` 时,`ion-item` 的 `button` 属性设置为 `true`,`detail` 属性设置为 `false`。此外,我们还会自动向 `ion-item` 添加一个切换图标。当您展开或折叠手风琴时,此图标将自动旋转。有关更多信息,请参阅 自定义图标

内容

`content` 槽用作手风琴的一部分,该部分根据手风琴的状态显示或隐藏。您可以在此处放置任何东西,除了另一个 `ion-content` 实例,因为每个页面应该只添加一个 `ion-content` 实例。

自定义

扩展样式

有两种内置的扩展样式:`compact` 和 `inset`。此扩展样式通过 `ion-accordion-group` 上的 `expand` 属性设置。

当 `expand="inset"` 时,手风琴组将获得一个边框半径。在 `md` 模式下,当手风琴打开时,整个手风琴将向下移动。

高级扩展样式

您可以通过根据手风琴的状态进行样式设置来自定义扩展行为。有四个状态类应用于 `ion-accordion`。使用这些类进行样式设置可以创建高级状态转换

类名描述
.accordion-expanding手风琴正在积极扩展时应用
.accordion-expanded手风琴完全展开时应用
.accordion-collapsing手风琴正在积极折叠时应用
.accordion-collapsed手风琴完全折叠时应用

如果您需要定位手风琴的特定部分,我们建议直接定位元素。例如,如果您想在手风琴展开时自定义 `header` 槽中的 `ion-item`,您可以使用以下选择器

ion-accordion.accordion-expanding ion-item[slot="header"],
ion-accordion.accordion-expanded ion-item[slot="header"] {
--color: red;
}

图标

在 `header` 槽中使用 `ion-item` 时,我们会自动添加一个 `ion-icon`。`toggleIcon` 属性可以控制所用图标的类型,`toggleIconSlot` 属性可以控制添加它的槽。

如果您想自己管理图标或使用不是 `ion-icon` 的图标,您可以向图标元素添加 `ion-accordion-toggle-icon` 类。

无论您选择哪种选项,图标都会在您展开或折叠手风琴时自动旋转。

主题

由于 `ion-accordion` 充当标题和内容元素周围的外壳,因此您可以轻松地根据需要对手风琴进行主题化。您可以通过定位插槽 `ion-item` 对标题进行主题化。由于您使用的是 `ion-item`,因此您还可以访问所有 ion-item CSS 变量ion-item 阴影部分。通过定位位于 `content` 槽中的元素,也可以轻松实现内容主题化。

可访问性

动画

默认情况下,展开或折叠手风琴项目时会启用动画。当 `prefers-reduced-motion` 媒体查询受支持并设置为 `reduce` 时,动画将自动禁用。对于不支持此功能的浏览器,可以通过在您的 Ionic Framework 应用程序中设置 `animated` 配置来禁用动画。

键盘交互

当在 ion-accordion-group 内使用时,ion-accordion 具有完整的键盘支持,可以与组件交互。下表详细说明了每个键的作用

描述
空格键回车键当焦点位于手风琴标题时,手风琴将根据组件的状态折叠或展开。
Tab将焦点移动到下一个可聚焦元素。
Shift + Tab将焦点移动到上一个可聚焦元素。
向下箭头- 当焦点位于手风琴标题时,将焦点移动到下一个手风琴标题。
- 当焦点位于最后一个手风琴标题时,将焦点移动到第一个手风琴标题。
向上箭头- 当焦点位于手风琴标题时,将焦点移动到上一个手风琴标题。
- 当焦点位于第一个手风琴标题时,将焦点移动到最后一个手风琴标题。
Home当焦点位于手风琴标题时,将焦点移动到第一个手风琴标题。
End当焦点位于手风琴标题时,将焦点移动到最后一个手风琴标题。

性能

动画

手风琴动画通过在动画开始时了解 content 插槽的高度来工作。手风琴期望这个高度在整个动画过程中保持一致。因此,开发者应该避免在动画过程中执行任何可能改变内容高度的操作。

例如,使用 ion-img 可能会导致布局偏移,因为它会延迟加载图像。这意味着,当动画播放时,ion-img 将加载图像数据,并且 ion-img 的尺寸将改变以适应加载的图像数据。这会导致 content 插槽的高度改变。开发者有几个选择可以避免这种情况

  1. 使用没有延迟加载的 img 元素。ion-img 始终使用延迟加载,但 img 默认情况下不使用延迟加载。这是最简单的选择,如果你的图像很小,并且不会从延迟加载中明显受益,那么它非常有效。

  2. ion-img 上设置最小宽度和高度。如果你需要使用延迟加载并且提前知道图像的尺寸(例如,如果你加载的是相同大小的图标),你可以在 CSS 中设置 ion-img 具有最小宽度或高度。这使开发者能够在避免布局偏移的同时获得延迟加载的好处。这在使用带有 loading="lazy"img 元素时也适用!

  3. 如果这两种选择都不适用,开发者可能希望考虑通过在 ion-accordion-group 上使用 animated 属性来完全禁用动画。

属性

disabled

描述如果为 true,则手风琴无法交互。
属性disabled
类型boolean
默认false

mode

描述模式决定使用哪个平台样式。
属性mode
类型"ios" | "md"
默认undefined

readonly

描述如果为 true,则手风琴无法交互,但不会改变透明度。
属性readonly
类型boolean
默认false

toggleIcon

描述要使用的切换图标。当手风琴展开或折叠时,此图标将旋转。
属性toggle-icon
类型string
默认chevronDown

toggleIconSlot

描述ion-item 中放置切换图标的插槽。默认为 "end"
属性toggle-icon-slot
类型"end" | "start"
默认'end'

value

描述手风琴的值。默认为自动生成的 value。
属性value
类型string
默认ion-accordion-${accordionIds++}

事件

此组件没有可用事件。

方法

此组件没有可用的公共方法。

CSS 阴影部分

名称描述
content内容插槽的包装元素。
expanded展开的元素。可以与 headercontent 部分结合使用(例如 ::part(header expanded))。
header标题插槽的包装元素。

CSS 自定义属性

此组件没有可用的 CSS 自定义属性。

插槽

名称描述
content内容放置在标题下方,根据展开状态显示或隐藏。
header内容放置在顶部,用于展开或折叠手风琴项目。