【问题标题】:override primeng default style with scss file用 scss 文件覆盖primeng默认样式
【发布时间】:2021-02-14 17:48:14
【问题描述】:

我试图覆盖primeng卡上的一种默认样式,但由于某种原因,当我使用scss文件时,样式未应用。下面是我尝试过的代码,同样的代码适用于 css 文件。

我在模板上有以下代码

        <p-card>
            <app-component></app-component>
        </p-card>

并在 scss 文件上尝试过这个

:host >>> .p-card .p-card-body {
    padding:  0.5rem;
}

我在 appComponent 上有这个

import { Component, OnInit } from '@angular/core';

@Component({
  selector: 'app-component',
  templateUrl: './app.component.html',
  styleUrls: ['./app.component.scss']
})
export class AppComponent implements OnInit {

  constructor() { }

  ngOnInit(): void {
  }

}

当我使用 css 但不适用于 scss 文件时,相同的样式有效。我还有什么需要做的吗?

【问题讨论】:

  • 能否也分享一下组件的template(html)代码?
  • 您是否将styleUrls: ['./app.component.css'] 替换为styleUrls: ['./app.component.scss']
  • 我已经更新了问题

标签: angular sass primeng


【解决方案1】:

您可以通过将一个类设置为组件的父类来自定义大多数primeng组件样式,styleClass之后您可以高估组件元素类

模板

<p-card styleClass="ngx-color">
  <app-component></app-component>
</p-card>

示例 样式.scss

.ngx-color {
  &.p-card {
    border-radius: 1rem;
    overflow: hidden;
  }

  .p-card-title {
  }
  .p-card-body {
    padding: 2rem !important;
    background: #a6120d;
    color: #fff;
  }
}

demo ?

检查这个primeng theming

每个组件都有不同的类集,您可以在官方组件文档页面的样式部分查看这些类,例如card

【讨论】:

  • 感谢您的评论,但出于某种原因,我将相同的样式代码移至 app.component.scss 样式文件,但它无法正常工作。我已经用 scss 重命名了你的 app.component.css 并且还在 ts 文件中添加了模板 Url。只是为了确保我添加了另一个 div 并更改了有效的颜色,但卡片样式不是。 stackblitz.com/edit/…
  • 如果将样式移动到组件样式文件中,则需要将encapsulation 设置为none stackblitz.com/edit/…
  • 我认为如果使用主机则不需要。在这里,我没有将封装设置为除了 css 文件。 stackblitz.com/edit/…。寻找相同但在 scss 文件中
  • 如果你不使用自定义类,那么你不需要将封装设置为无
  • 我不会推荐这种方式host &gt;&gt;&gt; .p-card .p-card-body {},因为它不可重复使用但结果是一样的
【解决方案2】:
:host {
  ::ng-deep .p-card .p-card-body {
    padding:  0.5rem;
  }
}

只需将其复制并粘贴到您的 scss 文件中即可。

【讨论】:

  • 这是一种方法,但 Angular 正在慢慢弃用 ::ng-deep 选择器
猜你喜欢
  • 1970-01-01
  • 2018-11-14
  • 1970-01-01
  • 1970-01-01
  • 2019-02-16
  • 1970-01-01
  • 1970-01-01
  • 2019-08-05
  • 2021-11-04
相关资源
最近更新 更多