<span id="mktg5"></span>

<i id="mktg5"><meter id="mktg5"></meter></i>

        <label id="mktg5"><meter id="mktg5"></meter></label>
        最新文章專題視頻專題問答1問答10問答100問答1000問答2000關鍵字專題1關鍵字專題50關鍵字專題500關鍵字專題1500TAG最新視頻文章推薦1 推薦3 推薦5 推薦7 推薦9 推薦11 推薦13 推薦15 推薦17 推薦19 推薦21 推薦23 推薦25 推薦27 推薦29 推薦31 推薦33 推薦35 推薦37視頻文章20視頻文章30視頻文章40視頻文章50視頻文章60 視頻文章70視頻文章80視頻文章90視頻文章100視頻文章120視頻文章140 視頻2關鍵字專題關鍵字專題tag2tag3文章專題文章專題2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章專題3
        問答文章1 問答文章501 問答文章1001 問答文章1501 問答文章2001 問答文章2501 問答文章3001 問答文章3501 問答文章4001 問答文章4501 問答文章5001 問答文章5501 問答文章6001 問答文章6501 問答文章7001 問答文章7501 問答文章8001 問答文章8501 問答文章9001 問答文章9501
        當前位置: 首頁 - 科技 - 知識百科 - 正文

        Vue 組件間的樣式沖突污染

        來源:懂視網 責編:小采 時間:2020-11-27 22:31:21
        文檔

        Vue 組件間的樣式沖突污染

        Vue 組件間的樣式沖突污染:一、污染是如何產生的? 得益于 Vue-loader,在 Vue 中可以使用類似于 Web Component 的組件化寫法, <template></template><style></style><script></script> ,在大多數情況下,我們
        推薦度:
        導讀Vue 組件間的樣式沖突污染:一、污染是如何產生的? 得益于 Vue-loader,在 Vue 中可以使用類似于 Web Component 的組件化寫法, <template></template><style></style><script></script> ,在大多數情況下,我們

        一、污染是如何產生的?

        得益于 Vue-loader,在 Vue 中可以使用類似于 Web Component 的組件化寫法, <template></template><style></style><script></script> ,在大多數情況下,我們希望組件間定義的樣式是相互隔離的,在 Weex 當中的確如此,組件天生隔離,可是在 Vue 當中,運行的載體還是瀏覽器,所有的樣式類還是會通過 style 標簽插入頭部,影響全局,交叉污染

        二、增加 Scoped 標識

        依然是 Vue-loader,通過為組件中的 style 標簽增加一個 scoped 標識,Vue-loader 在編譯的過程中會為組件每一個元素節點增加 scopeId 作為屬性,同時為所有的樣式類加上屬性選擇器 scopeId,從而達到隔離的效果,大概是下面的樣子:

        每個組件有唯一的 scopeId,按理說,這樣應該能夠做到樣式隔離了,實際上, 這種方式其實表現已經足夠好了,除了以下這種情況~~

        三、ScopeId 的繼承

        我們把上面的例子再完善下:

        // 父組件
        <template>
         <div>
         <div class="bg"></div>
         <Sub></Sub>
         </div>
        </template>
        <script>
         import Sub from './sub';
         export default {
         components: { Sub }
         };
        </script>
        <style scoped>
        .bg {
         background-color: #000;
         width: 100px;
         height: 100px;
        }
        </style>
        
        // 子組件
        <template>
         <div class="bg">
         </div>
        </template>
        <script>
         export default {
         };
        </script>
        <style scoped>
        .bg {
         width: 300px;
         height: 300px;
         margin-top: 5px;
        }
        </style>
        

        由于我們使用了 scoped 標識進行樣式隔離,子組件的 div 不應該有任何背景顏色,可是現實總在狠狠的打臉~~

        不知道你的媚眼看到問題的所在了沒:

        子元素的 根元素 會繼承父元素的 ScopeId!

        子元素的 根元素 會繼承父元素的 ScopeId!

        子元素的 根元素 會繼承父元素的 ScopeId!(說了三遍的話,肯定很重要)

        由于子元素的 根元素 除了擁有自己的 ScopeId 屬性,還繼承了父元素的 ScopeId 屬性,所以父元素的樣式類 bg 對其依然有效

        四、怎么破?

        破解的方式也很簡單,為每一個組件的根元素提供一個另類一點的樣式名(如果有的話),例如就不要每個組件都命名為:wrap,根據業務名為:b1-wrap、b2-wrap 等

        組件中的非根元素,類名不管怎么命名,怎么重名,都是不會發生污染的,這個自己領悟~~

        五、這應當屬于 Vue-loader 的一個 bug

        沒錯,這應該是一個 bug,如果是我應該會怎么解呢,編譯的時候不是增加屬性,而是直接根據 scopeId 修改類名,嘿嘿~~

        聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com

        文檔

        Vue 組件間的樣式沖突污染

        Vue 組件間的樣式沖突污染:一、污染是如何產生的? 得益于 Vue-loader,在 Vue 中可以使用類似于 Web Component 的組件化寫法, <template></template><style></style><script></script> ,在大多數情況下,我們
        推薦度:
        標簽: VUE 樣式 的樣式
        • 熱門焦點

        最新推薦

        猜你喜歡

        熱門推薦

        專題
        Top
        主站蜘蛛池模板: 99re热免费精品视频观看| 免费av欧美国产在钱| 亚洲精品国产福利一二区| 亚洲第一街区偷拍街拍| 亚洲人成色777777精品| 成人午夜大片免费7777| 亚洲熟女乱色一区二区三区| 国产精品久久久久久亚洲小说| 国产美女a做受大片免费| 亚洲1区2区3区精华液| 全部免费毛片在线| aa午夜免费剧场| 亚洲中文字幕不卡无码| 亚洲AV天天做在线观看| 十八禁视频在线观看免费无码无遮挡骂过 | 日本不卡免费新一区二区三区| 亚洲精品无码成人AAA片| 亚洲AV无码成人网站久久精品大| 国产成人无码免费看片软件| 亚洲欧洲另类春色校园小说| 亚洲高清一区二区三区| 四虎影视精品永久免费| 久久久精品视频免费观看| 久久亚洲欧洲国产综合| 国产av天堂亚洲国产av天堂| 午夜免费福利视频| 亚洲精品女同中文字幕| 亚洲视频在线一区二区| 91久久青青草原线免费| 亚洲依依成人亚洲社区| 亚洲一区二区高清| 免费人成在线观看网站| 亚洲国产精品久久丫| 亚洲 综合 国产 欧洲 丝袜| 亚洲精品乱码久久久久久中文字幕 | 免费国产黄网站在线看| 亚洲伊人久久成综合人影院| 中文字幕看片在线a免费| 亚洲精品免费视频| 四虎永久在线精品免费网址| 亚洲综合欧美色五月俺也去|