[Vue]Scoped Css與Css Modules的區別

均爲解決CSS全局做用域問題(樣式衝突(污染))的一個解決方案。

1.Scoped CSS

當 <style> 標籤有 scoped 屬性時,至關於在元素中添加了一個惟一屬性用來區分css

<style scoped>
.example {
  color: red;
}
</style>

<template>
  <div class="example">hi</div>
</template>

它經過使用 PostCSS 來實現如下轉換,轉換結果:html

<style>
.example[data-v-f3f3eg9] {
  color: red;
}
</style>

<template>
  <div class="example" data-v-f3f3eg9>hi</div>
</template>

2.CSS Modules

經過給樣式名加hash字符串後綴的方式,實現特定做用域語境中的樣式編譯後的樣式在全局惟一。vue

<template>
 <p :class="$style.gray">
 Im gray
 </p>
</template>
<style module>
.gray {
 color: gray;
}
</style>

使用module的結果編譯以下:ide

<p class="gray_3FI3s6uz">Im gray</p>
.gray_3FI3s6uz {
 color: gray;
}

因而可知,css module直接替換了類名,排除了用戶設置類名影響組件樣式的可能性。ui

推薦使用CSS Modulesspa

詳細見官方文檔:https://vue-loader.vuejs.org/zh/guide/scoped-css.html#混用本地和全局樣式code

相關文章
相關標籤/搜索