Vue中的scoped和scoped穿透

2021-10-24 09:09:51 字數 1423 閱讀 6643

文章摘自:

一、什麼是scoped

在vue檔案中的style標籤上有乙個特殊的屬性:scoped。當乙個style標籤擁有scoped屬性時候,它的css樣式只能用於當前的vue元件,可以使元件的樣式不相互汙染。如果乙個專案的所有style標籤都加上了scoped屬性,相當於實現了樣式的模組化。

二、scoped實現原理

vue中的scoped屬性的效果主要是通過postcss實現的。以下是轉譯前的**:

測試案例

轉譯後:

.example[data-v-5558831a] 

scoped測試案例

既:postcss給乙個元件中的所有dom新增了乙個獨一無二的動態屬性,給css選擇器額外新增乙個對應的屬性選擇器,來選擇元件中的dom,這種做法使得樣式只作用於含有該屬性的dom元素(元件內部的dom)。

總結:scoped的渲染規則:

1、給html的dom節點新增乙個不重複的data屬性(例如: data-v-5558831a)來唯一標識這個dom元素。

2、在每句css選擇器的末尾(編譯後生成的css語句)加乙個當前元件的data屬性選擇器(例如:[data-v-5558831a])來私有化樣式。

三、scoped穿透

scoped看起來很好用,當時在vue專案中,當我們引入第三方元件庫時(如使用vue-awesome-swiper實現移動端輪播),需要在區域性元件中修改第三方元件庫的樣式,而又不想去除scoped屬性造成元件之間的樣式覆蓋。這時我們可以通過特殊的方式穿透scoped。

1、stylus的樣式穿透使用》

外層 >>> 第三方元件 

樣式 background: #fff

2、sass和less的樣式穿透使用/deep/

外層 /deep/ 第三方元件 

background: #fff;

}

四、在元件中修改第三方元件庫樣式的其它方法

上面我們介紹了在使用scoped屬性時,通過scopd穿透的方式修改引入第三方元件庫樣式的方法,下面我們介紹其它方式來修改引入第三方元件庫的樣式。包括如下幾種方式:

1、在vue元件中不使用scoped屬性。

2、在vue元件中使用兩個style標籤,乙個加上scoped屬性,乙個不加scoped屬性,把需要覆蓋的css樣式寫在不加scoped屬性的style標籤裡。

3、建立乙個reset.css(基礎全域性樣式)檔案,裡面寫覆蓋的css樣式,在入口檔案main.js中引入。

vue中scoped的原理

實現元件的私有化,不對全域性造成樣式汙染,表示當前style屬性只屬於當前模 塊 實現原理 通過觀察dom結構可以發現 vue通過在dom結構以及css樣式上加上唯一的標記,保證唯一,達到樣式私有化,不汙染全域性的作用,如圖,樣式屬性上也會多乙個該字元,以保證唯一 可以看出加上scoped後的元件裡...

vue 中 scoped 的原理

之前寫vue頁面的時候,使用的是 快捷方式,打出vue之後使用tab鍵,就可以快捷的建立出vue頁面的template,script和style,之前一直有注意到style中有乙個scoped的屬性,但是一直不知道是幹啥的。今天乙個前輩給我講了,所以記錄下來,以供日後複習。實現組建的私有化,不對全域...

Vue中的scoped探索

在vue元件中 style 標籤中我們經常使用 scoped 屬性來防止在修改父元件的樣式時把其中的子元件中的樣式修改掉,使得它的樣式只在本元件中起作用,所有我們平常開發中都在 style 標籤中新增這個屬性。而如果在本元件想修改子元件中的樣式,我們可以使用深度選擇器來修改其子元件樣式。在開發中,經...