Skip to content

覆盖层

Props ​

名称类型默认值说明
showOnOverlayShowOn'always'未绑定 isOpen 时遮罩的出现方式,完全由 CSS 驱动。always 一直可见;hover 在悬停或容器内获得焦点时出现;focus 只在容器内获得焦点时出现;hover-or-focus 是 hover 的别名。触屏设备上 hover 改成点按切换。
isOpenboolean-由 JavaScript 控制的可见性,优先级高于 showOn 和点按切换。用 v-model:isOpen 绑定;不绑定时可见性交回 showOn。为 false 时遮罩不可见、并设为 inert,里面的按钮不会进入 Tab 顺序。
scrimOverlayScrimMode'dark'遮罩的背景,同时决定遮罩内部内容使用哪一套表面语义。dark 和 light 分别让内部内容按深色、浅色表面取色;false 不画背景,内容保持页面当前主题。
positionOverlayPosition'fill'遮罩覆盖的范围。fill 铺满整块内容;bottom 和 top 是贴在一条边上的横条,出现和消失时从那条边滑进滑出。
alignOverlayAlign'end'内容在遮罩里的对齐方式。遮罩按列排布,所以这是水平方向:start 靠起始边,end 靠结束边,center 两轴居中。

插槽 ​

名称说明
default底层内容:图片、视频、插画,或任何自带边界的区块。遮罩覆盖在它上面。
content遮罩内部的内容。保持精简,一个按钮或一行标签就够了。不提供这个插槽时,组件只渲染底层内容,不会画出遮罩。

OverlayScrim ​

OverlayScrim 是遮罩本身的渲染组件,从 @astryx-vue/core/Overlay 导出,供 useOverlay 的使用者渲染遮罩。Overlay 内部用的就是它,属性含义与上表一致。

名称类型默认值说明
scrimOverlayScrimMode'dark'遮罩背景与内部内容使用的表面语义。
positionOverlayPosition'fill'遮罩覆盖的范围。
alignOverlayAlign'end'内容在遮罩里的对齐方式。
showOnOverlayShowOn'always'未绑定 isOpen 时的出现方式。
isOpenboolean-受控可见性。传入时忽略 showOn,并在为 false 时把遮罩设为 inert。

它的默认插槽就是遮罩内容,根元素上带有 data-position、data-align、data-scrim、data-visibility,主题可以据此定制;遮罩内部的内容包在一层 data-astryx-media="dark | light" 的代理元素里,它只负责切换表面语义,不影响布局。

useOverlay ​

useOverlay 给一个已经存在的容器加上同样的遮罩行为。选项与 Overlay 的属性同名,区别在于可以传 ref 或 computed 保持响应式。

名称类型说明
containerRefRef<HTMLElement | null>挂到容器元素上,用 ref="containerRef"。
containerPropsComputedRef<OverlayContainerProps>容器需要的属性(作用域类名、点按切换处理),用 v-bind 挂上。它带来定位、裁剪,以及触屏下的点按切换。
scrimPropsComputedRef<OverlayScrimProps>传给渲染在容器内部的 OverlayScrim。
isOpenComputedRef<boolean | undefined>遮罩实际使用的可见性:绑定的 isOpen、触屏点按的状态,或 undefined(此时由 CSS 决定)。
hasTouchToggleComputedRef<boolean>当前是否处于"点按切换"状态(触屏设备 + hover 模式)。
toggle() => void翻转点按切换的状态。绑定 isOpen 时它不生效。

原生属性 ​

根元素为 <div>。

以下内容传入根元素:

  • HTML 属性。
  • aria-* 属性。
  • data-* 属性。
  • class。
  • style。

class 会与 astryx-overlay 合并,style 与组件自己写入的圆角合并。传入的点击处理与触屏点按切换会同时生效。