ionic4更改shadow dom css样式

刚升级ionic4,就遇到各种坑,其中一个比较严重的,就是不能像以前一样愉快的更改ionic组件的css了,因为ionic4采用了shadow dom,修改样式需要使用其暴露出来的属性,未暴露的则需要自己通过js获取shadow dom强行修改,因为shadow 和 deep等刺穿shadow dom的方法目前已经废弃。在Google上找了很久,终于找到了一个比较好的能够通过ts处理样式的方法。

git地址

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

安装方式是通过git直接进行安装

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是因为发现在直接调用方法时,会获取不到shadow dom 的style标签,所以通过setTimeout来做个延迟。

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 一:什么是闭包?闭包的用处? (1)闭包就是能够读取其他函数内部变量的函数。在本质上,闭包就 是将函数内部和函数外...
    xuguibin阅读 10,002评论 1 52
  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 177,578评论 25 709
  • 素简晨荷 我想和你一起爱这个世界 因为这个世界真的很美好 有爱我们的爸妈 有爱我们的朋友 也有爱我们的…… 你在我...
    少女灼华不妖娆阅读 295评论 0 0
  • 昨天看夏目友人帐的时候,心里面一直纠结的点终于得到了答案,夏目为什么一直不告诉塔子阿姨和滋叔自己看到妖怪的事。想必...
    不帅的人阅读 238评论 0 0
  • 参考:https://blog.csdn.net/u014032819/article/details/77864...
    Zszen阅读 4,036评论 0 53

友情链接更多精彩内容