【问题标题】:Sass extra white space when using #{$this}使用 #{$this} 时 Sass 额外的空白
【发布时间】:2017-09-10 08:05:10
【问题描述】:

我有一个这样的元素

.block{
    $this: &;

    &__element{
    // styles go here
    }

    &:hover{
        #{$this}__subelement {
        // styles go here
        }
    }
}

这基本上是为了让我可以在将鼠标悬停在包含它的块上时对子元素进行更改(我正在使用 BEM)。但是在编译时 Sass 会增加额外的空间

.block:hover .block__subelement  {
// styles go here
}

并且使该样式无效。避免这种情况的唯一方法是编写

.block{
    $this: &;

    &__element{
    // styles go here
    }

    &:hover{
        #{$this}__subelement{ // remove spacing here
        // styles go here
        }
    }
}

为什么会这样?是因为我使用的加载器还是?

【问题讨论】:

    标签: css sass


    【解决方案1】:

    Sass 编译器将始终在父定义和子定义之间添加一个空格,除非您使用与符号 & 指定父规则的位置

    您只需要在该规则的开头添加一个 & 符号:

    .block{
        $this: &;
    
        &__element{
        // styles go here
        }
    
        &:hover{
            // Add ampersand to reference parent rule here
            &#{$this}__subelement{ // remove spacing here
            // styles go here
            }
        }
    }
    

    【讨论】:

    • 我可能不够清楚。我想要.block.block .block__subelement 之间的空间,我想要摆脱的空间是.block__subelement{ 之间的空间
    • 我觉得这个问题有点奇怪。 :) 规则和定义之间的空格根本不应该影响规则。见this example。这是浏览器显示中断还是 BEM 没有正确编译它们?
    • 奇怪,因为在我的项目中,额外的空间使样式不起作用:S 一定是一些 stylelint 问题或类似的东西:/ 感谢您的帮助
    猜你喜欢
    • 2020-02-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-03
    • 1970-01-01
    相关资源
    最近更新 更多