อัปเดต 2 ::slotted
::slotted
ขณะนี้ได้รับการสนับสนุนโดยเบราว์เซอร์ใหม่ทั้งหมดและสามารถใช้ได้กับ ViewEncapsulation.ShadowDom
https://developer.mozilla.org/en-US/docs/Web/CSS/::slotted
อัปเดต 1 :: ng-deep
/deep/
::ng-deep
ได้รับการยกเลิกและถูกแทนที่ด้วย
::ng-deep
ทำเครื่องหมายว่าเลิกใช้แล้ว แต่ยังไม่มีการแทนที่
เมื่อViewEncapsulation.Native
ได้รับการสนับสนุนอย่างถูกต้องโดยเบราว์เซอร์ทั้งหมดและสนับสนุนการกำหนดสไตล์ตามขอบเขตเงาของ DOM เงา::ng-deep
อาจจะถูกยกเลิก
เป็นต้นฉบับ
Angular เพิ่มคลาส CSS ทุกชนิดลงใน HTML ซึ่งเพิ่มไปยัง DOM เพื่อเลียนแบบการห่อหุ้มเงาของ CSS CSS เพื่อป้องกันไม่ให้สไตล์การไหลเข้าและออกขององค์ประกอบ Angular ยังเขียน CSS ที่คุณเพิ่มเพื่อให้ตรงกับคลาสที่เพิ่มเหล่านี้ สำหรับ HTML ที่เพิ่มโดยใช้[innerHTML]
คลาสเหล่านี้จะไม่ถูกเพิ่มและ CSS ที่เขียนใหม่ไม่ตรงกัน
เป็นวิธีแก้ปัญหาลอง
- สำหรับ CSS ถูกเพิ่มไปยังองค์ประกอบ
/* :host /deep/ mySelector { */
:host ::ng-deep mySelector {
background-color: blue;
}
- สำหรับ CSS ถูกเพิ่มเข้าไป
index.html
/* body /deep/ mySelector { */
body ::ng-deep mySelector {
background-color: green;
}
>>>
(และเทียบเท่า/deep/
แต่/deep/
ทำงานได้ดีขึ้นกับ SASS) และ::shadow
ถูกเพิ่มเข้ามาใน 2.0.0-beta.10 พวกมันคล้ายกับ combinators DOM DOM เงา (ซึ่งเลิกใช้แล้ว) และทำงานเฉพาะกับencapsulation: ViewEncapsulation.Emulated
ซึ่งเป็นค่าเริ่มต้นใน Angular2 พวกเขาอาจทำงานด้วยViewEncapsulation.None
แต่ถูกละเว้นเพียงเพราะไม่จำเป็น Combinators เหล่านี้เป็นเพียงวิธีการแก้ปัญหาระดับกลางจนกว่าจะรองรับคุณสมบัติขั้นสูงสำหรับการออกแบบข้ามองค์ประกอบ
อีกวิธีคือการใช้
@Component({
...
encapsulation: ViewEncapsulation.None,
})
สำหรับส่วนประกอบทั้งหมดที่บล็อก CSS ของคุณ (ขึ้นอยู่กับตำแหน่งที่คุณเพิ่ม CSS และตำแหน่งที่ HTML ที่คุณต้องการจัดสไตล์ - อาจเป็นส่วนประกอบทั้งหมดในแอปพลิเคชันของคุณ)
ปรับปรุง
ตัวอย่าง Plunker
index.html
?