1. 程式人生 > 其它 >vue 中 scoped 的原理

vue 中 scoped 的原理

技術標籤:vue

之前寫 vue 頁面的時候,使用的是 快捷方式,打出 vue 之後使用 tab 鍵,就可以快捷的創建出 vue 頁面的 templatescriptstyle,之前一直有注意到 style 中有一個 scoped 的屬性,但是一直不知道是幹啥的。今天一個前輩給我講了,所以記錄下來,以供日後複習。

作用功能:

實現組建的私有化,不對全域性的樣式造成汙染,在 style 中使用 scoped 表示當前的 style 屬性只屬於當前模組。使用起來非常方便,但是本身也有一定的缺點。

實現原理

通過觀察 DOM 結構可以發現:vue 通過 DOM 結構以及 css 樣式上加上唯一的標記,保證唯一,達到樣式私有化,不汙染全域性的作用。如下圖,樣式屬性上會多一個字元:

在這裡插入圖片描述
可以看出來,加上 scoped 後的元件裡面的標籤會多一個 data-v-300bf50c 的屬性,並且在css 的樣式部分可以看出
在這裡插入圖片描述
由此可知,新增 scoped 屬性的元件,為了達到不汙染全域性,做了一下處理:

  • 給 HTML 的 DOM 節點加了一個不重複屬性 data-v-300bf50c 標誌唯一性;
  • 在新增 scoped 屬性的元件的每個樣式選擇器添加了相同的欄位,實現類似於 “區域性作用域”,不會影響到全域性。
  • 父元件的樣式不會影響子元件,子元件的樣式也不會汙染到父元件。

tips:
比如使用 element-UI 時,想要修改 element-UI的樣式,可以使用/deep/ .el-table{}

這種方式來進行自定義。/deep/ css --> 注意,中間有空格。
如:

<style lang="lsess" scoped>
.text-box {
  /deep/ input {
    width: 166px;
    text-align: center;
  }
}
</style>