再論 Blaozr CSS 隔離與 ::deep 虛擬元素

CSS隔離,CSS isolation, ::deep,

引言

在 Blazor Component 應用開發中經常會先引用一套 CSS Framework,如:MudBlazorarrow-up-right, MatBlazorarrow-up-right 等等來做為整個 Web UI 的 CSS 基底,之後的客製元件再以此為基礎疊床架屋。這時 Blaozr Component 的 CSS 影響力是不能影響自身以外的。

然若配合 ::deep 虛擬元素就能解決此問題。

參考文件

::deep 虛擬元素

這個 ::deep 虛擬元素不是所有的CSS 預處理器都支援的樣子。不過主流的都有支援才會不時的看到它。其指令形式可能不同,已知有另一套的語形是 /deep/

::deep 只會影響由它開始的子孫層元素,所以::deep放的位置很重要。若它的子孫層是基底的 CSS Framework 那也會被影響到,不過只在 ::deep 之下被影響不是全面覆寫 CSS。

使用::deep還是有隔離效果的,應用在以 CSS Framework 為基底疊床架屋的客製化元件是很好用的。

關鍵原碼

一個疊床架屋的客製 Blaozr 元件。此例中 第三方元件 PortRenderer 是客製化標的,它的 CSS class 名為'.port' 。

關鍵原碼-未使用::deep

產生的 CSS 如下,可以看到隔離的屬性在最終端的元素,此例為 [b-houkg0n40n],影響範圍只有自己。這無法影響目標 PortRenderer 的 CSS 呈現。

關鍵原碼-使用::deep

triangle-exclamation

產生的 CSS 如下,可以看到隔離的屬性與 ::deep 放置位罝一樣。影響範圍包含其子孫層,也就是會影響第三方元件PortRenderer 的 CSS 呈現,它的 CSS class 名為'.port' 。

(EOF)

Last updated