在vue組件中爲 <style>
標籤開啓 scoped
屬性,這樣樣式只做用於這個組件,而不會污染其餘組件。css
在項目中,咱們常常要引入外部的 UI 組件(如 elementUI、mint-ui),可是在父組件中添加 scoped
屬性後,父組件的樣式將不會滲透到子組件中,因此在父組件中書寫子組件的樣式是無效果的。html
下面有幾種方法來修改子組件樣式:vue
在父組件的 <style>
中去掉 scoped
後,父組件中能夠書寫子組件的樣式。但這樣會污染別的組件中的樣式sass
你能夠在一個組件中同時使用有做用域和無做用域的樣式:app
<style lang="sass" scoped> /* 本地樣式 */ </style>
<style lang="sass"> /* 全局樣式 * 修改子組件樣式,最好在子組件外嵌套一個類 */ </style>
複製代碼
若是你但願 scoped 樣式中的一個選擇器可以做用得「更深」,例如影響子組件,你能夠使用 >>> 操做符:ui
<template>
<div id="app">
<my-header></my-header>
</div>
</template>
<style scoped> .myHeader >>> .title { color: red; } </style>
複製代碼
<div class="myHeader">
<div class="title"></div>
</div>
複製代碼
有些像 SASS 之類的預處理器沒法正確解析 >>>
。這種狀況下你能夠用 /deep/
操做符取而代之 —— 這是一個 >>>
的別名,一樣能夠正常工做。spa
<style scoped> .myHeader /deep/ .title { color: red; } </style>
複製代碼
這樣的寫法及修改了子組件的樣式,又不會污染全局樣式!code
注意:經過
v-html
建立的 DOM 內容不受做用域內的樣式影響,可是你仍然能夠經過深度做用選擇器來爲他們設置樣式htm