Вы можете написать миксин, который принимает два параметра: размер экрана и наборы правил.
Этот миксин пытается найти значение @screen
с помощью каждой функции и, когда находит, печатает связанный медиазапрос.
@screens: {
small: 320px;
medium: 768px;
large: 1024px;
};
.media(@screen, @rules) {
each(@screens, {
& when (@key = @screen) {
@media (only screen) and (min-width: ~"@{value}") {
@rules();
}
}
});
}
Использование.Установите размер экрана и наборы правил.
header {
background-color: blue;
.media(small, {
background-color: red;
});
}
Демонстрация Codepen .
Обновление.
Если вы хотите использовать минимальные и максимальные значениядля @media
просто напишите необходимые миксины вручную.Гораздо проще и просто поддерживать .Less lang не имеет достаточно функций для работы с картами и условиями.
Например:
@phone: 600px; // imagine phone screens are 600px and lower
@tablet: 900px; // tablets are between 601px (@phone + 1px) and 900px
@laptop: 1200px; // laptops are between 901px (@tablet + 1px) and 1200px
// large sreens are wider than 1201px (@laptop + 1px)
// @media to detect only tablets:
.tablet-only(@rules) {
@media (only screen) and (min-width: ~"@{phone} + 1px") and (max-width: ~"@{tablet}") {
@rules();
}
}
// @media for tablets and wider (modile-first approach):
.tablet(@rules) {
@media (only screen) and (min-width: ~"@{phone} + 1px") {
@rules();
}
}
// @media for tablets and smaller (desktop-first approach):
.tablet(@rules) {
@media (only screen) and (max-width: ~"@{tablet}") {
@rules();
}
}
// Usualy you don't need to have modile-first and desktop-first @medias at the same time into one project
Ознакомьтесь со статьей на zellwk.com, чтобы узнать о mobile-first appproach .