diff --git a/scss/_utilities.scss b/scss/_utilities.scss index 69615ec4e6..e9a9b1e33b 100644 --- a/scss/_utilities.scss +++ b/scss/_utilities.scss @@ -39,6 +39,29 @@ $utilities: map-merge( property: position, values: static relative absolute fixed sticky ), + "top": ( + property: top, + values: $position-values + ), + "bottom": ( + property: bottom, + values: $position-values + ), + "left": ( + property: left, + values: $position-values + ), + "right": ( + property: right, + values: $position-values + ), + "translate-middle": ( + property: transform, + class: translate-middle, + values: ( + null: (translateX(-50%) translateY(-50%)) + ) + ), "border": ( property: border, values: ( diff --git a/scss/_variables.scss b/scss/_variables.scss index bdf2d62a4a..610a569629 100644 --- a/scss/_variables.scss +++ b/scss/_variables.scss @@ -246,6 +246,17 @@ $spacers: ( $negative-spacers: if($enable-negative-margins, negativify-map($spacers), null) !default; +// Position +// +// Define the edge positioning anchors of the position utilities. + +$position-values: ( + 0: 0, + 50: 50%, + 100: 100% +) !default; + + // Body // // Settings for the `` element. diff --git a/site/assets/scss/_component-examples.scss b/site/assets/scss/_component-examples.scss index 4b7aa43552..7391f5998e 100644 --- a/site/assets/scss/_component-examples.scss +++ b/site/assets/scss/_component-examples.scss @@ -217,6 +217,29 @@ } } +.bd-example-position-utils { + position: relative; + padding: 3em; + + .position-relative { + height: 200px; + background-color: #f5f5f5; + } + + .position-absolute { + width: 2em; + height: 2em; + background-color: $dark; + @include border-radius(); + } +} + +.bd-example-position-examples { + &::after { + content: none; + } +} + // // Code snippets // diff --git a/site/content/docs/5.0/utilities/position.md b/site/content/docs/5.0/utilities/position.md index 4af457da44..8928ecd817 100644 --- a/site/content/docs/5.0/utilities/position.md +++ b/site/content/docs/5.0/utilities/position.md @@ -6,7 +6,7 @@ group: utilities toc: true --- -## Common values +## Position values Quick positioning classes are available, though they are not responsive. @@ -17,3 +17,85 @@ Quick positioning classes are available, though they are not responsive.
...
...
{{< /highlight >}} + +## Arrange elements + +Arrange elements easily with the edge positioning utilities. The format is `{property}-{position}`. + +Where *property* is one of: + +- `top` - for the vertical `top` position +- `left` - for the horizontal `left` position +- `bottom` - for the vertical `bottom` position +- `right` - for the horizontal `right` position + +Where *position* is one of: + +- `0` - for `0` edge position +- `50` - for `50%` edge position +- `100` - for `100%` edge position + +(You can add more position values by adding entries to the `$position-values` Sass map variable.) + +{{< example class="bd-example-position-utils" >}} +
+
+
+
+
+
+
+
+{{< /example >}} + +## Center elements + +In addition, you can also center the elements with the transform utility class `.translate-middle`. + +This class applies the transformations `translateX(-50%)` and `translateY(-50%)` to the element which, in combination with the edge positioning utilities, allows you to absolute center an element. + +{{< example class="bd-example-position-utils" >}} +
+
+
+
+
+
+
+
+
+
+
+{{< /example >}} + +## Examples + +Here are some real life examples of these classes: + +{{< example class="bd-example-position-examples d-flex justify-content-around" >}} + + + + + +{{< /example >}} + +You can use these classes with existing components to create new ones. Remember that you can extend its functionality by adding entries to the `$position-values` variable. + +{{< example class="bd-example-position-examples" >}} +
+
+
+
+ + + +
+{{< /example >}} +