欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

小程序自定義組件全局樣式不生效的解決方法

 更新時間:2021年08月06日 09:36:07   作者:Skuld_yi  
在使用原生框架開發(fā)小程序時遇到一個問題,在 app.wxss 中定義的全局樣式在自定義組件中不生效,本文就詳細(xì)的介紹一下,感興趣的可以了解一下

在使用原生框架開發(fā)小程序時遇到一個問題,在 app.wxss 中定義的全局樣式在自定義組件中不生效。后來發(fā)現(xiàn)是由于小程序組件樣式隔離的配置導(dǎo)致的。

太長不看版

在組件的 json 文件中添加如下配置,全局樣式即可生效。

// component.json
"styleIsolation": "apply-shared"

如果偏好在 js 文件中進行配置,或版本號 < 2.10.1,也可以寫在 js 文件中,效果相同。

// component.js
Component({
  options: {
    styleIsolation: 'apply-shared'
  }
})

如果版本號 < 2.6.5,可以使用如下配置代替 styleIsolation: 'apply-shared'

// component.js
Component({
  options: {
    addGlobalClass: true
  }
})

組件樣式隔離

組件的 styleIsolation 有三個可選值:

  • isolated:默認(rèn)值,組件內(nèi)外的樣式互不影響
  • apply-shared:接收外部(包括父頁面和全局)的樣式,但組件內(nèi)的樣式不影響外部
  • shared:接收外部樣式,同時組件內(nèi)的樣式會共享到頁面

demo 試驗

為了更直觀,寫了一個 demo 進行了簡單試驗。

定義一個組件comp,并在頁面 index 中引入組件:

<!-- comp.wxml -->
<view class="test1 testbox">comp1</view>
<view class="test2 testbox">comp2</view>
<view class="test3 testbox">comp3</view>

<!-- index.wxml -->
<comp />
<view class="test3 testbox">index3</view>

然后在全局、頁面、組件中分別定義 test1, test2, test3 的顏色為紅、綠、藍(lán)色(省略了 testbox 的樣式):

/* app.wxss */
.test1 {
  background-color: lightpink;
}

/* components/index.wxss */
.test2 {
  background-color: lightgreen;
}

/* components/comp.wxss */
.test3 {
  background-color: lightblue;
}

之后對組件的 styleIsolation 屬性進行不同取值,結(jié)果如下:

可以看到,默認(rèn)模式 isolated下,父頁面和全局樣式都不生效;apply-shared 模式下,頁面和全局樣式能作用到組件中;shared 模式下組件樣式還會反過來作用到父頁面上。

優(yōu)先級

另外,經(jīng)過測試,對于相同的選擇器,樣式的優(yōu)先級為 組件樣式 > 頁面樣式 > 全局樣式,對于組件來說這基本符合直覺。不過如果組件應(yīng)用了 shared,那么其中樣式也會覆蓋頁面中的樣式,這就有點奇怪。

綜上,個人建議除非特殊需要,否則最好慎用 shared 模式,并且盡量減少選擇器沖突和相互覆蓋,以免造成不必要的靈異事故。對于需要共享的樣式,可以根據(jù)情況抽取到全局或采用引入 css 文件的方式實現(xiàn)。

頁面的隔離配置

由于小程序的頁面實際上也是組件,所以同樣可以設(shè)置 styleIsolation 屬性,并且與自定義組件不同的是頁面的默認(rèn)取值為 share,因此頁面中默認(rèn)可以應(yīng)用全局樣式。

另外,對于頁面還額外增加了三個屬性取值。雖然文檔中有各自的描述,但我經(jīng)過試驗后感到十分迷惑,完全沒有搞懂各自的確切作用和區(qū)別;甚至還有頁面設(shè)置為 isolated / page-isolated 之后頁面自己的樣式都失效了這種神秘 bug,可能是實現(xiàn)上還存在問題。所以建議不要隨便更改頁面的 styleIsolation 配置,感興趣的可以點擊文末鏈接自行研究試驗。

只有一個還算比較確定的選項,配置 page-shared 之后,頁面(以及其中的組件)將屏蔽 app.wxss 中的全局樣式,并且其他方面的影響應(yīng)該較小,如果有需要可以嘗試。

參考資料

微信官方文檔 · 小程序

到此這篇關(guān)于小程序自定義組件全局樣式不生效的解決方法的文章就介紹到這了,更多相關(guān)小程序組件全局樣式不生效內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

最新評論