Vue2 Vue3 Scoped 樣式穿透問題
概念
主要是用于修改很多 Vue 常用的組件庫(Element, Vant, AntDesigin),雖然配好了樣式但是還是需要更改其他的樣式, 因為添加了 scoped 實現(xiàn) css 模塊化
就需要用到 樣式穿透 ,更改組件的樣式
scoped 的原理
Vue 中的 scoped 通過在 DOM結(jié)構(gòu)以及 css 樣式上加唯一不重復(fù)的標(biāo)記: data-v-hash 的方式,以保證唯一(而這個工作是由過 PostCSS 轉(zhuǎn)譯實現(xiàn)的),達(dá)到 樣式私有化模塊化的目的。
簡單示例代碼如下
<template>
<div>
<el-input placeholder="Please input" class="ipt" />
</div>
</template>
<script setup lang="ts">
</script>
<style scoped>
.ipt {
width: 300px;
margin: 100px 400px;
}
</style>總結(jié)一下 scoped 三條渲染規(guī)則
1.給 HTML 的 DOM 節(jié)點加一個不重復(fù) data 屬性(形如:data-v-123)來表示他的唯一性

2. 在每個 CSS 選擇器的末尾(編譯后的生成的 CSS 語句)加一個當(dāng)前組件的 data 屬性選擇器(如 [data-v-123])來私有化樣式

3. 如果組件內(nèi)部包含有其他組件,只會給其他組件的最外層標(biāo)簽加上當(dāng)前組件的 data 屬性

注意:
<template>
<div>
<el-input placeholder="Please input" class="ipt" />
</div>
</template>
<script setup lang="ts">
</script>
<style scoped lang="less">
.ipt {
width: 300px;
margin: 100px 400px;
.el-input__inner {
background-color: red;
}
}
</style>總結(jié)
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
vue項目實現(xiàn)減少app.js和vender.js的體積操作
這篇文章主要介紹了vue項目實現(xiàn)減少app.js和vender.js的體積操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-11-11

