mirror of
https://github.com/twbs/bootstrap.git
synced 2025-08-18 03:11:19 +02:00
Add ability to use multiple classes in a single mixin call
This commit is contained in:
35
scss/tests/utilities/_mixin.test.scss
Normal file
35
scss/tests/utilities/_mixin.test.scss
Normal file
@@ -0,0 +1,35 @@
|
||||
@import "../../functions";
|
||||
@import "../../variables";
|
||||
@import "../../variables-dark";
|
||||
@import "../../maps";
|
||||
@import "../../mixins";
|
||||
@import "../../utilities";
|
||||
@import "../../utilities/api";
|
||||
|
||||
@include describe("utility mixin") {
|
||||
@include it("generate property-value pairs for given utility") {
|
||||
|
||||
@include assert() {
|
||||
@include output() {
|
||||
.test {
|
||||
@include util(d-block);
|
||||
@include util(p-3);
|
||||
}
|
||||
.test2 {
|
||||
@include util(d-block, p-3);
|
||||
}
|
||||
}
|
||||
|
||||
@include expect() {
|
||||
.test {
|
||||
display: block;
|
||||
padding: 1rem;
|
||||
}
|
||||
.test2 {
|
||||
display: block;
|
||||
padding: 1rem;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
@@ -51,24 +51,28 @@
|
||||
|
||||
$utilities-map: build-utilities-map(); // stylelint-disable-line scss/dollar-variable-default
|
||||
|
||||
@mixin util($class) {
|
||||
@if map-has-key($utilities-map, $class) {
|
||||
$definition: map-get($utilities-map, $class);
|
||||
$breakpoint: map-get($definition, breakpoint);
|
||||
@if $breakpoint != null {
|
||||
@include media-breakpoint-up($breakpoint) {
|
||||
// Sometimes it’s useful for a mixin to be able to take any number of arguments. If the last argument in a @mixin declaration ends in ..., then all extra arguments to that mixin are passed to that argument as a list. This argument is known as an argument list.
|
||||
|
||||
@mixin util($classes...) {
|
||||
@each $class in $classes {
|
||||
@if map-has-key($utilities-map, $class) {
|
||||
$definition: map-get($utilities-map, $class);
|
||||
$breakpoint: map-get($definition, breakpoint);
|
||||
@if $breakpoint != null {
|
||||
@include media-breakpoint-up($breakpoint) {
|
||||
@each $property in map-get($definition, properties) {
|
||||
#{$property}: map-get($definition, value);
|
||||
}
|
||||
}
|
||||
}
|
||||
@else {
|
||||
@each $property in map-get($definition, properties) {
|
||||
#{$property}: map-get($definition, value);
|
||||
}
|
||||
}
|
||||
}
|
||||
@else {
|
||||
@each $property in map-get($definition, properties) {
|
||||
#{$property}: map-get($definition, value);
|
||||
}
|
||||
@debug "Unknown utility class " + $class;
|
||||
}
|
||||
}
|
||||
@else {
|
||||
@debug "Unknown utility class " + $class;
|
||||
}
|
||||
}
|
||||
|
@@ -22,9 +22,13 @@ Bootstrap generates hundreds of utilities to quickly and easily style elements t
|
||||
```scss
|
||||
// Using the utility mixin in your custom Sass
|
||||
.test {
|
||||
// Individual utilities
|
||||
@include util(d-inline-flex);
|
||||
@include util(p-4);
|
||||
@include util(mb-md-3);
|
||||
|
||||
// Multiple utilities
|
||||
@include util(d-inline-flex, p-4, mb-md-3);
|
||||
}
|
||||
```
|
||||
|
||||
@@ -94,6 +98,20 @@ While you can include responsive utilities individually, Sass will generate mult
|
||||
|
||||
This way, you only output one media query in your compiled CSS and no further optimization or action is needed to clean up the output.
|
||||
|
||||
## Multiple utilities
|
||||
|
||||
Include multiple utilities in a single `util()` mixin call with a comma separated list. Once again, for multiple responsive utilities, use a media query to group them under a single compiled media query.
|
||||
|
||||
```scss
|
||||
.test {
|
||||
@include util(d-inline-flex, p-4, mb-3);
|
||||
color: purple;
|
||||
|
||||
@include media-breakpoint-up(md) {
|
||||
@include util(p-5, mb-5);
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
## Custom setup
|
||||
|
||||
@@ -114,9 +132,7 @@ Want to use only the utilities and mixin in your own project? In your project's
|
||||
|
||||
// Write your own styles
|
||||
.test {
|
||||
@include util(d-inline-flex);
|
||||
@include util(p-4);
|
||||
@include util(mb-md-3);
|
||||
@include util(d-inline-flex, p-4, mb-md-3);
|
||||
color: purple;
|
||||
}
|
||||
```
|
||||
|
Reference in New Issue
Block a user