這篇文章為大家帶來了scoped css和css module的區別的相關知識,scoped css和css module都是為了控制css的局部作用域,防止類名重複等問題,那麼兩者有什麼區別呢,希望對大家有幫助。
scoped css和css module都是為了控制css的局部作用域,防止類別名稱重複等問題。那麼兩者有什麼差別呢?
1.1.解釋
為所有類別名稱重新產生類別名,有效避開了css權重和類別名稱重複的問題。 css module直接取代了類別名,排除了使用者設定類別名稱影響元件樣式的可能性,這樣就不必為了命名而絞盡腦汁。
1.2實作原理
透過給樣式名稱加上hash字串後綴的方式,實現特定作用域情境中的樣式編譯後的樣式在全域唯一。
1.3使用方法
//webpack.base.conf.jsmodule: { rules: [ // ... 其它规则省略 { test: /\.css$/, use: [ 'vue-style-loader', { loader: 'css-loader', options: { // 开启 CSS Modules modules: true, // 自定义生成的类名 localIdentName: '[local]_[hash:base64:8]' } } ] } ] }
<style module>.red { color: red;}.bold { font-weight: bold;}</style>
<template> <p :class="$style.red"> This should be red </p></template><template> <p> <p :class="{ [$style.red]: isRed }"> Am I red? </p> <p :class="[$style.red, $style.bold]"> Red and bold </p> </p></template>
<script>export default { created () { console.log(this.$style.red) // -> "red_1VyoJ-uZ" // 一个基于文件名和类名生成的标识符 }}</script>
#1.4使用效果
<template> <p :class="$style.gray"> Im gray </p></template><style module>.gray { color: gray;}</style>
編譯後結果:
//编译结果<p class="gray_3FI3s6uz">Im gray</p>.gray_3FI3s6uz { color: gray;}
1.5注意點
2.1實作原理
vue透過在DOM結構以及css樣式上加唯一不重複的標記,以保證唯一,達到樣式私有化模組化的目的。無法完全避開css權重和類別名稱重複的問題。
2.2使用方法
在< style >標籤新增scoped屬性
2.3使用效果
<style scoped>h1 { color: #f00;}</style>
編譯後結果:
h1[data-v-4c3b6c1c] { color: #f00;}
2.4缺點
css module實際效果比scoped好,而且css module配置並不難,所以我比較推薦css module。
(學習影片分享:css影片教學)
以上是詳細解答css作用域之scoped css和css module的區別的詳細內容。更多資訊請關注PHP中文網其他相關文章!