Command Palette

Search for a command to run...

Github

Aspect Ratio

Displays content within a desired ratio.

Aspect ratio demo
import { AspectRatio } from "@/components/ui/aspect-ratio";

export function AspectRatioDemo() {
	return (
		<AspectRatio ratio={16 / 9} className="w-full max-w-sm rounded-lg bg-muted">
			<img
				src="https://avatar.vercel.sh/shadcn1"
				alt="Aspect ratio demo"
				className="size-full rounded-lg object-cover"
			/>
		</AspectRatio>
	);
}

Installation

pnpm dlx shadcn@latest add https://herocn.dev/r/aspect-ratio.json

Usage

import { AspectRatio } from "@/components/ui/aspect-ratio"
<AspectRatio ratio={16 / 9}>
  <img src="..." alt="Image" className="rounded-md object-cover" />
</AspectRatio>

Composition

Use the following composition to build an AspectRatio:

AspectRatio

Examples

Square

Square aspect ratio
import { AspectRatio } from "@/components/ui/aspect-ratio";

export function AspectRatioSquare() {
	return (
		<AspectRatio
			ratio={1 / 1}
			className="w-full max-w-[12rem] rounded-lg bg-muted"
		>
			<img
				src="https://avatar.vercel.sh/shadcn1"
				alt="Square aspect ratio"
				className="size-full rounded-lg object-cover"
			/>
		</AspectRatio>
	);
}

Portrait

Portrait aspect ratio
import { AspectRatio } from "@/components/ui/aspect-ratio";

export function AspectRatioPortrait() {
	return (
		<AspectRatio
			ratio={9 / 16}
			className="w-full max-w-[10rem] rounded-lg bg-muted"
		>
			<img
				src="https://avatar.vercel.sh/shadcn1"
				alt="Portrait aspect ratio"
				className="size-full rounded-lg object-cover"
			/>
		</AspectRatio>
	);
}

RTL

Landscape
منظر طبيعي جميل
"use client";

import {
	type Translations,
	useTranslation,
} from "@/components/language-selector";
import { AspectRatio } from "@/components/ui/aspect-ratio";

const translations: Translations = {
	en: {
		dir: "ltr",
		values: {
			caption: "Beautiful landscape",
		},
	},
	ar: {
		dir: "rtl",
		values: {
			caption: "منظر طبيعي جميل",
		},
	},
	he: {
		dir: "rtl",
		values: {
			caption: "נוף יפה",
		},
	},
};

export function AspectRatioRtl() {
	const { dir, language, t } = useTranslation(translations, "ar");

	return (
		<figure className="w-full max-w-sm" lang={language} dir={dir}>
			<AspectRatio ratio={16 / 9} className="rounded-lg bg-muted">
				<img
					src="https://avatar.vercel.sh/shadcn1"
					alt="Landscape"
					className="size-full rounded-lg object-cover"
				/>
			</AspectRatio>
			<figcaption className="mt-2 text-center text-muted-foreground text-sm">
				{t.caption}
			</figcaption>
		</figure>
	);
}

API Reference

AspectRatio

PropTypeDefault