Ratio
基础布局基于 Bootstrap 5 的宽高比容器组件,为图片、视频、iframe 等媒体内容提供固定比例的响应式容器,支持四种预设比例与数字、字符串自定义比例,并可渲染为任意语义化元素
Component Demo
Basic usage and examples of the Ratio component
基础用法
子元素会被绝对定位并拉伸铺满容器,图片配合 `object-fit-cover` 即可在保持比例的同时裁切铺满,容器高度由宽度与比例自动决定
预设比例
内置 1x1、4x3、16x9、21x9 四种预设,分别渲染 `ratio-1x1`、`ratio-4x3`、`ratio-16x9`、 `ratio-21x9` 类,对应 100%、75%、56.25%、42.857% 的 padding-top
自定义数字比例
传入数字时写入 `--bs-aspect-ratio` 内联变量:小于 1 视为小数百分比(9 / 16 → 56.25%),大于等于 1 视为整数百分比(2 → 200%,即 1:2 竖屏比例),小于等于 0 时回退为 100%
自定义字符串比例
任意字符串会直接生成 `ratio-<aspectRatio>` 类,只需在自定义样式表中为该类设置 `--bs-aspect-ratio` 即可扩展比例;未定义时回退为默认的 100%
视频嵌入
嵌入视频是比例容器最常见的场景,iframe 随容器宽度缩放并保持 16:9 比例
图片网格
在网格中组合 `rounded` 与 `overflow-hidden`,即可得到统一比例、圆角裁切的图片卡片
自定义元素
通过 as 渲染为 figure、section 等语义化元素,在保留比例行为的同时提升页面语义
交互演示
API Documentation
Complete API reference for the Ratio component
Props
| 属性名 | 类型 | 默认值 | 描述 |
|---|---|---|---|
as | ElementType | 'div' | 渲染的根元素类型,默认渲染 `div`,可传入 `figure`、`section` 等语义化元素或自定义组件 |
aspectRatio | RatioAspectRatio | number | '1x1' | 宽高比:预设字符串渲染 `ratio-*` 类;任意字符串生成 `ratio-<aspectRatio>` 类,可配合自定义 CSS 使用;数字则写入 `--bs-aspect-ratio` 变量——小于 1 时按小数百分比处理(0.75 → 75%),大于等于 1 时按整数百分比处理(2 → 200% 竖屏比例),小于等于 0 时回退为 100% |
children | ReactNode | - | 唯一子元素,会被绝对定位并拉伸铺满整个容器,通常传入 `img`、`iframe`、`video` 等媒体元素 |
className | string | - | 自定义类名,可组合 `bg-*`、`rounded`、`overflow-hidden` 等工具类调整容器外观 |
...rest | HTMLAttributes<HTMLElement> | - | 根元素的所有原生属性(如 `style`、`id` 等);数字比例时 `style` 会与 `--bs-aspect-ratio` 合并 |
Type Definitions
RatioAspectRatio
宽高比类型,四个预设比例或任意自定义字符串
export type RatioAspectRatio = '16x9' | '1x1' | '21x9' | '4x3' | ({} & string);RatioProps
比例容器组件属性接口
export interface RatioProps extends HTMLAttributes<HTMLElement> {
as?: ElementType;
aspectRatio?: number | RatioAspectRatio;
children?: ReactNode;
className?: string;
}