最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

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

前言

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

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

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選擇器來避免對其他組件禪城影響,這樣也可以達(dá)到效果,而且修改子組件樣式的話會比較簡單,但是自定義的id沒辦法全局管理,難以避免id重復(fù)的問題。

父組件覆蓋子組件使用deep

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

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

比如父元素為.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全局過濾器概念及注意事項和基本使用方法

    vue全局過濾器概念及注意事項和基本使用方法

    這篇文章主要給大家分享了vue全局過濾器概念及注意事項和基本使用方法,下面文字圍繞vue全局過濾器的相關(guān)資料展開具體的詳細(xì)內(nèi)容,需要的朋友可以參考一下,希望對你有所幫助
    2021-11-11
  • Vue實現(xiàn)移動端左右滑動效果的方法

    Vue實現(xiàn)移動端左右滑動效果的方法

    最近得到一個新需求,需要在Vue項目的移動端頁面上加上左右滑動效果,經(jīng)過一番折騰,最終決定四月vue-touch。下面小編把實現(xiàn)代碼分享給大家,感興趣的朋友一起看看吧
    2018-11-11
  • vue實現(xiàn)滾動條到頂部或者到指定位置

    vue實現(xiàn)滾動條到頂部或者到指定位置

    這篇文章主要介紹了vue實現(xiàn)滾動條到頂部或者到指定位置,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-08-08
  • Echarts+VUE柱狀圖繪制細(xì)節(jié)并且屏幕自適應(yīng)完整代碼

    Echarts+VUE柱狀圖繪制細(xì)節(jié)并且屏幕自適應(yīng)完整代碼

    柱狀圖(或稱條形圖)是一種通過柱形的長度來表現(xiàn)數(shù)據(jù)大小的一種常用圖表類型,這篇文章主要給大家介紹了關(guān)于Echarts+VUE柱狀圖繪制細(xì)節(jié)并且屏幕自適應(yīng)的相關(guān)資料,需要的朋友可以參考下
    2024-02-02
  • 使用vue實現(xiàn)pdf預(yù)覽功能的方法

    使用vue實現(xiàn)pdf預(yù)覽功能的方法

    許多朋友想要材料上傳之后點擊預(yù)覽實現(xiàn)在瀏覽器上預(yù)覽的效果,所以本文將給大家介紹如何使用vue實現(xiàn)pdf預(yù)覽功能,文中有實現(xiàn)代碼,有需要的朋友可以參考閱讀下
    2023-08-08
  • 詳解vue2.0 transition 多個元素嵌套使用過渡

    詳解vue2.0 transition 多個元素嵌套使用過渡

    這篇文章主要介紹了詳解vue2.0 transition 多個元素嵌套使用過渡,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-06-06
  • vue3中定時任務(wù)cron表達(dá)式組件的比較分析

    vue3中定時任務(wù)cron表達(dá)式組件的比較分析

    文章比較了三種適用于Vue3的cron組件:vue3-cron-plus、no-vue3-cron和vue3-cron-plus-picker,每種組件的安裝和使用實例都詳細(xì)列出,最終對比發(fā)現(xiàn),vue3-cron-plus-picker不僅可以從組件中獲取cron表達(dá)式,還能顯示任務(wù)的執(zhí)行時間,因此推薦使用
    2025-10-10
  • vue遞歸實現(xiàn)自定義tree組件

    vue遞歸實現(xiàn)自定義tree組件

    這篇文章主要為大家詳細(xì)介紹了vue遞歸實現(xiàn)自定義tree組件,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-08-08
  • vue實現(xiàn)簡易選項卡功能

    vue實現(xiàn)簡易選項卡功能

    這篇文章主要為大家詳細(xì)介紹了vue實現(xiàn)簡易選項卡功能,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-06-06
  • vue-cli axios請求方式及跨域處理問題

    vue-cli axios請求方式及跨域處理問題

    這篇文章主要介紹了vue-cli axios請求方式及跨域處理問題,文中還給大家提到了vue中axios解決跨域問題和攔截器使用,非常不錯,具有參考借鑒價值,需要的朋友參考下吧
    2018-03-03

最新評論

泊头市| 时尚| 尼勒克县| 贵阳市| 镇雄县| 凤翔县| 唐河县| 西吉县| 巴彦淖尔市| 威信县| 梓潼县| 永丰县| 子长县| 子长县| 杭锦后旗| 新民市| 香格里拉县| 安康市| 盐津县| 东乡| 汉阴县| 瓮安县| 佛坪县| 旬邑县| 甘德县| 瑞安市| 鹿泉市| 定兴县| 轮台县| 北宁市| 芷江| 芮城县| 睢宁县| 天峻县| 桂平市| 开江县| 天等县| 沅陵县| 安陆市| 枣阳市| 新龙县|