Angular 2에는 my-comp라는 구성 요소가 있습니다.
<my-comp></my-comp>
Angular 2 에서이 구성 요소의 호스트 요소를 어떻게 스타일링합니까?
Polymer에서는 “: host”선택기를 사용합니다. Angular 2에서 시도했지만 작동하지 않습니다.
:host {
display: block;
width: 100%;
height: 100%;
}
또한 구성 요소를 선택기로 사용하려고 시도했습니다.
my-comp {
display: block;
width: 100%;
height: 100%;
}
두 방법 모두 작동하지 않는 것 같습니다.
감사.
답변
버그가 있었지만 그 동안 수정되었습니다. :host { }
지금은 잘 작동합니다.
또한 지원됩니다
:host(selector) { ... }
selector
호스트 요소에서 속성, 클래스 등을 일치 시키기 위해-
:host-context(selector) { ... }
selector
부모 구성 요소의 요소, 클래스 등을 일치 시키기 위해 -
selector /deep/ selector
selector >>> selector
요소 경계에서 스타일이 일치하도록 (별칭 은 SASS와 함께 작동하지 않음)-
업데이트 : SASS가 더 이상 사용되지 않습니다
/deep/
. SASS와 호환되는 대체품으로
Angular (TS 및 Dart)가 추가::ng-deep
되었습니다. -
UPDATE2 :
::slotted
::slotted
이제 모든 새 브라우저에서 지원되며`ViewEncapsulation.ShadowDom https://developer.mozilla.org/en-US/docs/Web/CSS/::slotted 와 함께 사용할 수 있습니다
-
Angular 2 구성 요소에 외부 CSS 스타일로드를 참조하십시오.
/deep/
하고 >>>
있다 영향을받지 크롬에서 사용되지 않습니다 같은 선택 콤비에 의해.
Angular는 그것들을 에뮬레이트 (다시 쓰기)하므로이를 지원하는 브라우저에 의존하지 않습니다.
이것이 기본 섀도우 DOM을 활성화하고 브라우저 지원에 의존하는 이유 /deep/
와 >>>
작동하지 않는 이유 ViewEncapsulation.Native
입니다.
답변
구성 요소 요소의 스타일을 지정하는 방법에 대한 해결책을 찾았습니다. 작동 방식에 대한 문서를 찾지 못했지만 다음과 같이 속성 값을 ‘host’속성 아래의 구성 요소 지시문에 넣을 수 있습니다.
@Component({
...
styles: [`
:host {
'style': 'display: table; height: 100%',
'class': 'myClass'
}`
})
export class MyComponent
{
constructor() {}
// Also you can use @HostBinding decorator
@HostBinding('style.background-color') public color: string = 'lime';
@HostBinding('class.highlighted') public highlighted: boolean = true;
}
업데이트 : Günter Zöchbauer가 언급했듯이 버그가 있었고 이제 CSS 파일에서도 다음과 같이 호스트 요소의 스타일을 지정할 수 있습니다.
:host{ ... }
답변
이 문제를 확인하십시오 . 새로운 템플릿 사전 컴파일 로직 이 구현 되면 버그가 해결 될 것이라고 생각합니다 . 지금은 템플릿을 래핑 <div class="root">
하고 스타일 을 지정하는 것이 최선이라고 생각합니다 div
.
@Component({ ... })
@View({
template: `
<div class="root">
<h2>Hello Angular2!</h2>
<p>here is your template</p>
</div>
`,
styles: [`
.root {
background: blue;
}
`],
...
})
class SomeComponent {}
참조 이 plunker을
답변
적용하려는 일반적인 스타일이 있다면 Component에서 .class를 호스트 요소에 추가 할 수 있습니다.
export class MyComponent{
@HostBinding('class') classes = 'classA classB';
답변
:host
여기에 자식 요소의 스타일을 지정하려는 사람에게는 사용 방법의 예가 있습니다.::ng-deep
:host::ng-deep <child element>
예 : :host::ng-deep span { color: red; }
다른 사람들이 말했듯 /deep/
이 더 이상 사용되지 않습니다.
답변
: host> / deep / :을 사용해보십시오
parent.component.less 파일에 다음을 추가하십시오
:host {
/deep/ app-child-component {
//your child style
}
}
자식 선택기로 app-child-component를 교체하십시오.