css - 在规则集中使用来自 mixin 的变量

标签 css less

这是我第一次使用 LESS,我正在尝试让一些元素根据媒体查询进行缩放。

所以我想我会做一个 .scale 混合来为我做这件事。

.scale(@rules) {
    @scale-ratio: 1;
    @media screen and (min-width: (@page-width)) { @rules(); }
    @scale-ratio: 0.8;
    @media screen and (min-width: (@page-width * 0.6), max-width(@page-width - 1)) { @rules(); }
    @scale-ratio: 0.6;
    @media screen and (max-width: (@page-width * 0.6 - 1)) { @rules(); }
}

// Using like
header {
    .scale({
        width: @page-width * @scale-ratio;
    });
}

有什么办法可以让它发挥作用吗?还是通过其他方法?我只是不想退回到必须为每个媒体查询编写属性。

请求预期输出:

@media screen and (min-width: 1280px) {
    header {
        width: 1280px;
    }
}
@media screen and (min-width: 768px, max-width: 1279px) {
    header {
        width: 1024px;
    }
}
@media screen and (max-width: 767px) {
    header {
        width: 768px;
    }
}

有了这个输入,这是预期的输出,但这只是一个剥离的例子。

最佳答案

变量的范围仅限于 block (它们表现得像常量,顺序不影响它们)。限制范围以便重新定义变量的一种方法是在 &{} block 中声明它们。

下面的 mixin 生成您期望的 CSS:

.scale(@rules) {
    &{
      @scale-ratio: 1;
      @media screen and (min-width: (@page-width)) { @rules(); }
    }
    &{
      @scale-ratio: 0.8;
      @min-width: (@page-width * 0.6);
      @max-width: (@page-width - 1);
      @media screen and (min-width: (@min-width), ~'max-width: @{max-width}') { @rules(); }
    }
    &{
      @scale-ratio: 0.6;
      @media screen and (max-width: (@page-width * 0.6 - 1)) { @rules(); }
    }
}

我不得不将 max-width 部分放在撇号内,因为它会导致错误(我真的不知道为什么)。

使用:

@page-width: 1280px;

结果是:

@media screen and (min-width: 1280px) {
  header {
    width: 1280px;
  }
}
@media screen and (min-width: 768px, max-width: 1279px) {
  header {
    width: 1024px;
  }
}
@media screen and (max-width: 767px) {
  header {
    width: 768px;
  }
}

关于css - 在规则集中使用来自 mixin 的变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23251514/

相关文章:

javascript - RequireJS - 使用 CDN 加载非脚本文件

html - 两排 sticky-top

javascript - 下拉列表的值 -> 文本框展开

css - 菱形/旋转方形边框

node.js - 使用 npm 安装 less 时遇到问题

html - 在 Chrome 或 Firefox 中使用 less.js 和 @media -sass-debug-info 调试 LESS

php - 如何根据 PHP 代码或 URL 方向的变化激活 CSS 属性?

jquery - 裁剪/隐藏 HTML img 标签而不是变形/拉伸(stretch)它

css - 如何将包含百分比的变量转换为 LESS 中的数字,但保留普通数字?

visual-studio-2012 - Visual Studio 中的 LESS 文件未突出显示语法