Ratios

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.

On this page

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 ratio attribute directly to the child.

TIP

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 ratio attribute and an aspect ratio class.

The immediate child element is automatically sized thanks to our universal selector ratio > *.

vue
<template>
  <b-div ratio="16x9">
    <iframe
      src="https://www.youtube.com/embed/LIlZCmETvsY"
      title="YouTube video"
      allowfullscreen
    />
  </b-div>
</template>

Aspect ratios

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

1x1
4x3
16x9
21x9
vue
<template>
  <b-div ratio="1x1">
    <b-div>1x1</b-div>
  </b-div>
  <b-div ratio="4x3">
    <b-div>4x3</b-div>
  </b-div>
  <b-div ratio="16x9">
    <b-div>16x9</b-div>
  </b-div>
  <b-div ratio="21x9">
    <b-div>21x9</b-div>
  </b-div>
</template>

Custom ratios

Each ratio attribute 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: 50% on the ratio.

2x1
vue
<template>
  <b-div
    :ratio="50"
  >
    <b-div>2x1</b-div>
  </b-div>
</template>

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.

4x3, then 2x1
vue
<template>
  <b-div ratio="4x3">
    <b-div>4x3, then 2x1</b-div>
  </b-div>
</template>