感谢@seven-phases-max 的建议,我终于找到了使用分离规则集的可能解决方案:
@screen-xs: 480px;
@screen-sm: 769px;
@screen-md: 992px;
@screen-lg: 1200px;
.MEDIAQUERY(@only-media, @min-max, @size, @RULES)
{
@screen-width:~"@{screen-@{size}}";
@mediaQuery: ~"screen and (@{min-max}-width: @{screen-width})";
@media @mediaQuery { @RULES(); }
& when (@only-media = false) {
.@{size} & { @RULES(); }
}
}
.foo_media-and-class
{
color:red;
.MEDIAQUERY(@only-media:false, @min-max:max, @size:md,
{
color:blue;
}
);
.MEDIAQUERY(@only-media:false, @min-max:min, @size:lg,
{
color:yellow;
}
);
}
.foo_only-media
{
color:red;
.MEDIAQUERY(@only-media:true, @min-max:max, @size:md,
{
color:blue;
}
);
.MEDIAQUERY(@only-media:true, @min-max:min, @size:lg,
{
color:yellow;
}
);
}
此解决方案超越并提供其他选项:
- 可以为媒体查询设置自定义屏幕宽度值,
- 传递
MIN/MAX
媒体查询中使用的属性的值(尝试传递“ max
”而不是“ min
”调用.MEDIAQUERY mixin)
@only-media
通过布尔值切换简单媒体查询或媒体查询+后代选择器的生成。