css 样式不应用于子组件

rslzwgfq  于 2023-04-13  发布在  其他
关注(0)|答案(5)|浏览(201)

我尝试将样式应用到子组件标记,但我不能这样做。
我有一个带锚标记的子组件。
即使我在父组件中为锚标签设置了样式,它也不适用。有什么解决方案吗?
工作代码:http://plnkr.co/edit/CJCpV4ZbG7hdxT2AeSmt?p=preview

<a href="https://www.google.com">Google</a>

在父组件中,我使用子组件并为该子组件应用样式。
HTML代码:

<div class="container">
  <div class="test">
    <testapp></testapp>
  </div>
</div>

CSS代码:

.container{
  font-family:sans-serif;
  font-size:18px;
  border: 1px solid black;
}
.test{
  width:50%;
  background-color:#f0f5f5;
}

.container:hover .test{
  background-color:#e6ffe6;
}
.container:hover .test:hover{
  background-color:#ffffe6;
}
.container .test a {
    color:   red ;
}
.container .test a:hover {
    color:green;
}
ao218c7q

ao218c7q1#

这是因为默认情况下组件具有视图封装(shadow dom)。要禁用此行为,您可以利用encapsulation属性,如下所述:

import {Component, ViewEncapsulation} from '@angular/core';
import {TestApp} from 'testapp.component.ts';
@Component({
  selector:'test-component',
  styleUrls: ['test.component.css'],
  templateUrl: './test.component.html',
  directives:[TestApp],
  encapsulation: ViewEncapsulation.None // <------
})
export class TestComponent{

}

看看这个plunkr:http://plnkr.co/edit/qkhkfxPjgKus4WM9j9qg?p=preview

w46czmvw

w46czmvw2#

当使用styleUrls属性时,样式是一个组件的 * 本地 *,而不是其子组件的。所以我做了两个更改:1)将styleUrls移动到testapp组件。2)将div移动到testapp组件。

import {Component} from '@angular/core';
@Component({
 selector:'testapp',
 styleUrls: ['./test.component.css'],
 template: `
 <div class="test">
  <a href="https://www.google.com">Google</a>
 </div>

 `

})
export class TestApp{

}
ndasle7k

ndasle7k3#

编辑:这应该解决:
在css的子类中写下面的代码

:host.parentclass childclass{

}

parentclass是child的直接父类。childclass是应用于子组件的类。

6qqygrtg

6qqygrtg4#

只需将父组件样式添加到子组件样式url数组中,并确保您给予了父css url的正确路径。
请参阅下面的代码以供参考。
//在子组件@component中:

@component({
 styleUrls: ['./../parent.component.css', './child.component.css'],
})
vsaztqbk

vsaztqbk5#

我已经解决了这样的问题,根据情况覆盖了不适用于::ng-deep{}:host::ng-deep{}的样式:

::ng-deep{
   // your styles
}

或者

:host ::ng-deep {
    // your styles
}

相关问题