最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Vue?中的?deep、v-deep?和?>>>區(qū)別解析

 更新時(shí)間:2026年02月04日 08:48:48   作者:林恒  
文章主要介紹了在Vue中使用UI庫(kù)時(shí),如何通過(guò)樣式穿透(style penetration)來(lái)修改子組件的樣式,本文結(jié)合實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友參考下吧

??‍?? 寫(xiě)在開(kāi)頭

“你用 Element Plus 寫(xiě)了個(gè)按鈕,想改下 hover 顏色,結(jié)果死活不生效!最后查了半天,發(fā)現(xiàn)得加個(gè) :deep() 才行”

其實(shí),這是 Vue 中一個(gè)非常常見(jiàn)的坑:樣式作用域沖突。那為什么用 UI 庫(kù)時(shí),加上 :deep()、::v-deep 或 >>>后,樣式就能生效呢?

它們是什么?有什么區(qū)別?什么時(shí)候該用哪個(gè)?

一、先說(shuō)背景

我們?cè)?Vue 單文件組件(.vue 文件)里寫(xiě)樣式時(shí),通常會(huì)加上 scoped 屬性:

<template>
  <el-button>點(diǎn)我</el-button>
</template>
<style scoped>
.el-button {
  background: red;
}
</style>

加了 scoped 后,Vue 會(huì)自動(dòng)給這個(gè)組件里的所有元素加上一個(gè)唯一的屬性(比如 data-v-123456),然后把 CSS 選擇器也加上這個(gè)屬性,變成:

.el-button[data-v-123456] {
  background: red;
}

這樣做的好處是:樣式只作用于當(dāng)前組件,不會(huì)污染全局。、

但問(wèn)題來(lái)了:Element Plus 的 <el-button> 組件內(nèi)部結(jié)構(gòu),是在它自己的組件里定義的。也就是說(shuō),你寫(xiě)的 .el-button 元素,其實(shí)是 Element Plus 渲染出來(lái)的子組件,它身上沒(méi)有你當(dāng)前組件的 data-v-xxx 屬性!

所以你的樣式根本匹配不到它,自然就失效了。

二、那怎么辦?

為了解決這個(gè)問(wèn)題,Vue 提供了樣式穿透(style penetration)的語(yǔ)法,讓你能穿透當(dāng)前組件的作用域,去影響子組件內(nèi)部的元素。

Vue 社區(qū)出現(xiàn)過(guò)三種寫(xiě)法:

下面我們一個(gè)個(gè)拆解。

1. >>>:曾經(jīng)的快捷方式,但問(wèn)題很多

早期 Vue2 時(shí)代,很多人用:

<style scoped>
.parent >>> .child {
  color: blue;
}
</style>

它的意思是:從 .parent 開(kāi)始,穿透到所有后代中的 .child。

但問(wèn)題在于:

  • Sass/Less 等預(yù)處理器不認(rèn) >>>,會(huì)報(bào)錯(cuò)。
  • 不是標(biāo)準(zhǔn) CSS 語(yǔ)法。
  • Vue3 已經(jīng)明確不再支持。

所以現(xiàn)在基本可以忘掉它了。

2. ::v-deep:Vue2 到 Vue3 的橋梁

為了兼容預(yù)處理器,Vue 引入了 ::v-deep

<style scoped lang="scss">
.parent ::v-deep(.child) {
  color: blue;
}
</style>

或者更常見(jiàn)的寫(xiě)法:

<style scoped lang="scss">
.parent ::v-deep(.child) {
  color: blue;
}
</style>

它在 Vue2 和 Vue3 中都能用,算是一個(gè)安全的過(guò)渡方案。

但注意:在 Vue3 中,官方文檔已經(jīng)明確建議使用 :deep() 替代它。

3. :deep():Vue3 的標(biāo)準(zhǔn)答案

Vue3 引入了更簡(jiǎn)潔、更符合 CSS 規(guī)范的偽類函數(shù)寫(xiě)法:

<style scoped>
:deep(.el-button) {
  background: red !important;
}
</style>

或者配合父級(jí)選擇器:

<style scoped>
.my-wrapper :deep(.el-input__inner) {
  border-radius: 10px;
}
</style>

優(yōu)點(diǎn)

  • 語(yǔ)法清晰,像原生 CSS。
  • 支持所有預(yù)處理器(Sass/Less/Stylus)。

:deep() 本質(zhì)上是一個(gè)編譯時(shí)轉(zhuǎn)換,Vue 在構(gòu)建時(shí)會(huì)把它展開(kāi)成帶 data-v-xxx 的復(fù)雜選擇器,從而實(shí)現(xiàn)穿透。

三、怎么正確修改 Element Plus 的樣式?

舉個(gè)真實(shí)例子:你想把 Element Plus 的輸入框圓角改成 8px。

錯(cuò)誤寫(xiě)法(不生效):

<style scoped>
.el-input__inner {
  border-radius: 8px;
}
</style>

正確寫(xiě)法:

<template>
  <div class="my-form">
    <el-input v-model="value" />
  </div>
</template>
<style scoped>
.my-form :deep(.el-input__inner) {
  border-radius: 8px;
}
</style>

為什么要加 .my-form 這個(gè)父級(jí)?

避免全局污染!如果直接寫(xiě) :deep(.el-input__inner),那么這個(gè)頁(yè)面里所有 Element 輸入框都會(huì)被改掉。加上父級(jí)限定,就能精準(zhǔn)控制范圍。

到此這篇關(guān)于Vue 中的 deep、v-deep 和 &gt;&gt;&gt;區(qū)別解析的文章就介紹到這了,更多相關(guān)Vue deep、v-deep 和 &gt;&gt;&gt; 區(qū)別內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • vue.js iview打包上線后字體圖標(biāo)不顯示解決辦法

    vue.js iview打包上線后字體圖標(biāo)不顯示解決辦法

    這篇文章主要介紹了vue.js iview打包上線后字體圖標(biāo)不顯示解決辦法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-01-01
  • vue實(shí)現(xiàn)通過(guò)手機(jī)號(hào)發(fā)送短信驗(yàn)證碼登錄的示例代碼

    vue實(shí)現(xiàn)通過(guò)手機(jī)號(hào)發(fā)送短信驗(yàn)證碼登錄的示例代碼

    本文主要介紹了vue實(shí)現(xiàn)通過(guò)手機(jī)號(hào)發(fā)送短信驗(yàn)證碼登錄的示例代碼,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2022-05-05
  • Vue異步請(qǐng)求導(dǎo)致頁(yè)面數(shù)據(jù)渲染錯(cuò)誤問(wèn)題解決方法示例

    Vue異步請(qǐng)求導(dǎo)致頁(yè)面數(shù)據(jù)渲染錯(cuò)誤問(wèn)題解決方法示例

    這篇文章主要為大家介紹了Vue中異步請(qǐng)求導(dǎo)致頁(yè)面數(shù)據(jù)渲染錯(cuò)誤問(wèn)題解決方法示例,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-09-09
  • vant?toast?關(guān)閉棧溢出問(wèn)題及解決

    vant?toast?關(guān)閉棧溢出問(wèn)題及解決

    這篇文章主要介紹了vant?toast?關(guān)閉棧溢出問(wèn)題及解決,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-05-05
  • Vue官網(wǎng)todoMVC示例代碼

    Vue官網(wǎng)todoMVC示例代碼

    本篇文章主要介紹了Vue官網(wǎng)todoMVC示例代碼,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2018-01-01
  • Vant Uploader實(shí)現(xiàn)上傳一張或多張圖片組件

    Vant Uploader實(shí)現(xiàn)上傳一張或多張圖片組件

    這篇文章主要為大家詳細(xì)介紹了Vant Uploader實(shí)現(xiàn)上傳一張或多張圖片組件,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-09-09
  • Vue 實(shí)現(xiàn)穿梭框功能的詳細(xì)代碼

    Vue 實(shí)現(xiàn)穿梭框功能的詳細(xì)代碼

    本文給大家介紹Vue 實(shí)現(xiàn)穿梭框功能,代碼分為css,html和js代碼,代碼簡(jiǎn)單易懂,對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友參考下吧
    2021-10-10
  • vue組件添加事件@click.native操作

    vue組件添加事件@click.native操作

    這篇文章主要介紹了vue組件添加事件@click.native操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2020-10-10
  • 詳解Webstorm 新建.vue文件支持高亮vue語(yǔ)法和es6語(yǔ)法

    詳解Webstorm 新建.vue文件支持高亮vue語(yǔ)法和es6語(yǔ)法

    這篇文章主要介紹了Webstorm 添加新建.vue文件功能并支持高亮vue語(yǔ)法和es6語(yǔ)法,非常具有實(shí)用價(jià)值,需要的朋友可以參考下
    2017-10-10
  • Vue2中使用自定義指令實(shí)現(xiàn)el-table虛擬列表的代碼示例

    Vue2中使用自定義指令實(shí)現(xiàn)el-table虛擬列表的代碼示例

    在實(shí)際開(kāi)發(fā)中,我們可能會(huì)面臨其他需求,例如在 el-table 中無(wú)法使用分頁(yè)技術(shù)的情況下展示海量數(shù)據(jù),這種情況下,頁(yè)面可能會(huì)出現(xiàn)卡頓,嚴(yán)重時(shí)甚至可能引發(fā)瀏覽器崩潰,所以針對(duì)這個(gè)問(wèn)題本文給大家介紹了vue2中使用自定義指令實(shí)現(xiàn)el-table虛擬列表,需要的朋友可以參考下
    2025-01-01

最新評(píng)論

正镶白旗| 旅游| 祁门县| 都江堰市| 拉孜县| 东方市| 无锡市| 屏边| 潞西市| 寿宁县| 宣化县| 长沙市| 廊坊市| 祥云县| 米林县| 塘沽区| 浦城县| 凤城市| 洛隆县| 馆陶县| 长治县| 报价| 大连市| 澄江县| 三亚市| 南昌县| 汤原县| 乐安县| 徐州市| 营口市| 高雄市| 石阡县| 宝兴县| 前郭尔| 浮山县| 安阳市| 什邡市| 贺兰县| 唐河县| 两当县| 嵊泗县|