我需要为媒体查询下的元素定义相同的样式,并为另一个类定义后代。
LESS 的完美解决方案可能以下[伪代码]:
.foo
{
color:red;
.example &,
@media (min-width:800px)
{
color:blue;
}
}
应该是可取的,可编译成:
.foo {
color: red;
}
.example .foo {
color: blue;
}
@media (min-width: 800px) {
.foo {
color: blue;
}
}
这个语法是不正确的,但是,你有什么建议可以解决我的问题吗?
答案 0 :(得分:1)
不,选择器和@media
查询语言实体太不相同(尽管语法类似{}
),因此您无法在示例中将逗号与逗号结合起来。
所以要把它弄干(假设共享风格当然有多个属性),你需要一个mixin(或者某种类型),例如:
.foo {
color: red;
.somename() {
color: blue;
}
.example & {.somename}
@media (min-width: 800px) {.somename}
}
另请参阅Passing Rulesets to Mixins示例(如果您需要更通用的解决方案)。
答案 1 :(得分:1)
感谢 @ seven-phases-max 建议,我终于找到了使用 Detached Ruleset 的可能解决方案:
@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
布尔值切换生成简单媒体查询或媒体查询+后代选择器。答案 2 :(得分:0)
我认为你的逗号可能会导致错误。
.foo {
color:red;
.example & {
color:blue;
@media (min-width:800px) {
color:blue;
}
}
}
这是输出以下内容的正确语法:
.foo {
color: red;
}
.example .foo {
color:blue;
}
@media (min-width:800px) {
.example .foo {
color:blue;
}
}