CornerOverlay
Absolute-positioned corner badge layer for avatars, thumbnails, and small status marks.
Usage
Loading demo...
Clickable Overlay Content
The overlay is pointer-events: none by default. Set overlayPointerEvents="auto" only when the overlay itself must receive pointer input.
<template>
<TxCornerOverlay overlay-pointer-events="auto" :offset-x="-4" :offset-y="-4">
<TxAvatar :src="avatarUrl" />
<template #overlay>
<button type="button" aria-label="Open profile actions">•••</button>
</template>
</TxCornerOverlay>
</template>
CSS Offset Values
<template>
<TxCornerOverlay offset-x="calc(100% - 12px)" offset-y="-0.25rem">
<span>Base</span>
<template #overlay>
<TxBadge value="New" />
</template>
</TxCornerOverlay>
</template>
String offsets are preserved. Numeric offsets are converted to pixels.
Best Practices
- Keep overlays decorative by default;
aria-hiddenmeans important status should also be represented in nearby text or labels. - Use negative offsets for badges that sit partly outside avatars or thumbnails.
- Set
overlayPointerEvents="auto"only for intentional interactive overlays, and provide a semantic control inside the slot. - Avoid large overlay content. This component is designed for small marks, not popovers or menus.
- Keep the base content's size stable; the overlay is positioned absolutely and does not reserve layout space.
API Reference
Props
| Prop | Type | Default | Description |
|---|---|---|---|
placement | 'top-left' | 'top-right' | 'bottom-left' | 'bottom-right' | 'bottom-right' | Corner used for the overlay. |
offsetX | string | number | 0 | Horizontal inset. Numbers become px. |
offsetY | string | number | 0 | Vertical inset. Numbers become px. |
overlayPointerEvents | 'none' | 'auto' | 'none' | CSS pointer-events value for the overlay layer. |
Slots
| Slot | Props | Description |
|---|---|---|
default | none | Base inline content. |
overlay | none | Corner layer content. Omitted slot means no overlay node is rendered. |
Events
No public events are emitted.
Exposed Methods
No public instance methods are exposed.
Overview
- The root renders an inline-block
spanwithposition: relative. - The overlay is rendered only when the
overlayslot exists. - The overlay layer is absolutely positioned; while decorative (
overlayPointerEvents="none", the default) it is markedaria-hidden="true", and withoverlayPointerEvents="auto"it is exposed so a focusable control inside stays reachable. placementselects which x/y inset pair is written: top/left, top/right, bottom/left, or bottom/right.offsetXcontrolsleftorright;offsetYcontrolstoporbottom.- Number offsets become pixel values, while string offsets are passed through as-is.
overlayPointerEventsmaps directly to the overlay style.- No click, focus, or keyboard behavior is added by the component.
Technologies
- Reviewed against
packages/tuffex/packages/components/src/corner-overlay/src/types.ts,TxCornerOverlay.vue, andcorner-overlay.test.ts. - The overlay slot is conditional and
aria-hiddenonly while decorative (overlayPointerEvents="none");overlayPointerEvents="auto"exposes it so an interactive control is reachable. Product-critical status still needs text or a labeled control outside a decorative layer. overlayPointerEvents="auto"only forwards CSS pointer behavior. The slotted control owns all keyboard, focus, and label semantics.- Component source:
packages/tuffex/packages/components/src/corner-overlay/src/TxCornerOverlay.vue. - Types:
packages/tuffex/packages/components/src/corner-overlay/src/types.ts. - Verified coverage: Coverage:
packages/tuffex/packages/components/src/corner-overlay/__tests__/corner-overlay.test.tsverifies absent overlay rendering,aria-hiddenoverlay output, default placement, placement-to-inset styles, string offsets, and pointer-event forwarding.
查看源码
packages/tuffex/packages/components/src/corner-overlay/index.ts