Vue中對(duì)比scoped css和css module的區(qū)別
scoped css
scoped css可以直接在能跑起來的vue項(xiàng)目中使用。
使用方法:
<style scoped>
h1 {
color: #f00;
}
</style>
使用scoped劃分本地樣式的結(jié)果編譯結(jié)果如下:
h1[data-v-4c3b6c1c] {
color: #f00;
}
即在元素中添加了一個(gè)唯一屬性用來區(qū)分。
缺點(diǎn)
一、如果用戶在別處定義了相同的類名,也許還是會(huì)影響到組件的樣式。
二、根據(jù)css樣式優(yōu)先級(jí)的特性,scoped這種處理會(huì)造成每個(gè)樣式的權(quán)重加重了:
即理論上我們要去修改這個(gè)樣式,需要更高的權(quán)重去覆蓋這個(gè)樣式。
所以在引用包含scoped的第三方插件時(shí)如若需要修改樣式則需要全局修改,而且要注意權(quán)重問題,0.0迫不得已再使用!important。
三、如果組件內(nèi)部包含有其他組件,只會(huì)給其他組件的最外層標(biāo)簽加上當(dāng)前組件的data屬性:
所以一般父組件如果加了scoped,會(huì)比已經(jīng)設(shè)置過自己樣式的子組件內(nèi)除最外層標(biāo)簽的內(nèi)層標(biāo)簽的權(quán)重低,影響不到他們的樣式。
不過也是可以通過如下方法影響到的:

四、scoped會(huì)使標(biāo)簽選擇器渲染變慢很多倍
官方給了一些注意事項(xiàng)如下:

我們可以看到用標(biāo)簽選擇器時(shí)scoped會(huì)嚴(yán)重降低性能,而使用class或id則不會(huì)。
css module
css module需要增加css-loader配置才能生效,具體可看文檔的實(shí)現(xiàn)。
注意
如果你使用的是style-loader,如果想讓配置生效需要更換到文檔所述的vue-style-loader。
二者區(qū)別可以從這里了找vue-style-loader
使用如下:
<template>
<p :class="$style.gray">
Im gray
</p>
</template>
<style module>
.gray {
color: gray;
}
</style>
使用module的結(jié)果編譯如下:
<p class="gray_3FI3s6uz">Im gray</p>
.gray_3FI3s6uz {
color: gray;
}
由此可見,css module直接替換了類名,排除了用戶設(shè)置類名影響組件樣式的可能性。
這樣$style.red就可以當(dāng)做一個(gè)變量,并且可以在js中使用,如下:
<script>
export default {
created () {
console.log(this.$style.gray)
// -> "gray_3FI3s6uz"
// 一個(gè)基于文件名和類名生成的標(biāo)識(shí)符
}
}
</script>
我們可以看到,module在使用時(shí)多出了綁定和$style,如果你想更優(yōu)雅,可以看一下這個(gè)vue-css-modules。
使用css module在keyframes中的問題
使用CSS modules處理動(dòng)畫animation的關(guān)鍵幀keyframes,動(dòng)畫名稱必須先寫。
animation: ani 1s;能正常編譯,而animation: 1s ani;則會(huì)編譯的不符合預(yù)期,所以平時(shí)養(yǎng)成良好的css參數(shù)書寫順序也很重要。
總結(jié)
綜上所述,css module前期進(jìn)行不麻煩的配置,實(shí)現(xiàn)的效果比scoped css更優(yōu),這里推薦使用css module。
以上所述是小編給大家介紹的Vue中對(duì)比scoped css和css module,希望對(duì)大家有所幫助,如果大家有任何疑問請(qǐng)給我留言,小編會(huì)及時(shí)回復(fù)大家的。在此也非常感謝大家對(duì)腳本之家網(wǎng)站的支持!
相關(guān)文章
Vue使用Vue-cropper實(shí)現(xiàn)圖片裁剪
這篇文章主要為大家詳細(xì)介紹了Vue使用Vue-cropper實(shí)現(xiàn)圖片裁剪,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-05-05
vue3原始值響應(yīng)方案及響應(yīng)丟失問題解讀
這篇文章主要介紹了vue3原始值響應(yīng)方案及響應(yīng)丟失問題解讀,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-04-04
Vue3+vueuse實(shí)現(xiàn)放大鏡示例詳解
這篇文章主要為大家介紹了Vue3+vueuse實(shí)現(xiàn)放大鏡示例過程詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-07-07
基于axios封裝fetch方法及調(diào)用實(shí)例
下面小編就為大家分享一篇基于axios封裝fetch方法及調(diào)用實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2018-02-02
element-ui中表格設(shè)置正確的排序及設(shè)置默認(rèn)排序
表格中有時(shí)候會(huì)有排序的需求,下面這篇文章主要給大家介紹了關(guān)于element-ui中表格設(shè)置正確的排序及設(shè)置默認(rèn)排序的相關(guān)資料,文中通過實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下2023-05-05
Vue用v-for給循環(huán)標(biāo)簽自身屬性添加屬性值的方法
這篇文章主要介紹了Vue用v-for給循環(huán)標(biāo)簽自身屬性添加屬性值的方法,文中大家給大家列舉了三種方法 ,需要的朋友可以參考下2018-10-10
Vue子組件如何修改父組件數(shù)據(jù)的方法及注意事項(xiàng)
這篇文章主要介紹了Vue子組件如何修改父組件數(shù)據(jù)的方法及注意事項(xiàng),具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-06-06
Element 的 el-table 表格實(shí)現(xiàn)單元格合并功能
這篇文章主要介紹了Element 的 el-table 表格實(shí)現(xiàn)單元格合并功能,本文通過示例代碼給大家介紹的非常詳細(xì),感興趣的朋友一起看看吧2024-07-07

