Вы можете использовать map-remove
$default__breakpoints: (
'xs': 'screen and (max-width: 767px)',
'sm': 'screen and (min-width:768px) and (max-width:1023px)',
'md': 'screen and (min-width:1024px) and (max-width:1200px)',
'lg': 'screen and (min-width:1201px) and (max-width:1440px)'
);
.flex {
// ...
$custom_breakpoints: map-remove($default__breakpoints, 'xs');
@each $breakpoint, $query in $custom_breakpoints {
@media #{$query} {
// code
}
}
}
Возвращает копию карты, поэтому вам не нужно беспокоиться об ее удалении из переменной $default__breakpoints
.
РЕДАКТИРОВАТЬ: Я неправильно понял ваш вопрос. Вы можете сделать это с помощью @at-root
, хотя это добавляет один дополнительный отступ:
$default__breakpoints: (
'xs': 'screen and (max-width: 767px)',
'sm': 'screen and (min-width:768px) and (max-width:1023px)',
'md': 'screen and (min-width:1024px) and (max-width:1200px)',
'lg': 'screen and (min-width:1201px) and (max-width:1440px)'
);
.flex {
// ...
@each $breakpoint, $query in $default__breakpoints {
@media #{$query} {
@at-root (with: if($breakpoint == 'xs', rule, all)) {
.selector {
content: 'value';
}
}
}
}
}
скомпилируется в
.flex .selector {
content: "value";
}
@media screen and (min-width:768px) and (max-width:1023px) {
.flex .selector {
content: "value";
}
}
@media screen and (min-width:1024px) and (max-width:1200px) {
.flex .selector {
content: "value";
}
}
@media screen and (min-width:1201px) and (max-width:1440px) {
.flex .selector {
content: "value";
}
}