当前位置: 首页 > 面试题库 >

将“ Long Shadow” SASS混合转换为Less

夏骏
2023-03-14
问题内容

我尝试重写sass mixin以生成较长的文本阴影

以减少mixin

.long-shadow(@type, @color, @length, @fadeout: true, @skew: false, @direction: right){


 @shadow : '';
  .if @skew == false or @type == text{
    .if @direction == right {@
      @for @i from 0 to @length - 1 {
        @shadow: @shadow + @i + 'px ' + @i + 'px 0 ' + @color + ',';
      }
    }
    .if @direction == left {@
      @for @i from 0 to @length - 1 {
        @shadow: @shadow + @i * -1 + 'px ' + @i + 'px 0 ' + @color + ',';
       }
      }
     }

   .if @fadeout == true{
    @for @i from 1 to @length - 1 {
      .if @type == text or @skew == false{
        .if @direction == right{
          @shadow: @shadow + @i + 'px ' + @i + 'px 0 ' +       rgba(@color, 1 - @i / @length) + ',';
        }
        .if @direction == left{
          @shadow: @shadow + @i * -1 + 'px ' + @i + 'px 0 ' +       rgba(@color, 1 - @i / @length) + ',';
        }
      }
      .if (@type == box) and @skew == true{
        .if @direction == right {
          @shadow: @shadow + @i + 'px ' + @i + 'px 0 ' + @i * .2 + 'px ' + rgba(@color, 1 - @i / @length) + ',';
        }
        .if @direction == left {
          @shadow: @shadow + @i * -1 + 'px ' + @i + 'px 0 ' + @i * .2 + 'px ' + rgba(@color, 1 - @i / @length) + ',';
        }
      }
  }
  @shadow: @shadow + @length + 'px ' + @length + 'px 0 ' + rgba(@color, 0);
 }
 .if @fadeout == false{
   .if @skew == true and ( @type == box ){
     @for @i from 0 to @length - 1 {
            @shadow: @shadow + @i + 'px ' + @i + 'px 0 ' + @i * .1 + 'px ' + @color + ',';
      }
   }
    @shadow: @shadow + @length + 'px ' + @length + 'px 0 ' + rgba(0,0,0,0);
 }
 @shadow: unquote(@shadow);
  .if @type == 'box' {box-shadow: @shadow;}
  .if @type == 'text' {text-shadow: @shadow;}
}

但这不起作用。
即使在第一行也出现错误

ParseError: Unrecognised input
in style.less on line 2255, column 13:

2254
2255.long-shadow(@type, @color, @length, @fadeout: 'true', @skew: 'false', @direction: 'right'){
2256  @shadow : '';

可以请人帮我吗?


问题答案:

好吧,简而言之,除了变量和混合声明之类的非常基本的语言语句外,SCSS和Less实际上是完全不同的语言。因此,当涉及到更高级的东西时,例如可变范围和生存期,迭代和条件结构等,它们之间没有直接转换。此外,由于此特定的mixin也是“意大利面条代码”的几乎完美示例,因此从头开始编写这样的mixin实际上比尝试“逐行”转换它更容易:

@import "for";

.long-shadow(@type, @color, @length, @fadeout: true, @scew: false, @direction: right) {
    .-() {
        @dir:  1px;
        @offset: 0;
        @s: (.5px * @i);
        @a: (1 - @i / @length);
        @c: fade(@color, (100% * alpha(@color) * @a * @a));
    }
    .-() when (@direction = left) {@dir: -1px}
    .-() when (@type = box)       {@offset: 1}
    .-() when (@scew = false)     {@s: ;}
    .-() when (@type = text)      {@s: ;}
    .-() when (@fadeout = false)  {@c: @color}

    .for(0, (@length - 1)); .-each(@i) {
        .-();
        @x: (@dir * (@i + @offset));
        @y: (1px  * (@i + @offset));
        @{type}-shadow+: @x @y 0 @s @c;
    }
}

usage {
    .long-shadow(text, red,  4, true, false, right);
    .long-shadow(box,  blue, 4, false, true, left);
}

。它与原始的mixin不完全兼容,例如:

  • mixin仅接受未加引号的参数(例如boxand true代替'box'and 'true'
  • 使用稍微不同的处理方式fadeout(可能会更好,请参见下面的PPS)
  • 不禁fadeout用该text类型(似乎有不必要的限制)
  • 产生不同的scew大小

因此,如果您需要精确的克隆,则取决于您进行进一步的修改。

PS是的,并链接]到进口的"for"糖果。

PPS顺便说一句,有更好的淡出方法,效果更自然。



 类似资料:
  • 本文向大家介绍sass 创建和使用混合,包括了sass 创建和使用混合的使用技巧和注意事项,需要的朋友参考一下 示例 要创建一个mixin,请使用@mixin指令。 您可以在mixin名称后面的括号内指定参数列表。切记以变量开头,$并用逗号分隔。 要在另一个选择器中使用mixin,请使用@include指令。 从混入样式将目前在使用footer,并header与值#ccc的$color变量,#dd

  • 问题内容: 问题 与新HashSet(Collection)等效的Scala)相关,如何将Java集合(例如)转换为Scala集合? 我实际上是在尝试将Java API调用转换为Spring的 (返回a )成Scala不可变。因此,例如: 这似乎有效。欢迎批评! 问题答案: 您的最后一条建议有效,但您也可以避免使用: 请注意,默认情况下,由于提供了此功能。

  • LongShadow 是 UILabel 的扩展,可以产生动态的长阴影效果。

  • 现有两个名为getDetails(…)的方法 。一个需要至少一个必需参数,另一个需要一个集合(不验证集合的内容/大小)。 问题是集合有时会作为空传递,并且根据我的业务案例,我总是期望至少传递一个值。因此,我需要将该方法设为私有,它接受集合。 我计划将下面的方法作用域设置为private,这样调用者就不会使用零属性调用此方法。 调用方方法之一是将集合对象传递给下面的getDetails, id.ge

  • 为了了解图像分类问题,我想使用tf加载数据。数据数据集类。 输入_X值是一个包含文件路径的列表 ex.[path/to/image1.jpg,/path/to/image2.jpg,…] input_Y值是与input_X匹配的标签名称列表。 例如。['cat','cat','dog',…] 我想使用功能和我的生成器功能。 下面是我的代码: 如果执行下一步(生成器),我将获得以下输出: 在定义了这

  • 我想在Scala中映射Java数组。对于普通的Java集合,我知道我可以使用 但是,对于阵列,此转换不起作用: 那么,如何将Java数组转换为Scala集合、iterable或可以映射的对象呢?