Ratio
React Bootstrap 5 Ratio component
Create responsive video or slideshow embeds based on the width of the parent by creating an intrinsic ratio that scales on any device.
Basic example
Use the ratio helper to manage the aspect ratios of external content like
<iframe>
s, <embed>
s, <video>
s, and
<object>
s. These helpers also can be used on any standard HTML child
element (e.g., a <div>
or <img>
). Styles are applied
from the parent .ratio
class directly to the child.
Wrap any embed, like an <iframe>
, in a parent element with
.ratio
and an aspect ratio class. The immediate child element is automatically
sized thanks to our universal selector .ratio > *
.
import React from 'react';
export default function App() {
return (
<div className="ratio ratio-16x9">
<iframe
src="https://www.youtube.com/embed/vlDzYIIOYmM"
title="YouTube video"
allowfullscreen
></iframe>
</div>
);
}
Aspect ratios
Aspect ratios can be customized with modifier classes. By default the following ratio classes are provided:
import React from 'react';
export default function App() {
return (
<div>
<div className="ratio ratio-21x9">
<div>21x9</div>
</div>
<div className="ratio ratio-16x9">
<div>16x9</div>
</div>
<div className="ratio ratio-4x3">
<div>4x3</div>
</div>
<div className="ratio ratio-1x1">
<div>1x1</div>
</div>
</div>
);
}
Custom ratios
Each .ratio-*
class includes a CSS custom property (or CSS variable) in the
selector. You can override this CSS variable to create custom aspect ratios on the fly with
some quick math on your part.
For example, to create a 2x1 aspect ratio, set
--mdb-aspect-ratio: 50%
on the .ratio
.
import React from 'react';
export default function App() {
return (
<div className="ratio" style={{aspectRatio: "50%"}}>
<div>2x1</div>
</div>
);
}
This CSS variable makes it easy to modify the aspect ratio across breakpoints. The following is 4x3 to start, but changes to a custom 2x1 at the medium breakpoint.
.ratio-4x3 {
@include media-breakpoint-up(md) {
--aspect-ratio: 50%; // 2x1
}
}
import React from 'react';
export default function App() {
return (
<div className="ratio-example ratio ratio-4x3">
<div>4x3, then 2x1</div>
</div>
);
}
Sass map
Within _variables.scss
, you can change the aspect ratios you want to use. Here’s
an example of the $aspect-ratios
map:
$aspect-ratios: (
"1x1": 100%,
"4x3": calc(3 / 4 * 100%),
"16x9": calc(9 / 16 * 100%),
"21x9": calc(9 / 21 * 100%)
);