Aspect Ratio
Keeps content at a fixed width-to-height ratio.
import { … } from '@inlaylab/ivorie/aspect-ratio' 16 / 9
import { ChangeDetectionStrategy, Component } from '@angular/core';
import { IvAspectRatio } from '@inlaylab/ivorie/aspect-ratio';
@Component({
selector: 'demo-aspect-ratio',
imports: [IvAspectRatio],
changeDetection: ChangeDetectionStrategy.OnPush,
template: `
<iv-aspect-ratio [ratio]="16 / 9" class="bg-muted w-full max-w-sm overflow-hidden rounded-lg">
<div class="from-primary/20 to-primary/60 text-primary-foreground flex size-full items-center justify-center bg-linear-to-br text-sm font-medium">
16 / 9
</div>
</iv-aspect-ratio>
`,
})
export default class AspectRatioDemo {}
Installation
npx ivorie add aspect-ratioimport { … } from '@inlaylab/ivorie/aspect-ratio'Use it for images, videos and maps that must keep their shape as the width changes.
Usage
import { IvAspectRatio } from '@inlaylab/ivorie/aspect-ratio';<iv-aspect-ratio [ratio]="16 / 9">
<img src="photo.jpg" alt="Photo" class="size-full object-cover" />
</iv-aspect-ratio>Examples
Square
1 / 1
import { ChangeDetectionStrategy, Component } from '@angular/core';
import { IvAspectRatio } from '@inlaylab/ivorie/aspect-ratio';
@Component({
selector: 'demo-aspect-ratio-square',
imports: [IvAspectRatio],
changeDetection: ChangeDetectionStrategy.OnPush,
template: `
<iv-aspect-ratio ratio="1" class="bg-muted w-48 rounded-lg">
<div class="text-muted-foreground flex size-full items-center justify-center text-sm">1 / 1</div>
</iv-aspect-ratio>
`,
})
export default class AspectRatioSquareDemo {}
API
Every part also accepts class.
iv-aspect-ratio
| Name | Type | Default | Description |
|---|---|---|---|
ratio |
number |
1 |
Width divided by height. |
Accessibility
No role. Give images inside it an alt.
Notes
- It uses the CSS
aspect-ratioproperty. Children fill it withsize-full.