css - Angular:SCSS/SASS 编译器产生不需要的空格

标签 css angular sass compiler-errors

<分区>

我在 Angular 7 元素中有 *.scss 文件。

编译后,编译器会向 css 添加不需要的空格,这会导致 UI 中出现错误结果。

要重现错误,请转到...

https://www.sassmeister.com/

...复制并粘贴以下代码。

$color-background-default:  white;
$color-foreground-default:  black;

$color-background-disabled: #d3d3d3;
$color-foreground-disabled: #808080;

$color-background-mouseover: #00a7dc;
$color-foreground-mouseover: white;

$color-background-mousedown: #00467F;
$color-foreground-mousedown: white;

.Tab
{
    background-color: $color-background-default;
    color:            $color-foreground-default;

    :hover
    {
        background-color: $color-background-mouseover;
        color:            $color-foreground-mouseover;
    }
    :active
    {
        background-color: $color-background-mousedown;
        color:            $color-foreground-mousedown;
        border-color:     $color-background-mousedown;
    }
}

在 Sassmeister 的 CSS 框中,您应该会看到“.Tab”与“hover”和“active”之间的空格,如下所示:

.Tab {
  background-color: white;
  color: black;
}
//WHITESPACE AFTER Tab
.Tab :hover {
  background-color: #00a7dc;
  color: white;
}
 //WHITESPACE AFTER Tab
.Tab :active {
  background-color: #00467F;
  color: white;
  border-color: #00467F;
}

现在,当我删除 Tab 和悬停之间的空格并激活时,它看起来像这样:

.Tab {
  background-color: white;
  color: black;
}
//NO WHITESPACE AFTER Tab!
.Tab:hover {
  background-color: #00a7dc;
  color: white;
}
 // NO WHITESPACE AFTER Tab!
.Tab:active {
  background-color: #00467F;
  color: white;
  border-color: #00467F;
}

没有空格的第二个选项为我提供了正确的 UI 结果。

我的问题:如何避免 Angular 7 中出现这些空格?

最佳答案

The parent selector, &, is a special selector invented by Sass that’s used in nested selectors to refer to the outer selector. It makes it possible to re-use the outer selector in more complex ways, like adding a pseudo-class or adding a selector before the parent. (from SASS official documentation)

因此,当您为伪类(before、after、hover、active 等)编写规则以引用外部选择器(仅高一级)时,像这样放置 & 符号:

.link {
  color: blue;

  &:hover {
    color: green;
  }
}

因此,您的 SCSS 代码可以重写为:

$color-background-default:  white;
$color-foreground-default:  black;

$color-background-disabled: #d3d3d3;
$color-foreground-disabled: #808080;

$color-background-mouseover: #00a7dc;
$color-foreground-mouseover: white;

$color-background-mousedown: #00467F;
$color-foreground-mousedown: white;

.Tab
{
    background-color: $color-background-default;
    color:            $color-foreground-default;

    &:hover
    {
        background-color: $color-background-mouseover;
        color:            $color-foreground-mouseover;
    }

    &:active
    {
        background-color: $color-background-mousedown;
        color:            $color-foreground-mousedown;
        border-color:     $color-background-mousedown;
    }
}

关于css - Angular:SCSS/SASS 编译器产生不需要的空格,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56419219/

上一篇:html - 如何创建一个上方一列下方两列的引导网格?

下一篇:javascript - 如何使用 jQuery .attr() 更改 id 字体大小?

相关文章:

html - 如何将位于包裹的 div 内的标签居中?

html - 伪类不适用于类

node.js - 如何不对 Angular2 环境变量(例如 API URL)进行硬编码

javascript - 如何在 SvelteKit 中设置 SCSS 导入的基本路径?

javascript - 使元素的宽度达到其祖父元素的 100%

css - 到处使用 col-xs-* 是个好习惯吗?

css - 移动设备中的 z-index 无法正常工作

javascript - 无法绑定(bind)到 'routerLink',因为它不是已知的 native 属性

.net - (TTFB) 某些特定请求花费的时间比执行实际请求的时间长

css - 如何在 Sass/HTML 中使用 if/else 条件?