【问题标题】:css, change less variable with @mediacss,使用@media 更改更少的变量
【发布时间】:2013-04-02 09:50:13
【问题描述】:

我目前正在参与一个响应迅速的网站项目,而 less 确实有很大帮助。

但我想要一个大小变量根据窗口大小而改变。 我已经尝试了以下代码,但它似乎不起作用。这可能吗,还是我应该尝试另一种方法?

@menu-width: 300px; // default size

@media only screen and (max-width: 400px) {
  @menu-width: 100px // smaller size
}

.menu {
  width: @menu-width;
}

【问题讨论】:

  • 没有纯 CSS 方法可以知道用户的窗口大小。如果你想继续使用 CSS,你能做的最好的就是使用百分比。另一种方法是使用像 JavaScript 这样的脚本语言来捕捉窗口的大小。
  • CSS pre-processor with a possibility to define variables in a @media query 的可能重复项。这不是@media 的本质,这纯粹是一种 CSS 能力,而不是 LESS 预处理器能力。请参阅重复的问题链接以获得进一步的解释。
  • 所以你只是想要不同的代码用于不同的分辨率?

标签: css variables less


【解决方案1】:

由于我似乎没有得到很多支持将其作为this question 的副本关闭,所以我基本上会重复我的答案(有一些变化)。

记住 @media 是 CSS 查询,而不是 LESS 查询

@media 查询是一种 CSS 功能,它允许当前加载的 CSS 响应它正在呈现的媒体(通常是某种类型的浏览器,但可以是打印等)。

LESS 是一个 CSS 预处理器,它在 加载到浏览器之前创建 CSS,因此之前媒体一直在被检查(这是在 CSS 本身中完成的,在 LESS 生成之后)。

因此,LESS 的正确方法是使用与直接 CSS 相同类型的输出,这意味着您必须在 @media 查询中重复 .menu 选择器,以便其值随媒体类型而变化。

最终的 CSS 输出应该是这样的

@media only screen and (max-width: 400px) {
  .menu {
    width: 100px; 
  }
}

.menu {
  width: 300px;
}

有多种方法可以使用 LESS 生成类似的内容。严格按照上面的基本格式,有这样的:

@menu-width: 300px; // default size

@media only screen and (max-width: 400px) {
  .menu {
    width: @menu-width - 200px; /* assuming you want it dynamic to default */
  }
}

.menu {
  width: @menu-width;
}

还要看:

【讨论】:

  • 我知道@media 不是一个 LESS 功能,但希望它能以某种方式帮助我自动重复 .menu 选择器。由于似乎无法做到,因此我手动按照您的第一个示例进行操作。
【解决方案2】:

是的,但这样你必须全部重写

最好的方法应该是(但它不起作用)

@w : 10px

@media (min-width: 1440px) {

    @w:500px;

}
@media (min-width: 1024px) and (max-width: 1280px) {

@w:300px;

}

@media (min-width: 800px) and (max-width: 1020px) {

    @w:200px;
}

.any{
        width:@w;
    }

【讨论】:

  • 阅读上一个答案,@ScottS 详细解释了为什么这是不可能的。
猜你喜欢
  • 2018-08-09
  • 1970-01-01
  • 2015-08-15
  • 2015-01-21
  • 2016-10-26
  • 1970-01-01
  • 1970-01-01
  • 2021-03-23
  • 2012-09-17
相关资源
最近更新 更多