cập nhật 2 ::slotted
::slotted
hiện được hỗ trợ bởi tất cả các trình duyệt mới và có thể được sử dụng với ViewEncapsulation.ShadowDom
https://developer.mozilla.org/en-US/docs/Web/CSS/::sliated
cập nhật 1 :: ng-sâu
/deep/
đã bị phản đối và thay thế bởi ::ng-deep
.
::ng-deep
cũng đã được đánh dấu không dùng nữa, nhưng vẫn chưa có sự thay thế nào.
Khi ViewEncapsulation.Native
được hỗ trợ chính xác bởi tất cả các trình duyệt và hỗ trợ tạo kiểu theo ranh giới DOM bóng, ::ng-deep
có thể sẽ bị ngừng.
nguyên
Angular thêm tất cả các loại lớp CSS vào HTML, nó thêm vào DOM để mô phỏng đóng gói CSS DOM bóng tối để ngăn chặn các kiểu chảy máu vào và ra khỏi các thành phần. Angular cũng viết lại CSS mà bạn thêm để khớp với các lớp được thêm này. Đối với HTML được thêm bằng [innerHTML]
các lớp này không được thêm vào và CSS được viết lại không khớp.
Như một cách giải quyết
- cho CSS được thêm vào thành phần
/* :host /deep/ mySelector { */
:host ::ng-deep mySelector {
background-color: blue;
}
- cho CSS được thêm vào
index.html
/* body /deep/ mySelector { */
body ::ng-deep mySelector {
background-color: green;
}
>>>
(và tương đương /deep/
nhưng /deep/
hoạt động tốt hơn với SASS) và ::shadow
đã được thêm vào 2.0.0-beta.10. Chúng tương tự như các tổ hợp CSS DOM bóng tối (không dùng nữa) và chỉ hoạt động với encapsulation: ViewEncapsulation.Emulated
mặc định trong Angular2. Họ có thể cũng làm việc với ViewEncapsulation.None
nhưng sau đó chỉ bị bỏ qua vì không cần thiết. Các tổ hợp này chỉ là một giải pháp trung gian cho đến khi các tính năng nâng cao hơn cho kiểu dáng thành phần chéo được hỗ trợ.
Một cách tiếp cận khác là sử dụng
@Component({
...
encapsulation: ViewEncapsulation.None,
})
cho tất cả các thành phần chặn CSS của bạn (tùy thuộc vào nơi bạn thêm CSS và nơi HTML bạn muốn tạo kiểu - có thể là tất cả các thành phần trong ứng dụng của bạn)
Cập nhật
Ví dụ Plunker
index.html
?