在使用Vue Cli開發時,Vue是將每個組件(副檔名.vue)拆封成HTML、CSS、JavaScript三個部分,也就是如下:

<template>
    //這裡寫HTML
</template>


<script>
    //這裡寫JavaScript
</script>

<style>
    //這裡寫CSS
</style>

但這樣就產生了一個問題,假如我在a.vue檔(a組件)寫了一段CSS

<style>
  h2 {
      color:red;
  }
</style>

b.vue檔(b組件)、c.vue檔(c組件)...etc組件,只要有用到 <h2> 標籤,h2標籤就會變成紅色,理由是我們在a組件的CSS設定了 <h2> 是紅色的樣式。

因為 CSS 是 global scope 全域有效,css 原本沒辦法像 js 一樣設定作用域,這會導致不同組件的css樣式互相污染。

解決方法有,就多使用 CSS 的選擇器,然而一但組件和選擇器數量一多,那維護起來非常可怕。所幸Vue替我們解決了這個問題。

單一檔案組件的區域 CSS 樣式,我們可以把組件內的CSS樣式改成這樣

<style scoped>
  h2 {
      color:red;
  }
</style>

<style> 多增加了scoped
他可以幫我們把CSS的樣式固定在該組件裡,當我們npm bulid成靜態檔案時,組件之間的CSS就不會互相污染囉!