Collapsible

行为组件,是一个用于展开或折叠内容的容器。

设计文档(新窗口打开)

使用场景

  • Collapsible 是一个行为组件,默认开启动画效果。它被用于本库的各种组件中,如:Nav、Collapse、Tree、TreeSelect,以及 Typography 中。
  • 当上述组件不能满足需求或者需要自定义一些折叠行为时,可以使用 Collapsible 来包裹需要展开或者折叠的内容。

代码演示

如何引入

import { Collapsible } from '@chenzy-design/svelte';

基本用法

通过 isOpen 来控制内容的展开或者折叠。

自定义动画时间

通过 duration 设置动画展开或者折叠的时间,也可以通过 motion 来关闭动画。

设置动画时间:

嵌套使用

自定义折叠高度

可以使用 collapseHeight 自定义收起的高度

  • Semi Design 以内容优先进行设计。

  • 更容易地自定义主题。

  • 适用国际化场景。

  • 效率场景加入人性化关怀。

+ Show More

淡入淡出

以下三段为本库补充示例:Semi 有 fade / keepDOM / lazyRender 三个 API 但文档未配示例,本库各补一个便于直观对照。

fade 为 true 时,折叠/展开会叠加透明度渐变,过渡更柔和。

fade=true:折叠/展开时叠加透明度渐变,过渡更柔和。

保留隐藏的 DOM

keepDOM 为 true 时折叠后内容 DOM 不卸载,输入框内容、滚动位置等状态得以保留。

keepDOM=true:折叠后内容 DOM 不卸载,输入框内容/滚动位置得以保留。

惰性渲染

lazyRender 配合 keepDOM 使用:首次展开前不渲染内容,节省首屏成本,首次展开后保留 DOM。

lazyRender + keepDOM:首次展开前不渲染内容(省首屏成本),首展后保留 DOM。

API 参考

属性说明类型默认值
children被折叠的内容Snippet-
class类名string-
collapseHeight折叠高度number0
collapseHeightAdaptive当内容高度小于 collapseHeight 时,是否自适应内容高度。为 true 时,收起状态高度为 Math.min(内容高度, collapseHeight)booleanfalse
duration动画执行的时间number250
fade是否开启淡入淡出booleanfalse
ididstring-
isOpen是否展开内容区域booleanfalse
keepDOM是否保留隐藏的面板 DOM 树,默认销毁booleanfalse
lazyRender配合 keepDOM 使用,为 true 时挂载时不会渲染组件booleanfalse
motion是否开启动画booleantrue
onMotionEnd动画结束的回调() => void-
reCalcKey当 reCalcKey 改变时,将重新计算子节点的高度,用于优化动态渲染时的计算number \| string-
style样式string-

Accessibility

ARIA

  • Collapsible 具有 id props,传入的值会被设置为内容元素的 id,可以配合其他组件的 aria-controls 指明控制关系,见下方使用示例。

FAQ

  • 为什么使用 Collapsible 没有正常展开?

    检查 Collapsible 父级是否设置 display: none,此时因为无法拿到节点高度,会出现无法展开的问题。

    同理,页面处于后台标签页(document.hidden === true)时浏览器会冻结 ResizeObserver 投递, 组件拿不到内容高度,isOpen 变化后 wrapper 高度会停在 0(内容 DOM 已渲染但不可见), 切回前台即恢复。这不是组件问题——同页放一个裸 ResizeObserver 探针同样收不到回调。

设计变量

变量
默认值
用法
--cd-transition-delay-collapsible-height var(--cd-motion-delay-none) 折叠-高度-延迟时间(组件消费,对齐 Semi $transition_delay-collapsible-height)
--cd-transition-delay-collapsible-opacity var(--cd-motion-delay-none) 折叠-透明度-延迟时间(组件消费,对齐 Semi $transition_delay-collapsible-opacity)
--cd-transition-duration-collapsible-height 250ms 折叠-高度-动画持续时间默认值(可被 duration prop 覆盖,组件消费,对齐 Semi $transition_duration-collapsible-height)
--cd-transition-duration-collapsible-opacity 250ms 折叠-透明度-动画持续时间(组件消费,对齐 Semi $transition_duration-collapsible-opacity)
--cd-transition-function-collapsible-height cubic-bezier(0.25, 0.1, 0.25, 1) 折叠-高度-过渡曲线(组件消费,对齐 Semi $transition_function-collapsible-height)
--cd-transition-function-collapsible-opacity var(--cd-motion-ease-in) 折叠-透明度-过渡曲线(组件消费,对齐 Semi $transition_function-collapsible-opacity)
显示第 1 条-第 6 条,共 6 条
  • 1