Aspect Ratio
A media frame that preserves its width-to-height ratio.
- 浏览器
- Chrome 123+Firefox 121+Safari 17.5+
- 层级
- 0
- 压缩后大小
- 268 B
- 强制布局预算
- 0 ms
- axe 预算
- 0
- 支持 SSR
- 是
- 公开契约
- 测试环境
交互示例
16:9 · Cover
示例
Square
The default ratio is 1. A square frame crops a landscape image at the sides.
import { AspectRatio } from "@gunkin/uiify";
<AspectRatio>
<img src="/mountains.svg" width="640" height="400" alt="An amber sun above blue mountain ridges" />
</AspectRatio>Portrait
Set ratio to 4 / 5 for a portrait frame. The image keeps its proportions while filling the frame.
import { AspectRatio } from "@gunkin/uiify";
<AspectRatio ratio={4 / 5}>
<img src="/mountains.svg" width="640" height="400" alt="An amber sun above blue mountain ridges" />
</AspectRatio>Contain
Apply .uncropped { object-fit: contain; } to keep the whole image visible. The optional skin supplies the frame background.
import { AspectRatio } from "@gunkin/uiify";
<AspectRatio ratio={16 / 9}>
<img className="uncropped" src="/mountains.svg" width="640" height="400" alt="An amber sun above blue mountain ridges" />
</AspectRatio>API
AspectRatio
| 属性 | 类型 | 默认值 | 说明 |
|---|---|---|---|
ratio | number | 1 | Positive finite width divided by height. Invalid numbers fall back to 1. When omitted, the CSS custom property can set the ratio. |
children | ReactNode | — | Content placed inside the frame. Intrinsic content cannot enlarge the frame. |
className | string | — | Class applied to the frame root. |
style | CSSProperties | — | Native root styles, including --uiify-aspect-ratio when ratio is omitted. |
ref | Ref<HTMLElement> | — | Ref forwarded to the rendered root element. |
as | ElementType | "div" | Native element or component used for the root. |
render | ReactElement | ((props, state) => ReactElement) | — | Replace the rendered root while preserving its props, ref and identity marker. |
键盘
| 按键 | 操作 |
|---|
无障碍
Static layout adds no role, focus target or keyboard behavior. Give meaningful images alt text; keep captions outside the frame. Required behavior CSS preserves the ratio even when children have intrinsic dimensions. Optional styles fill images with object-fit: cover; use contain to show the entire image.
样式钩子
data-uiify-aspect-ratiodata-part="content"--uiify-aspect-ratio