【问题标题】:How to dynamically change variable in mixin function in sass?如何在 sass 中动态更改 mixin 函数中的变量?
【发布时间】:2018-07-09 13:41:54
【问题描述】:

我的 sass 文件中有这个 mixin 函数,每次使用它时我都想从中计数。每次计数器需要增加 1,所以正确的值会相应地改变。

问题是我有一个未排序的列表,其中包含未知数量的元素。列表项可以是某种类型,如果是,它们需要在视图中以完全不同的方式放置。我想通过添加position: absolute 然后添加动态右值(因此它们不会重叠)将它们与站点的右上角对齐。

我不知道我的方法是否正确,但我的问题是如何动态更改 $item-number 变量,然后稍后引用该值?

$item-number: 1 !default;

@function times($value1, $value2) {
    @return $value1 * $value2;
}

@function plus($value1, $value2) {
    @return $value1 + $value2;
}

@mixin child($n) {
    $item-number: plus($n, 1);
    &:nth-child(#{$n}){
          right: times(50px, $n) !important;
    }
}

li {

    @include media-breakpoint-up(lg) {
            position: absolute;
            top: -30px;
            right: 0;
            @include child($item-number);
    }
}

【问题讨论】:

  • Sass 不能满足你的要求——它对你的 HTML 没有任何了解。然而,可能还有另一种方式。你说这些项目是“某种类型的”——它们有我们可以使用的唯一类或选择器吗?
  • 是的,假装 li 是班级。列表项的类型分离已经实现。我需要的是一个动态的正确值
  • 对不起,你能发布一些示例 HTML 吗?它可能会帮助我回答这个问题。
  • HTML 只是 ul 标签内的一堆 li。其他一切似乎与这个问题无关
  • 也许我误解了:您最初的描述暗示只有一些 ul 中的li 项目应该在右上角对齐。这些项目需要一个唯一的类或属性,以便我们可以定位它们并忽略其他普通的li 项目。

标签: css sass


【解决方案1】:

你需要专门循环mixin一定次数,否则sass怎么知道要创建多少nth-child选择器?

我已经删除了您的自定义函数以使我的示例更简洁,但是您可以看到我创建了一个围绕对 mixin 的调用的循环,该循环运行 9 次,每次都将索引传递给函数:

@mixin child($n) {
    &:nth-child(#{$n}){
        right: (50px * $n) !important;
    }
}

li {
    position: absolute;
    top: -30px;
    right: 0;

    @for $i from 1 through 9 {
        @include child($i);
    }
}

【讨论】:

  • 我不知道该列表将包含多少项 - 因为它来自 cms 系统。单独使用 sass 似乎是不可能的。 - 如果循环大于元素的数量会发生什么?假设我知道列表的长度最大为 15
  • 什么都不会真正发生,您只需要定义循环运行的次数,这反过来意味着特定数量的 css 类将可用。真的你想将值设置为尽可能低,这样你就不会得到不必要的 css。如果您认为列表最长为 15 个项目,只需将循环设置为运行 15 次,如果您不确定,请将其设置为 20、25 等。
  • 好的,这可能是一个很好的解决方案,当我验证时会更新。谢谢!
猜你喜欢
  • 2013-03-22
  • 2017-07-12
  • 2019-06-09
  • 1970-01-01
  • 2013-12-12
  • 2012-04-05
  • 2013-04-15
相关资源
最近更新 更多