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

vue解決子組件樣式覆蓋問題scoped deep

 更新時間:2025年01月16日 11:24:20   作者:FortheOne  
文章主要介紹了在Vue項目中處理全局樣式和局部樣式的方法,包括使用scoped屬性和深度選擇器(/deep/)來覆蓋子組件的樣式,作者建議所有組件必須使用scoped,以避免樣式?jīng)_突,對于父組件覆蓋子組件的樣式,作者推薦給子組件指定自定義類名

前言

在項目開發(fā)過程中,經(jīng)常會遇到需要在父組件內(nèi)部覆蓋子組件樣式的場景,這種場景在使用第三方庫開發(fā)時更為常見。

如何處理好全局樣式和局部樣式對于長期更新維護的項目來說是非常重要的。

scoped分析

對于SPA項目,只有一個頁面,頁面內(nèi)容被拆分成了一個個組件,組件加載完成后,組件的樣式也都加載在同一個頁面內(nèi),所以這些組件的樣式都可以看成全局樣式,對其他組件都有效,要避免當(dāng)前組件的樣式對其他組件產(chǎn)生污染,就要把每個組件的樣式獨立開。

如果style添加scoped,當(dāng)前組件所有標(biāo)簽都會添加一個data-v-hash的屬性,hash值每個組件都不同

css編譯后,會在最后一級選擇器后加一個屬性選擇器

這樣每個組件都有唯一的屬性選擇器,就可以避免對其他組件產(chǎn)生影響

deep分析

deep是常用來樣式穿透,覆蓋子組件加了scoped的樣式或者第三方組件的樣式。

上圖中span為子組件,父組件樣式加了scoped,子組件只有最外層元素添加了父組件的data-v-hash屬性,如果只是需改最外層元素樣式,不需要加deep,但是如果修改內(nèi)部元素,直接使用類選擇器是無效的。比如通過父元素類型panel修改類名ant-input的元素,最終的樣式被編譯為

子組件內(nèi)部元素沒有data-v-hash屬性,所以樣式不生效。

如果使用deep:

最終樣式會被編譯為:

屬性選擇器只加在deep前的元素上,因此會影響子組件樣式。

使用總結(jié)

所有組件必須加scoped

如果沒有加scoped? 打開一個界面突然發(fā)現(xiàn)A組件樣式被其他組件權(quán)重更高的樣式覆蓋了,然后為了讓A原本的樣式生效,給A原本的樣式加個更大的權(quán)重,接著又發(fā)現(xiàn)在B組件內(nèi)部原本要覆蓋A組件的一些樣式,因為A組件樣式權(quán)重變大而失效了。如果組件層級很深,子組件的最終樣式來源可能要向上翻十八輩祖宗啊,真一點不夸張。

當(dāng)然也有同學(xué)喜歡不加scoped,樣式最外層加個唯一的id選擇器來避免對其他組件禪城影響,這樣也可以達到效果,而且修改子組件樣式的話會比較簡單,但是自定義的id沒辦法全局管理,難以避免id重復(fù)的問題。

父組件覆蓋子組件使用deep

第三方庫一般會有全局樣式覆蓋,不過是針對全局的樣式,局部樣式還是不要放在common.less里。使用deep需要注意兩點:

1、給組件額外加個類名,使用當(dāng)前組件自定義類型進行樣式覆蓋

比如父元素為.father,如果覆蓋ant design vue 的select組件,select組件最外層元素為.ant-select,我們直接使用.father /deep/ .ant-select { color: wisdom } 這樣是可以生效的,但是對于.father下的所有子組件以及子孫后代組件,只要使用了select組件,{ color: wisdom }這個樣式都是有效的,這樣顯然也不合理,為了不影響后代的組件,給select加個跟當(dāng)前業(yè)務(wù)相關(guān)的類名,使用自定義類名覆蓋樣式,如.father /deep/ .father-child-select { ... }。PS:我也嘗試過使用>選擇器加/deep/一起使用,奈何無效。

2、/deep/ 嵌套使用在新版chrome瀏覽器樣式會失效,避免嵌套使用

以前嵌套使用是沒問題的,后來遇到某個版本樣式失效了

PS:

樣式覆蓋只要選擇器匹配上了,其他無非是權(quán)重問題,組件慎用!important

以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • Vue Element前端應(yīng)用開發(fā)之獲取后端數(shù)據(jù)

    Vue Element前端應(yīng)用開發(fā)之獲取后端數(shù)據(jù)

    這篇文章主要介紹了Vue Element前端應(yīng)用開發(fā)之獲取后端數(shù)據(jù),對vue感興趣的同學(xué),可以參考下
    2021-05-05
  • Vue導(dǎo)出頁面為PDF格式的實現(xiàn)思路

    Vue導(dǎo)出頁面為PDF格式的實現(xiàn)思路

    這篇文章主要介紹了Vue導(dǎo)出頁面為PDF格式的實現(xiàn)思路,其實思路也很簡單,就是將頁面轉(zhuǎn)換成圖片格式.然后通過圖片的base64碼.生成PDF..感興趣的朋友跟隨腳本之家小編一起看看吧
    2018-07-07
  • vue中如何實現(xiàn)錨點定位平滑滾動

    vue中如何實現(xiàn)錨點定位平滑滾動

    這篇文章主要介紹了vue中如何實現(xiàn)錨點定位平滑滾動方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-09-09
  • vue 按鈕 權(quán)限控制介紹

    vue 按鈕 權(quán)限控制介紹

    這篇文章主要介紹了vue 按鈕 權(quán)限控制,在日常項目中,會碰到需要根據(jù)后臺接口返回的數(shù)據(jù),來判斷當(dāng)前用戶的操作權(quán)限,必須當(dāng)有刪除權(quán)限時,就顯示刪除按鈕,下面我們就來了解一下具體的解決方法,需要的朋友也可以參考一下
    2021-12-12
  • 如何寫好一個vue組件,老夫的一年經(jīng)驗全在這了(推薦)

    如何寫好一個vue組件,老夫的一年經(jīng)驗全在這了(推薦)

    這篇文章主要介紹了如何寫好一個vue組件,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-05-05
  • 解決IE11 vue +webpack 項目中數(shù)據(jù)更新后頁面沒有刷新的問題

    解決IE11 vue +webpack 項目中數(shù)據(jù)更新后頁面沒有刷新的問題

    今天小編就為大家分享一篇解決IE11 vue +webpack 項目中數(shù)據(jù)更新后頁面沒有刷新的問題,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-09-09
  • 簡化vuex的狀態(tài)管理方案的方法

    簡化vuex的狀態(tài)管理方案的方法

    在 vuejs 相關(guān)項目開發(fā)過程中,我們常常會使用 vuex 作為狀態(tài)管理工具, 整個組件的狀態(tài)做為單向數(shù)據(jù)流的模式管理,這篇文章主要介紹了簡化vuex的狀態(tài)管理方案的方法,感興趣的小伙伴們可以參考一下
    2018-06-06
  • 詳解最新vue-cli 2.9.1的webpack存在問題

    詳解最新vue-cli 2.9.1的webpack存在問題

    這篇文章主要介紹了最新vue-cli 2.9.1的webpack存在問題,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-12-12
  • vue 實現(xiàn)滾動到底部翻頁效果(pc端)

    vue 實現(xiàn)滾動到底部翻頁效果(pc端)

    這篇文章主要介紹了pc端vue 滾動到底部翻頁效果,本文通過實例代碼給大家介紹的非常詳細(xì),具有一定的參考借鑒價值 ,需要的朋友可以參考下
    2019-07-07
  • 用vue封裝插件并發(fā)布到npm的方法步驟

    用vue封裝插件并發(fā)布到npm的方法步驟

    本篇文章主要介紹了用vue封裝插件并發(fā)布到npm的方法步驟,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-10-10

最新評論