【问题标题】:SASS/SCSS's @if for choosing the type of image to use?SASS/SCSS 的 @if 用于选择要使用的图像类型?
【发布时间】:2012-09-03 20:16:16
【问题描述】:

这是我第一次尝试使用来自SASS@if 控制指令

我有一个文件夹中的优化图像列表,其中一些像 JPG 一样小,而另一些像 PNG 一样小。

使用@if 规则我想说“如果该文件的JPG 存在,则使用此@include,否则使用另一个”

(示例中的 gif 只是为了澄清我是否至少得到了 else if 部分正确。)

我的例子:

$list: A, B, C;

$type: jpg;

@mixin portfolio-images {
    @each $item in $list {
        a[href*="#{$item}"] span {

            /* @if starts */   

            @if $type == jpg {@include background-image-retina("#{$item}.jpg");}
            @else if $type == png {@include background-image-retina("#{$item}.png");}
            @else {@include background-image-retina("#{$item}.gif");}

            /* @if ends */   


            @include hide-text;
            width: 300px;
            height: 150px;
        }
    }
}

不知何故,我似乎弄错了,需要您的帮助。 JPG 显示正常,但 PNG 根本不显示 - CSS 文件中没有编译输出。

我使用@include background-image-retina 并且不能像this fabulous mixin 那样为图像类型定义自定义变量。所以我不确定如何解决这个问题。


更新:就像@lnrbob 指出的那样 - 无法使用 SASS 检查现有文件。我将答案标记为正确,因为他提供了一个出色的 @if 示例,从长远来看,它帮助我理解了这个 SASS 功能。

【问题讨论】:

    标签: css image if-statement sass


    【解决方案1】:

    我很困惑你在这里做什么。 SASS 不会检查您的文件系统以查看是否存在 A.jpg 或 'A.png`。您需要更新变量。所以在你的例子中(我认为)它应该是这样的:

    $list: A, B, C;
    
    @mixin portfolio-images($type: 'jpg') {
        @each $item in $list {
            a[href*="#{$item}"] span {
    
                /* @if starts */   
    
                @if $type == jpg {@include background-image-retina("#{$item}.jpg");}
                @else if $type == png {@include background-image-retina("#{$item}.png");}
                @else {@include background-image-retina("#{$item}.gif");}
    
                /* @if ends */   
    
    
                @include hide-text;
                width: 300px;
                height: 150px;
            }
        }
    }
    

    你会像这样使用它:

    @include portfolio-images('png');
    

    我不认为这是您想要实现的目标,不是吗?如果您想复制retina-compass helper 的功能(您已链接到@include background-image-retina),您需要将其作为一些ruby 脚本执行,以输入SASS 使用的编译过程(在此示例中为helper使用Compass)。

    我希望这至少会有所帮助。如果我完全误解了,请告诉我,我会复习:)

    【讨论】:

    • 感谢您指出 SASS 不会检查我的文件系统 - 例如:a.jpg 和 b.png。我的目标只是包含一个,这基本上是我希望实现的。 /// 我的假设是如果其他人可以通过 @ if 检查是否存在某个颜色值,我也可以检查类型条件。我知道这是不可能的,因为“@each”列表的输出尚未编译。 /// 我想我会保留不带@if 的旧版本并简单地构建两个列表(一个用于jpg,另一个用于png)。
    • 不用担心。请记住 @mixin 评估您发送的参数。因此,在链接到 SASS 编辑器的那个颜色示例中,将在每种情况下指定颜色(除非他们在其他地方设置了默认值,在这种情况下,他们将能够在特定情况下覆盖默认值)。
    猜你喜欢
    • 1970-01-01
    • 2017-11-27
    • 2015-06-27
    • 1970-01-01
    • 1970-01-01
    • 2012-06-27
    • 1970-01-01
    • 2014-07-31
    • 1970-01-01
    相关资源
    最近更新 更多