From 18f8601d29ba4ccb11eb1d040eedb093ad48849b Mon Sep 17 00:00:00 2001 From: Mark Otto Date: Mon, 21 Sep 2020 14:15:15 -0700 Subject: [PATCH] Updates responsive embeds with new class names and CSS variables - Renames .embed-responsive-XbyY classes to .embed-responsive-XxY - Simplifies the Sass map to just be key and value, ratio and percentage - Builds .embed-responsive-* modifiers with CSS variables - Updates docs to show power of CSS variables - Add notes to the Migration guide --- scss/_variables.scss | 20 ++------- scss/helpers/_embed.scss | 6 +-- site/assets/scss/_component-examples.scss | 13 ++++++ site/content/docs/5.0/helpers/embed.md | 53 +++++++++++++---------- site/content/docs/5.0/migration.md | 7 +++ 5 files changed, 58 insertions(+), 41 deletions(-) diff --git a/scss/_variables.scss b/scss/_variables.scss index 8f47509d61..fa4ad19f15 100644 --- a/scss/_variables.scss +++ b/scss/_variables.scss @@ -378,22 +378,10 @@ $transition-collapse: height .35s ease !default; // scss-docs-start embed-responsive-aspect-ratios $embed-responsive-aspect-ratios: ( - "21by9": ( - x: 21, - y: 9 - ), - "16by9": ( - x: 16, - y: 9 - ), - "4by3": ( - x: 4, - y: 3 - ), - "1by1": ( - x: 1, - y: 1 - ) + "1x1": 100%, + "4x3": 75%, + "16x9": 56.25%, + "21x9": 42.857142% ) !default; // scss-docs-end embed-responsive-aspect-ratios diff --git a/scss/helpers/_embed.scss b/scss/helpers/_embed.scss index 924fc0e6d0..8dbb7487d0 100644 --- a/scss/helpers/_embed.scss +++ b/scss/helpers/_embed.scss @@ -1,11 +1,13 @@ // Credit: Nicolas Gallagher and SUIT CSS. .embed-responsive { + position: relative; width: 100%; &::before { display: block; + padding-top: var(--aspect-ratio); content: ""; } @@ -24,8 +26,6 @@ @each $key, $ratio in $embed-responsive-aspect-ratios { .embed-responsive-#{$key} { - &::before { - padding-top: percentage(map-get($ratio, y) / map-get($ratio, x)); - } + --aspect-ratio: #{$ratio}; } } diff --git a/site/assets/scss/_component-examples.scss b/site/assets/scss/_component-examples.scss index 87dcd15652..2c8f7e2e03 100644 --- a/site/assets/scss/_component-examples.scss +++ b/site/assets/scss/_component-examples.scss @@ -164,6 +164,19 @@ margin-top: .5rem; margin-bottom: .5rem; } + + // Responsive embed helpers + .embed-responsive { + display: inline-block; + color: $gray-600; + background-color: $gray-100; + border: $border-width solid $border-color; + } + .embed-responsive-item { + display: flex; + align-items: center; + justify-content: center; + } } .bd-example-modal { diff --git a/site/content/docs/5.0/helpers/embed.md b/site/content/docs/5.0/helpers/embed.md index 78d3f265d0..28f1550da6 100644 --- a/site/content/docs/5.0/helpers/embed.md +++ b/site/content/docs/5.0/helpers/embed.md @@ -8,16 +8,18 @@ toc: true ## About -Rules are directly applied to ` {{< /example >}} @@ -26,28 +28,35 @@ Wrap any embed like an ` +{{< example html >}} +
+
1x1
- - -
- +
+
4x3
- - -
- +
+
16x9
- - -
- +
+
21x9
-{{< /highlight >}} +{{< /example >}} -Within `_variables.scss`, you can change the aspect ratios you want to use. Here's an example of the `$embed-responsive-aspect-ratios` map: +## Custom ratios + +Each `.embed-responsive-*` 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 `--aspect-ratio: 50%` on the `.embed-responsive`. + +{{< example html >}} +
+
2x1
+
+{{< /example >}} + +## Sass map + +Within `_variables.scss`, you can change the aspect ratios you want to use. Here's our default `$embed-responsive-aspect-ratios` map. Modify the map as you like and recompile your Sass to put them to use. {{< scss-docs name="embed-responsive-aspect-ratios" file="scss/_variables.scss" >}} diff --git a/site/content/docs/5.0/migration.md b/site/content/docs/5.0/migration.md index 91cfb456d2..e7dac066c5 100644 --- a/site/content/docs/5.0/migration.md +++ b/site/content/docs/5.0/migration.md @@ -72,6 +72,13 @@ toc: true - Renamed `whiteList` option to `allowList`. +### Helpers + +- [Responsive embed helpers]({{< docsref "/helpers/embed" >}}) have new modifier classes and include CSS variables. + - Classes have been renamed to change `by` to `x` in the aspect ratrio. For example, `.embed-responsive-16by9` is now `.responsive-16x9`. + - The `$embed-responsive-aspect-ratios` has been simplified to include the class name and the percentage as the `key: value` pair. This requires some math on your part when customizing, but ultimately makes it simpler on our end. + - CSS variables are now generated and included for each value in the Sass map. Modify the `--aspect-ratio` variable on the `.embed-responsive` to create any [custom aspect ratio]({{< docsref "/helpers/embed#custom-ratios" >}}). + --- ## v5.0.0-alpha1