Я не очень знаком с LESS и пытаюсь переделать микшер S CSS во что-то более похожее на LESS для команды, которая преимущественно работает с LESS, так как они не хотят переделывать свой проект в SCSS. /SASS.
Миксин S CSS очень прост, нужно отобразить два массива и, используя результат, вывести либо @content (), либо написать простую инструкцию медиа-запроса с @content () между :
$breakpoints: (
xs: 'screen and (max-width: 599px)',
sm: 'screen and (min-width: 600px) and (max-width: 959px)',
md: 'screen and (min-width: 960px) and (max-width: 1279px)',
lg: 'screen and (min-width: 1280px) and (max-width: 1919px)',
xl: 'screen and (min-width: 1920px) and (max-width: 5000px)',
lt-sm: 'screen and (max-width: 599px)',
lt-md: 'screen and (max-width: 959px)',
lt-lg: 'screen and (max-width: 1279px)',
lt-xl: 'screen and (max-width: 1919px)',
gt-xs: 'screen and (min-width: 600px)',
gt-sm: 'screen and (min-width: 960px)',
gt-md: 'screen and (min-width: 1280px)',
gt-lg: 'screen and (min-width: 1920px)'
) !default;
$helper-breakpoints: (
xs: null,
sm: 'gt-xs',
md: 'gt-sm',
lg: 'gt-md',
xl: 'gt-lg'
);
@mixin media-breakpoint($breakpointName) {
$mediaQuery: map-get($breakpoints, $breakpointName);
@if ($mediaQuery == null) {
@content
} @else {
@media #{$mediaQuery} {
@content
}
}
}
И моя попытка в LESS, учитывая, что я прочитал, что LESS 1.7 позволяет вам делать .if (), что я не могу заставить работать.
@breakpoints: {
xs: 'screen and (max-width: 599px)';
sm: 'screen and (min-width: 600px) and (max-width: 959px)';
md: 'screen and (min-width: 960px) and (max-width: 1279px)';
lg: 'screen and (min-width: 1280px) and (max-width: 1919px)';
xl: 'screen and (min-width: 1920px) and (max-width: 5000px)';
lt-sm: 'screen and (max-width: 599px)';
lt-md: 'screen and (max-width: 959px)';
lt-lg: 'screen and (max-width: 1279px)';
lt-xl: 'screen and (max-width: 1919px)';
gt-xs: 'screen and (min-width: 600px)';
gt-sm: 'screen and (min-width: 960px)';
gt-md: 'screen and (min-width: 1280px)';
gt-lg: 'screen and (min-width: 1920px)'
};
@helper-breakpoints: {
xs: null;
sm: 'gt-xs';
md: 'gt-sm';
lg: 'gt-md';
xl: 'gt-lg'
};
.media-breakpoint(@breakpointName) {
@mediaQuery: map-get(@breakpoints, @helper-breakpoints);
// .if(@mediaQuery eq null, {
// .-then() {
// @content();
// }
// .-else() {
// @media @mediaQuery {
// @content();
// }
// }
// });
}
Как бы я правильно переписал IF () в SASS в LESS?
Обновление
Кажется, что .set (...) работает лучше всего для В этом случае моя проблема в том, что он не может найти @bp. Похоже, вы не можете передать переменную @ в новую функциональность карты: (.
.media-breakpoint(@bp) {
// .set(@bp) when (@breakpoints[@bp] = null) {
// font-size: 12px;
// }
// .set(@bp) when not (@breakpoints[@bp] = null) {
// font-size: 14px;
// }
}