]> git.ipfire.org Git - thirdparty/bootstrap.git/commitdiff
Updates responsive embeds with new class names and CSS variables
authorMark Otto <markdotto@gmail.com>
Mon, 21 Sep 2020 21:15:15 +0000 (14:15 -0700)
committerMark Otto <otto@github.com>
Wed, 23 Sep 2020 20:30:11 +0000 (13:30 -0700)
- 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
scss/helpers/_embed.scss
site/assets/scss/_component-examples.scss
site/content/docs/5.0/helpers/embed.md
site/content/docs/5.0/migration.md

index 8f47509d61086b4ee5c13ced2b4aa8a5b3cfa331..fa4ad19f15e6316a5b2ab68f2bf895fff9f770a0 100644 (file)
@@ -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
 
index 924fc0e6d0fdf5f50860e1c158a538e9e9824286..8dbb7487d0398b6d9bc6122bad7e313f34307663 100644 (file)
@@ -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};
   }
 }
index 87dcd15652b8dca4c6eddac03bbaf744b5a13b94..2c8f7e2e030d3103a0bfe57fdd5f5137b5d4991f 100644 (file)
     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 {
index 78d3f265d08806dda79d2283bded7671c53e05ea..28f1550da6894939efdc4f9439ae4a961770bee1 100644 (file)
@@ -8,16 +8,18 @@ toc: true
 
 ## About
 
-Rules are directly applied to `<iframe>`, `<embed>`, `<video>`, and `<object>` elements; optionally use an explicit descendant class `.embed-responsive-item` when you want to match the styling for other attributes.
+Rules are directly applied to `<iframe>`, `<embed>`, `<video>`, and `<object>` elements. You can also use an explicit use an explicit descendant class, `.embed-responsive-item`, when you want to match the styling for other attributes. Aspect ratios are declared in a Sass map and included in each class via CSS variable, which also allows [custom aspect ratios](#custom-ratios).
 
-**Pro-Tip!** You don't need to include `frameborder="0"` in your `<iframe>`s as we override that for you in [reboot]({{< docsref "/content/reboot" >}}).
+{{< callout info >}}
+**Pro-Tip!** You don't need `frameborder="0"` on your `<iframe>`s as we override that for you in [Reboot]({{< docsref "/content/reboot" >}}).
+{{< /callout >}}
 
 ## Example
 
-Wrap any embed like an `<iframe>` in a parent element with `.embed-responsive` and an aspect ratio. The `.embed-responsive-item` isn't strictly required, but we encourage it.
+Wrap any embed, like an `<iframe>`, in a parent element with `.embed-responsive` and an aspect ratio class. As mentioned above, the `.embed-responsive-item` isn't strictly required, but we encourage it.
 
 {{< example >}}
-<div class="embed-responsive embed-responsive-16by9">
+<div class="embed-responsive embed-responsive-16x9">
   <iframe class="embed-responsive-item" src="https://www.youtube.com/embed/zpOULjyy-n8?rel=0" title="YouTube video" allowfullscreen></iframe>
 </div>
 {{< /example >}}
@@ -26,28 +28,35 @@ Wrap any embed like an `<iframe>` in a parent element with `.embed-responsive` a
 
 Aspect ratios can be customized with modifier classes. By default the following ratio classes are provided:
 
-{{< highlight html >}}
-<!-- 21:9 aspect ratio -->
-<div class="embed-responsive embed-responsive-21by9">
-  <iframe class="embed-responsive-item" src="..."></iframe>
+{{< example html >}}
+<div class="embed-responsive embed-responsive-1x1" style="width: 10rem;">
+  <div class="embed-responsive-item">1x1</div>
 </div>
-
-<!-- 16:9 aspect ratio -->
-<div class="embed-responsive embed-responsive-16by9">
-  <iframe class="embed-responsive-item" src="..."></iframe>
+<div class="embed-responsive embed-responsive-4x3" style="width: 10rem;">
+  <div class="embed-responsive-item">4x3</div>
 </div>
-
-<!-- 4:3 aspect ratio -->
-<div class="embed-responsive embed-responsive-4by3">
-  <iframe class="embed-responsive-item" src="..."></iframe>
+<div class="embed-responsive embed-responsive-16x9" style="width: 10rem;">
+  <div class="embed-responsive-item">16x9</div>
+</div>
+<div class="embed-responsive embed-responsive-21x9" style="width: 10rem;">
+  <div class="embed-responsive-item">21x9</div>
 </div>
+{{< /example >}}
+
+## Custom ratios
 
-<!-- 1:1 aspect ratio -->
-<div class="embed-responsive embed-responsive-1by1">
-  <iframe class="embed-responsive-item" src="..."></iframe>
+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 >}}
+<div class="embed-responsive" style="--aspect-ratio: 50%; width: 10rem;">
+  <div class="embed-responsive-item">2x1</div>
 </div>
-{{< /highlight >}}
+{{< /example >}}
+
+## Sass map
 
-Within `_variables.scss`, you can change the aspect ratios you want to use. Here's an example of the `$embed-responsive-aspect-ratios` 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" >}}
index 91cfb456d296a894da91bfc16fb0ec5caa4ff9d9..e7dac066c5256c1660017fa2d921482e2b2f5c96 100644 (file)
@@ -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