This plugin generates utility classes to help create responsive elements that will maintain a specific aspect ratio. Useful for embedded content like videos from YouTube.
# Using npm
npm install @pixleight/tailwindcss-aspect-ratio
# Using Yarn
yarn add @pixleight/tailwindcss-aspect-ratio
// tailwind.config.js
module.exports = {
plugins: [
// ...
require('@pixleight/tailwindcss-aspect-ratio'),
// ...
]
}
.aspect-ratio
generates the initial styling, with additional classes for setting the width and height ratios.
The .aspect-ratio-item
class also styles the child element to fit the container (this could also be achieved with .absolute.inset-0
)
This plugin comes with ratios from 1–16 for both width and height. Using both of these classes along with the .aspect-ratio
allows you customize the aspect ratio however you like without needing to configure new classes.
<div class="aspect-ratio aspect-ratio-w-16 aspect-ratio-h-9">
<div class="aspect-ratio-item">
<iframe src="https://www.youtube.com/embed/dQw4w9WgXcQ"></iframe>
</div>
</div>
Generates:
.aspect-ratio: {
--aspect-ratio-w: 1;
--aspect-ratio-h: 1;
position: relative;
height: 0;
overflow: hidden;
padding-bottom: calc(var(--aspect-ratio-h) / var(--aspect-ratio-w) * 100%);
}
.aspect-ratio-item: {
position: absolute;
width: 100%;
height: 100%;
}
.aspect-ratio-w-16 {
--aspect-ratio-w: 16;
}
.aspect-ratio-h-9 {
--aspect-ratio-h: 9;
}
We also include some helpful defaults for common sizes:
.aspect-ratio-16/9
- or
.aspect-ratio-video
- or
.aspect-ratio-1/1
- or
.aspect-ratio-square
- or
.aspect-ratio-4/3
.aspect-ratio-3/2
Sizes can be configured in the theme
section of your Tailwind config file:
// tailwind.config.js
module.exports = {
// ...
theme: {
// ...
extend: {
// ...
aspectRatio: {
'21/9': [21, 9], // Generates `.aspect-ratio-21/9` for a 21:9 ratio
/**
* Integers in the `w` and `h` arrays generate classes for that dimension and ratio:
* .aspect-ratio-{d}-{r}
*/
w: [
21,
30,
],
h: [
19,
22,
]
},
// ...
},
},
// ...
}
Because values in the theme.extend
section are only merged shallowly, you will need to include the values from the plugin's default theme if you wish to add more ratios to w
or h
instead of replacing them:
// tailwind.config.js
const aspectRatioTheme = require('@pixleight/tailwindcss-aspect-ratio/defaultTheme')
module.exports = {
// ...
theme: {
// ...
extend: {
// ...
aspectRatio: {
w: [
...aspectRatioTheme.w, // include ratios from 1–16
21,
],
},
// ...
},
},
// ...
}