Skip to content

Commit

Permalink
Add RFS to utility API (twbs#30050)
Browse files Browse the repository at this point in the history
  • Loading branch information
MartijnCuppens authored and olsza committed Oct 3, 2020
1 parent a19d5a9 commit 8778f09
Show file tree
Hide file tree
Showing 4 changed files with 40 additions and 5 deletions.
2 changes: 2 additions & 0 deletions scss/bootstrap-grid.scss
Expand Up @@ -23,6 +23,8 @@ html {
@import "mixins/grid";
@import "mixins/utilities";

@import "vendor/rfs";

@import "containers";
@import "grid";

Expand Down
24 changes: 19 additions & 5 deletions scss/mixins/_utilities.scss
@@ -1,6 +1,6 @@
// Utility generator
// Used to generate utilities & print utilities
@mixin generate-utility($utility, $infix) {
@mixin generate-utility($utility, $infix, $is-rfs-media-query: false) {
$values: map-get($utility, values);

// If the values are a list or string, convert it into a map
Expand All @@ -25,10 +25,24 @@
// Don't prefix if value key is null (eg. with shadow class)
$property-class-modifier: if($key, if($property-class == "" and $infix == "", "", "-") + $key, "");

.#{$property-class + $infix + $property-class-modifier} {
@each $property in $properties {
// stylelint-disable-next-line declaration-no-important
#{$property}: $value if($enable-important-utilities, !important, null);
@if map-get($utility, rfs) {
// Inside the media query
@if $is-rfs-media-query {
$val: rfs-value($value);

// Do not render anything if fluid and non fluid values are the same
$value: if($val == rfs-fluid-value($value), null, $val);
}
@else {
$value: rfs-fluid-value($value);
}
}

@if $value != null {
.#{$property-class + $infix + $property-class-modifier} {
@each $property in $properties {
#{$property}: $value if($enable-important-utilities, !important, null);
}
}
}
}
Expand Down
18 changes: 18 additions & 0 deletions scss/utilities/_api.scss
Expand Up @@ -16,6 +16,24 @@
}
}

// RFS rescaling
@media (min-width: $rfs-mq-value) {
@each $breakpoint in map-keys($grid-breakpoints) {
$infix: breakpoint-infix($breakpoint, $grid-breakpoints);

@if (map-get($grid-breakpoints, $breakpoint) < $rfs-breakpoint) {
// Loop over each utility property
@each $key, $utility in $utilities {
// The utility can be disabled with `false`, thus check if the utility is a map first
// Only proceed if responsive media queries are enabled or if it's the base media query
@if type-of($utility) == "map" and map-get($utility, rfs) {
@include generate-utility($utility, $infix, true);
}
}
}
}
}


// Print utilities
@media print {
Expand Down
1 change: 1 addition & 0 deletions site/content/docs/4.3/utilities/api.md
Expand Up @@ -13,6 +13,7 @@ The `$utilities` map contains all utilities and is later merged with your custom

- `property`: Name of the property, this can be a string or an array of strings (needed for eg. horizontal paddings or margins).
- `responsive` _(optional)_: Boolean indicating if responsive classes need to be generated. `false` by default.
- `rfs` _(optional)_: Variable to enable fluid rescaling. Have a look at the [RFS]({{< docsref "/getting-started/rfs" >}}) page to find out how this works. `false` by default.
- `class` _(optional)_: Variable to change the class name if you don't want it to be the same as the property. In case you don't provide the `class` key and `property` key is an array of strings, the class name will be the first element of the `property` array.
- `values`: This can be a list of values or a map if you don't want the class name to be the same as the value. If null is used as map key, it isn't rendered.
- `print` _(optional)_: Boolean indicating if print classes need to be generated. `false` by default.
Expand Down

0 comments on commit 8778f09

Please sign in to comment.