Как я пытался сказать в этом посте: Как получить $ значения массива в SCSS? , на мой взгляд, вложенная карта поможет вам найти более понятное и простое решение:
$bp-values:(
xs:(
display: 564px,
width: 200px,
font-size: 20px,
color:lightblue,
border:1px solid black
),
md:(
display: 768px,
width: 300px,
font-size: 30px,
color:orange,
border:4px solid orange
),
lg:(
display: 992px,
width: 400px,
font-size: 40px,
color:lime,
border:7px solid brown
),
xl:(
display: 1200px,
width: 500px,
font-size: 50px,
color:crimson,
border:10px solid lightblue
)
);
@mixin mqg3($map, $keys...) {
@each $keyMap, $valueMap in $map {
@media all and (min-width: map-get($valueMap, display)) {
@each $v in $keys {
#{$v}: map-get($valueMap, $v);
}
}
}
}
Это более ясно, каждая корреляция.Нет необходимости вставлять display
в ваши аргументы, потому что я полагаю, это ваша минимальная ширина:
.qaz { @include mqg3($bp-values, width, border); }
.qaz1 { @include mqg3($bp-values, color, font-size); }
Это результат:
@media all and (min-width: 564px) {
.qaz {
width: 200px;
border: 1px solid black;
}
}
@media all and (min-width: 768px) {
.qaz {
width: 300px;
border: 4px solid orange;
}
}
@media all and (min-width: 992px) {
.qaz {
width: 400px;
border: 7px solid brown;
}
}
@media all and (min-width: 1200px) {
.qaz {
width: 500px;
border: 10px solid lightblue;
}
}
@media all and (min-width: 564px) {
.qaz1 {
color: lightblue;
font-size: 20px;
}
}
@media all and (min-width: 768px) {
.qaz1 {
color: orange;
font-size: 30px;
}
}
@media all and (min-width: 992px) {
.qaz1 {
color: lime;
font-size: 40px;
}
}
@media all and (min-width: 1200px) {
.qaz1 {
color: crimson;
font-size: 50px;
}
}
РЕДАКТИРОВАТЬ 1
Как вы спросили в комментарии, если вы хотите работать со списками, это еще одно решение.Я положил ваш $breakpoints
с другими списками.Вы можете удалить display
в ваших аргументах, потому что по умолчанию я использую его всегда как min-width
:
$value-tree: (
display:(
564, 768, 992, 1200
),
width: (
80%, 70%, 400px, 500px
),
font-size: (
20px, 30px, 40px, 50px
),
color: (
lightblue, orange, lime, crimson
),
border: (
1px solid black,
4px solid orange,
7px solid brown,
10px solid lightblue
)
);
@mixin mqg3($map, $keys...){
$myList:map-get($map, display);
@each $myItem in $myList {
$i: index($myList, $myItem);
@media all and (min-width: $myItem * 1px) {
@each $v in $keys {
#{$v}: nth(map-get($value-tree, $v), $i);
}
}
}
}
.qaz { @include mqg3($value-tree, width, border); }
Это вывод:
@media all and (min-width: 564px) {
.qaz {
width: 80%;
border: 1px solid black;
}
}
@media all and (min-width: 768px) {
.qaz {
width: 70%;
border: 4px solid orange;
}
}
@media all and (min-width: 992px) {
.qaz {
width: 400px;
border: 7px solid brown;
}
}
@media all and (min-width: 1200px) {
.qaz {
width: 500px;
border: 10px solid lightblue;
}
}