Skip to main content Skip to docs navigation

Aspect ratio

Use generated pseudo elements to make an element maintain the aspect ratio of your choosing. Perfect for responsively handling video or slideshow embeds based on the width of the parent.

About

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 .aspect class directly to the child.

Aspect ratios are declared in a Sass map and included in each class via CSS variable, which also allows custom aspect ratios.

Pro-Tip! You don’t need frameborder="0" on your <iframe>s as we override that for you in Reboot.

Example

Wrap any embed, like an <iframe>, in a parent element with .aspect and an aspect ratio class. The immediate child element is automatically sized thanks to our universal selector .aspect > *.

html
<div class="aspect aspect-16x9">
  <iframe src="https://www.youtube.com/embed/zpOULjyy-n8?rel=0" title="YouTube video" allowfullscreen></iframe>
</div>

The class .aspect can be directly added to elements such as <iframe>, <video>, or <img>.

html
<iframe src="https://www.youtube.com/embed/zpOULjyy-n8?rel=0" class="w-100 aspect aspect-16x9" title="YouTube video" allowfullscreen></iframe>

Aspect ratios

Aspect ratios can be customized with modifier classes. By default the following ratio classes are provided:

9x16
3x4
1x1
4x3
16x9
21x9
html
<div class="aspect aspect-9x16">
  <div>9x16</div>
</div>
<div class="aspect aspect-3x4">
  <div>3x4</div>
</div>
<div class="aspect aspect-1x1">
  <div>1x1</div>
</div>
<div class="aspect aspect-4x3">
  <div>4x3</div>
</div>
<div class="aspect aspect-16x9">
  <div>16x9</div>
</div>
<div class="aspect aspect-21x9">
  <div>21x9</div>
</div>

Responsive ratios

html
<iframe class="w-100 aspect aspect-16x9 aspect-md-1x1 aspect-xl-21x9" src="https://www.youtube.com/embed/zpOULjyy-n8?rel=0" title="YouTube video" allowfullscreen></iframe>

Custom ratios

Each .aspect-* 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 --bs-aspect-ratio: 2 / 1 on the .aspect.

2x1
html
<div class="aspect" style="--bs-aspect-ratio: 2 / 1;">
  <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.

.aspect-4x3 {
  @include media-breakpoint-up(md) {
    --bs-aspect-ratio: 2 / 1; // 2x1
  }
}
4x3, then 2x1
html
<div class="aspect aspect-4x3">
  <div class="aspect-content">4x3, then 2x1</div>
</div>

Sass maps

Within _variables.scss, you can change the aspect ratios you want to use. Here’s our default $ratio-aspect-ratios map. Modify the map as you like and recompile your Sass to put them to use.

$aspect-ratios: (
  "1x1": 100%,
  "4x3": calc(3 / 4 * 100%),
  "16x9": calc(9 / 16 * 100%),
  "21x9": calc(9 / 21 * 100%),
  "3x4": calc(4 / 3 * 100%),
  "9x16": calc(16 / 9 * 100%)
);