ionic4更改shadow dom css樣式

剛升級(jí)ionic4,就遇到各種坑,其中一個(gè)比較嚴(yán)重的,就是不能像以前一樣愉快的更改ionic組件的css了,因?yàn)閕onic4采用了shadow dom,修改樣式需要使用其暴露出來(lái)的屬性,未暴露的則需要自己通過(guò)js獲取shadow dom強(qiáng)行修改,因?yàn)閟hadow 和 deep等刺穿shadow dom的方法目前已經(jīng)廢棄。在Google上找了很久,終于找到了一個(gè)比較好的能夠通過(guò)ts處理樣式的方法。

git地址

https://github.com/adamlacombe/Shadow-DOM-inject-styles.git

安裝方式是通過(guò)git直接進(jìn)行安裝

npm install https://github.com/adamlacombe/Shadow-DOM-inject-styles.git --save

比如需要更改tab為如下樣式


image.png

在tab.page.ts中,代碼如下:

import {Component, ElementRef, OnInit} from '@angular/core';
import {injectStyles} from 'shadow-dom-inject-styles';

@Component({
    selector: 'app-tabs',
    templateUrl: 'tabs.page.html',
    styleUrls: ['tabs.page.scss']
})
export class TabsPage implements OnInit {
    constructor(private el: ElementRef) {
    }

    ngOnInit(): void {
        setTimeout(() => {
            let toolbar = (this.el.nativeElement.querySelector('ion-tabs') as HTMLElement);
            toolbar = toolbar.shadowRoot.querySelector('ion-tabbar');
            // language=CSS
            const styles = `
                .tab-btn:nth-of-type(2) .tab-btn-icon {
                    position:absolute;
                    top: -20px;
                    width: 40px;
                    height: 40px;
                    padding: 10px;
                    border: 1px solid #0076FF;
                    border-radius: 50%;
                    color: white;
                    box-shadow: -2px 2px 6px 0 rgba(0, 118, 255, 0.49);
                    background-color: #0076FF;
                }
                :host{
                    contain: none;
                }
            `;
            injectStyles(toolbar, '.tab-btn', styles);
        }, 50);
    }
}

PS:使用setTimeout是因?yàn)榘l(fā)現(xiàn)在直接調(diào)用方法時(shí),會(huì)獲取不到shadow dom 的style標(biāo)簽,所以通過(guò)setTimeout來(lái)做個(gè)延遲。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 一:什么是閉包?閉包的用處? (1)閉包就是能夠讀取其他函數(shù)內(nèi)部變量的函數(shù)。在本質(zhì)上,閉包就 是將函數(shù)內(nèi)部和函數(shù)外...
    xuguibin閱讀 10,031評(píng)論 1 52
  • Android 自定義View的各種姿勢(shì)1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 179,040評(píng)論 25 709
  • 素簡(jiǎn)晨荷 我想和你一起愛(ài)這個(gè)世界 因?yàn)檫@個(gè)世界真的很美好 有愛(ài)我們的爸媽 有愛(ài)我們的朋友 也有愛(ài)我們的…… 你在我...
    少女灼華不妖嬈閱讀 307評(píng)論 0 0
  • 昨天看夏目友人帳的時(shí)候,心里面一直糾結(jié)的點(diǎn)終于得到了答案,夏目為什么一直不告訴塔子阿姨和滋叔自己看到妖怪的事。想必...
    不帥的人閱讀 242評(píng)論 0 0
  • 參考:https://blog.csdn.net/u014032819/article/details/77864...
    Zszen閱讀 4,099評(píng)論 0 53

友情鏈接更多精彩內(nèi)容