Docs Components Primitives

AspectRatio

React example follows below.
ts
const aspectRatioFixture = {
id: "aspect-ratio",
ratio: 16 / 9,
label: "16:9 media",
} satisfies { id: string; ratio: number; label: string };
import { AspectRatio } from "@grassroot/ui-react";
export default function AspectRatioDemo() {
return (
<div>
<div className="w-full max-w-[420px]">
<AspectRatio ratio={aspectRatioFixture.ratio}>
<div className="flex items-center justify-center rounded-xs border border-line-strong bg-card font-mono text-[13px] text-muted">
{aspectRatioFixture.label}
</div>
</AspectRatio>
</div>
</div>
);
}
ts
<script setup lang="ts">
const aspectRatioFixture = {
id: "aspect-ratio",
ratio: 16 / 9,
label: "16:9 media",
} satisfies { id: string; ratio: number; label: string };
import { AspectRatio } from "@grassroot/ui-vue";
</script>
<template>
<div>
<div class="w-full max-w-[420px]">
<AspectRatio :ratio="aspectRatioFixture.ratio">
<div
class="flex items-center justify-center rounded-xs border border-line-strong bg-card font-mono text-[13px] text-muted"
>
{{ aspectRatioFixture.label }}
</div>
</AspectRatio>
</div>
</div>
</template>
ts
import { Component } from "@angular/core";
const aspectRatioFixture = {
id: "aspect-ratio",
ratio: 16 / 9,
label: "16:9 media",
} satisfies { id: string; ratio: number; label: string };
import { GrassrootAspectRatio } from "@grassroot/ui-angular";
@Component({
selector: "app-aspect-ratio-demo",
standalone: true,
imports: [GrassrootAspectRatio],
template: `
<div>
<div class="w-full max-w-[420px]">
<grassroot-aspect-ratio [ratio]="fixture.ratio">
<div
class="flex items-center justify-center rounded-xs border border-line-strong bg-card font-mono text-[13px] text-muted"
>
{{ fixture.label }}
</div>
</grassroot-aspect-ratio>
</div>
</div>
`,
})
export class AspectRatioDemoComponent {
protected readonly fixture = aspectRatioFixture;
}
export default AspectRatioDemoComponent;
ts
<script lang="ts">
const aspectRatioFixture = {
id: "aspect-ratio",
ratio: 16 / 9,
label: "16:9 media",
} satisfies { id: string; ratio: number; label: string };
import { AspectRatio } from "@grassroot/ui-svelte";
</script>
<div>
<div class="w-full max-w-[420px]">
<AspectRatio ratio={aspectRatioFixture.ratio}>
<div
class="flex items-center justify-center rounded-xs border border-line-strong bg-card font-mono text-[13px] text-muted"
>
{aspectRatioFixture.label}
</div>
</AspectRatio>
</div>
</div>
ts
/** @jsxImportSource solid-js */
import { AspectRatio } from "@grassroot/ui-solid";
const aspectRatioFixture = {
id: "aspect-ratio",
ratio: 16 / 9,
label: "16:9 media",
} satisfies { id: string; ratio: number; label: string };
import type { JSX } from "solid-js";
export default function AspectRatioDemo(): JSX.Element {
return (
<div>
<div class="w-full max-w-[420px]">
<AspectRatio ratio={aspectRatioFixture.ratio}>
<div class="flex items-center justify-center rounded-xs border border-line-strong bg-card font-mono text-[13px] text-muted">
{aspectRatioFixture.label}
</div>
</AspectRatio>
</div>
</div>
);
}

Installation

API Reference

Import

import { AspectRatio } from "@grassroot/ui-react";

Props

Prop
Type
Default
Requirement
Description
ratio
number | undefined
16 / 9
optional
Width / height ratio.
Prop
ratio
Type
number | undefined
Default
16 / 9
Requirement
optional
Description
Width / height ratio.

Content regions

  • children

Native attributes

Standard DOM and ARIA attributes not listed above spread onto the root element.

Import

import { AspectRatio } from "@grassroot/ui-vue";

Props

Prop
Type
Default
Requirement
ratio
number | undefined
16 / 9
optional
Prop
ratio
Type
number | undefined
Default
16 / 9
Requirement
optional

Content regions

  • default

Import

import { Component } from "@angular/core";
import { GrassrootAspectRatio } from "@grassroot/ui-angular";

Props

Prop
Type
Default
Requirement
ratio
number
16 / 9
optional
Prop
ratio
Type
number
Default
16 / 9
Requirement
optional

Content regions

  • default

Import

import { AspectRatio } from "@grassroot/ui-svelte";

Props

Prop
Type
Default
Requirement
ratio
number
optional
class
string
optional
Prop
ratio
Type
number
Default
Requirement
optional
Prop
class
Type
string
Default
Requirement
optional

Content regions

  • children

Import

import { AspectRatio } from "@grassroot/ui-solid";
import type { JSX } from "solid-js";

Props

Prop
Type
Default
Requirement
ratio
number
optional
className
string
optional
Prop
ratio
Type
number
Default
Requirement
optional
Prop
className
Type
string
Default
Requirement
optional

Content regions

  • children

Native attributes

Standard DOM and ARIA attributes not listed above spread onto the root element.