【问题标题】:SASS Text Shadow With Alpha带有 Alpha 的 SASS 文本阴影
【发布时间】:2014-08-28 01:32:05
【问题描述】:

我对 SASS 比较陌生,正在尝试将以下代码转换为 SASS mixin,以防止不得不全部手写。谁能帮我?我已经研究了两天,似乎无法让它工作,但就像我说的,我是 SASS 的新手。这是我想更改为 mixin 的普通 CSS:

text-shadow: 
1px 1px 0 rgba(0,0,0,0.50), 
2px 2px 0 rgba(0,0,0,0.49), 
3px 3px 0 rgba(0,0,0,0.48), 
4px 4px 0 rgba(0,0,0,0.47), 
5px 5px 0 rgba(0,0,0,0.46), 
6px 6px 0 rgba(0,0,0,0.45), 
7px 7px 0 rgba(0,0,0,0.44), 
8px 8px 0 rgba(0,0,0,0.43) 
[...and so on to about 50]

我能够获得一个可以生成文本阴影深度的 mixin,但是当我尝试调整 alpha 时,我收到了警告,因为该值超过了 1 并且不透明度需要介于 0 和 1 之间的值。

这是我尝试过的代码(编译良好,但没有输出):

@mixin render-shadow($depth){
    $longshadow: ();
    @for $i from 1 through $depth {
        @while $alpha > 0 {
            $alpha: 0.50;
            $longshadow: $longshadow, $i*1px $i*1px 0 rgba(0,0,0,$alpha);
        }
    }
    text-shadow: $longshadow;
}

我也试过了:

@mixin render-shadow($depth){
    $longshadow: ();
    @for $i from 1 through $depth {
        $longshadow: $longshadow, $i*1px $i*1px 0 rgba(0,0,0,($i - 0.01));
    }
    text-shadow: $longshadow;
}

这给了我这个错误:

Syntax error: Alpha channel 1.99 must be between 0 and 1 for `rgba'

还有:

@mixin render-shadow($depth){
    $longshadow: ();
    @for $i from 1 through $depth {
        $alpha: 0.50;
        $longshadow: $longshadow, $i*1px $i*1px 0 rgba(0,0,0,($alpha - 0.01));
    }
    text-shadow: $longshadow;
}

它渲染了阴影,但不透明度为 0.49,而不是递增到 0。

【问题讨论】:

  • 我不明白这个问题。我在这里没有看到 mixin,也没有看到超出 0 和 1 的值。
  • 这是普通的 CSS 代码。我想将其转换为 mixin,这样我就不必全部输入了。
  • 那么您尝试过什么了吗? SO 不是一个代码编写服务,你应该展示你尝试过的东西以及为什么它没有工作......你知道,表明你已经做出了努力。
  • 我已经尝试了很多东西,但它们都远非正确。我认为发布它们只会混淆问题,因为我知道我需要从头开始。我只是在寻找一些关于如何以这种方式使用 SASS 的指示。我不是在找人来写我的代码。如果有人只是向我指出此类事情的正确 SASS 文档的方向,我会很好。如果有帮助,我尝试在stackoverflow.com/questions/12975097/… 修改技术。
  • @cimmanon:我已根据您的要求添加了我的尝试,以便您查看我的尝试。

标签: css sass rgba


【解决方案1】:

这里的问题是您没有有效地计算 alpha 变化。

在您的第一个示例中,当您进行第 50 次迭代时,($i - 0.01) 的计算结果为 49.01。在您的第二个示例中,您从未更新您的 $alpha 变量,因此它始终评估为 .49

您会希望执行更像这样的计算:

@mixin render-shadow($depth, $alpha-start: 1, $alpha-step: 0.01) {
    $longshadow: ();
    @for $i from 1 through $depth {
        $longshadow: append($longshadow, $i * 1px $i * 1px 0 rgba(0, 0, 0, $alpha-start - ($i * $alpha-step)));
    }
    text-shadow: $longshadow;
}

.foo {
  @include render-shadow(50);
}

您需要检查以确保 $alpha-start - ($i * $alpha-step) 没有落在 0 和 1 之外(这完全有可能,具体取决于您创建的阴影数量以及您的 alpha 开始/步长值是多少)。

值得注意的是,从 Sass 3.4 开始,alpha 值被限制了(即,无论如何您都不会再收到此错误了)。

【讨论】:

  • 非常感谢您!这正是我一直在寻找的。感谢您解释我做错了什么。如果我可以投票给你,我会的,但我还没有足够的声誉。再次感谢您!
【解决方案2】:

您可以为此使用循环,如下所示:

$i: 0.50;
$px: 1;

@while $i > 0 {
  .selector {
    text-shadow: #{$px}px #{$px}px 0 rgba(0,0,0, $i);
  }
  $i: $i - 0.01;
  $px: $px + 1;
}

或者如果你想使用mixin,你可以这样做:

@mixin text-shadow($start, $px) {
  text-shadow: #{$px}px #{$px}px 0 rgba(0,0,0, $start);
}

$i: 0.50;
$px: 1;

@while $i > 0 {
  .selector {
    @include text-shadow($i, $px);
  }
  $i: $i - 0.01;
  $px: $px + 1;
}

希望这会有所帮助。

【讨论】:

  • 嗨!非常感谢您的快速回复。我让它主要与上面的代码一起工作,但是我得到了多个“文本阴影”,而不是附加了多个阴影的单个“文本阴影”,例如 ' text-shadow: 1px 1px 0 rgba(0, 0 , 0, 0.5);文本阴影:2px 2px 0 rgba(0, 0, 0, 0.49);'等等而不是'文本阴影:1px 1px 0 rgba(0, 0, 0, 0.5), 2px 2px 0 rgba(0, 0, 0, 0.49);'等
猜你喜欢
  • 1970-01-01
  • 2011-10-16
  • 1970-01-01
  • 2018-02-12
  • 1970-01-01
  • 2011-10-15
  • 1970-01-01
  • 2013-02-11
  • 1970-01-01
相关资源
最近更新 更多