首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >突破范围

突破范围
EN

Stack Overflow用户
提问于 2013-03-18 17:25:10
回答 2查看 1.1K关注 0票数 2

理想情况下,我希望这样做:

代码语言:javascript
复制
@w: 4px;

@media (max-width:900px) {
    @r: 3px; 
}
@media (min-width:900px) {
    @r: 5px; 
}

.myclass {
    border-radius: @w + @r;
}

这不能编译,因为我定义.myclass的作用域中没有定义@r。显而易见的解决方案是要么在@media块中定义.myclass,要么在.myclass的定义中复制@media查询。

但是,一旦在许多类中使用了@r,两种解决方案都会变得杂乱无章,并且涉及许多重复操作。

有干净的干洗液吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-03-18 19:04:35

只需使用mixin,它将根据mediaquery计算属性值。不需要通过导入来执行此操作。

更少的

代码语言:javascript
复制
@w: 4px;
.bordermixin(@w,@r) {
  .myclass{
    border-radius: @w + @r;
  }
}
@media (max-width:900px) {
    .bordermixin(@w,3px);
}
@media (min-width:900px) {
    .bordermixin(@w,5px);
}

CSS:

代码语言:javascript
复制
@media (max-width: 900px) {
  .myclass{
    border-radius: 7px;
  }
}
@media (min-width: 900px) {
  .myclass{
    border-radius: 9px;
  }
}
票数 6
EN

Stack Overflow用户

发布于 2013-03-18 18:06:05

我找到了一个基于@import的解决方案,它让我保持干爽。

我制作了两个文件:

classes.less

代码语言:javascript
复制
@w: 4px;

.myclass {
    border-radius: @w + @r;
}

mediawidth.less

代码语言:javascript
复制
@media (max-width:900px) {
    @r: 3px; 
    @import "classes.less";
}
@media (min-width:900px) {
    @r: 5px; 
    @import "classes.less";
}

生成的CSS :

代码语言:javascript
复制
@media (max-width: 900px) {
  .myclass {
    border-radius: 7px;
  }
}
@media (min-width: 900px) {
  .myclass {
    border-radius: 9px;
  }
}

这样,我就不需要重复许多类的定义,只需要导入。

我接受了Martin的答案,在最常见的情况下,当只有几个变量需要传递时,这个答案要简洁得多。我的解决方案可能是,一旦你有了更多的变量,当你的类被定义在许多文件中时,我的解决方案就会变得更加干练和干净。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15473328

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档