Vue.js中v-html渲染的dom添加scoped的樣式

在vue.js中,要將一段字符串渲染成html,能夠使用v-html指令。css

可是 官方文檔 中的v-html部分也提醒了html

在單文件組件裏, scoped 的樣式不會應用在 v-html 內部,由於那部分 HTML 沒有被 Vue 的模板編譯器處理。若是你但願針對 v-html 的內容設置帶做用域的 CSS,你能夠替換爲 CSS Modules 或用一個額外的全局 <style> 元素手動設置相似 BEM 的做用域策略。

除了官方文檔給的方案之外,有一個更簡便的方式:深度做用選擇器vue

若是你但願 scoped 樣式中的一個選擇器可以做用得「更深」,例如影響子組件,你能夠使用 >>> 操做符:segmentfault

<style scoped>
.a >>> .b { /* ... */ }
</style>

上述代碼將會編譯成:
.a[data-v-f3f3eg9] .b { /* ... */ }
有些像 Sass 之類的預處理器沒法正確解析 >>>。這種狀況下你能夠使用 /deep/ 操做符取而代之——這是一個 >>> 的別名,一樣能夠正常工做。api

示例

<div class="product-content" v-html="contentView"></div>

<script>
export default {
    data(){
        return {
            contentView:'<h4>This is a title rendered by v-html</h4>'
        }
    }
}
</script>

<style scoped lang="less">
.product-content {
    ...
    /deep/ h4 {
      color: #333;
      ...
    }
  }
</style>

reference

https://cn.vuejs.org/v2/api/#...
https://vue-loader-v14.vuejs....
https://segmentfault.com/q/10...
https://blog.csdn.net/zgh0711...less

相關文章
相關標籤/搜索