我们知道在 Vue 中,style可以用两种方式来导入:

// method1

@import ('./a.css');

//method2

复制代码

但是不管哪一种,导进的css文件都是应用于全局的,有时候我们不想要这样的效果。而要使得css只对当前的组件有效,即局部应用。vue中提供了scoped属性,可以很好地解决该问题。

当我们有如下应用场景时,新的问题又出现了:

export default {

data () {

return {

}

},

props: {

mhtml: String

}

}

// some stylesheets to imploy to v-html

复制代码

该组件中的style如果设置为scoped,那么style不会应用到 v-html中,如果不设置为scoped,那么会污染全局变量,导致不可知的后果。

如何fix呢?官网给出了两个解决办法:

In single-file components, scoped styles will not apply to content inside v-html, because that HTML is not processed by Vue’s template compiler. If you want to target v-html content with scoped CSS, you can instead use CSS modules or an additional, global

对于方法一,css module是一个解决全局变量和代码依赖的规范,原理是对声明了module的样式表中的样式赋予哈希class名, 可以参考 官网以及阮一峰老师的文章

对于方法二,意思是在全局变量中,通过特殊的命名(比如说BEM)来手动约束样式显示

可惜,以上都不是我想要的解决方案

在Stack Overflow中找到了第三种解:

可以使用 deep scoped 来实现对v-html的样式应用,并且不设置为全局

代码如下:

export default {

data () {

return {

}

},

props: {

mhtml: String

}

}

.markDiv>>>h1,h2,h3,h4,h5,h6{

font-family: "PT Sans","SF UI Display", ".PingFang SC","PingFang SC", "Neue Haas Grotesk Text Pro", "Arial Nova", "Segoe UI", "Microsoft YaHei", "Microsoft JhengHei", "Helvetica Neue", "Source Han Sans SC", "Noto Sans CJK SC", "Source Han Sans CN", "Noto Sans SC", "Source Han Sans TC", "Noto Sans CJK TC", "Hiragino Sans GB", sans-serif;

text-rendering:optimizelegibility;margin-bottom:1em;font-weight:bold; line-height: 1.8rem;

}

复制代码

这样一来, 这些样式就会影响该组件的子组件,其中的v-html自然也会因之而改变,但又不会『污染』全局,很好地fix我们的问题。

那么,原理是什么呢?

我们在vue-loader的release说明 中,发现从v12.2.0开始,加了这么一个特性:

vue v html安全,vue 中控制v-html 中的样式,但不影响全局的小技巧相关推荐

  1. python中modify的用法_30段极简Python代码:这些小技巧你都Get了么

    学 Python 怎样才最快,当然是实战各种小项目,只有自己去想与写,才记得住规则.本文是 30 个极简任务,初学者可以尝试着自己实现:本文同样也是 30 段代码,Python 开发者也可以看看是不是 ...

  2. php中设置table表格边框大小,有关HTML表格边框的设置小技巧

    下面小编就为大家带来一篇有关HTML表格边框的设置小技巧.小编觉得挺不错的,现在分享给大家,也给大家做个参考 对于很多初学HTML的人来说,表格 一般我们用表格的时候总会给它个border属性,比如: ...

  3. Vue中两个让你幸福感爆棚的组件导入小技巧之循环代替Ctrl C/V(独家总结)

    前言 小伙伴们大家好,今天要跟大家分享的是能够提升幸福感的关于组件导入的两个小技巧.做前端开发的小伙伴都知道,当前前端中有两大流行的框架Vue和React.而现在的前端开发中大部分公司用的也都是这两大 ...

  4. Vue的基础认知一---构建环境/v指令的使用

    大家新年好啊,不对,今天是情人节呢,哈哈哈,祝大家节日快乐,你们是不是都出去约约约了啊,好吧,你们都去玩吧,我在家码代码,汗~讲真,这大过年的实在是不愿意学习啊,可是眼看着好久没写博文了,心里有点过意 ...

  5. vue中控制浏览器滚动

    vue中控制浏览器滚动 最近的业务中需要用到控制浏览器滚动到对应位置的问题,pc端用到的是vue框架,业务是点击题目题号,定位到相对应的题目(相信业务中会经常遇到哈),首先想到的肯定就是js老大哥了, ...

  6. vue中控制mock在开发环境使用,在生产环境禁用

    文章目录 vue中控制mock在开发环境使用,在生产环境禁用 解决方案 vue中控制mock在开发环境使用,在生产环境禁用 原因:mock拦截所有的axios请求,根据请求,做出相应的响应.平时前后端 ...

  7. v浅谈vue之vant框架

    目录 vant框架的使用 使用一个Tabbar 标签栏 App.vue 封装为一个MainTabbar.vue组件 使用一个Swipe 轮播图 **Home.vue**组件使用轮播图 使用一个 Gir ...

  8. 乐鑫Esp32学习之旅 18 入门京东微联·小京鱼的控制面板H5开发,读懂vue语法,做自己的控制页面。

    本系列博客学习由非官方人员 半颗心脏 潜心所力所写,仅仅做个人技术交流分享,不做任何商业用途.如有不对之处,请留言,本人及时更改. 1. 爬坑学习新旅程,虚拟机搭建esp32开发环境,打印 " ...

  9. vue导出excel加一个进度条_vue项目中如何把数据导出成excel文件

    Loading... 关于vue中如何把数据导出成excel文件 ### 1. 安装依赖 ``` yarn add file-saver yarn add xlsx yarn add script-l ...

最新文章

  1. 理解Python的迭代器(转)
  2. Google Test(GTest)使用方法和源码解析——自动调度机制分析
  3. Transact_SQL
  4. 最新的ndkr20编译c_史上最优雅的NDK加载pass方案
  5. 运行测试Caused by: java.lang.UnsatisfiedLinkError: no attach in java.library.path错误解决
  6. 在远程桌面在目标主机与客户机复制文件?
  7. 75的写的自己情感经历(转贴自天涯社区)
  8. python全排列_全排列算法python实现
  9. 二级Python 第三方库
  10. python loadtxt_Python 数据科学入门2:Matplotlib
  11. java封装为so,java挪用.so文件
  12. zabbix自定义监控Key值
  13. 谈谈数据模型、领域模型、视图模型和命令模型
  14. gis坐标北京54转WGS84坐标系
  15. J2Cache SpringBoot集成(j2cache-spring-boot2-starter)
  16. wincc做皮带动画_wincc 如何做动画
  17. vue项目-添加商品的多规格
  18. 保研夏令营数学复习(高数 概率 线代)
  19. 【时间序列】ICML 2020 时间序列相关论文总结(附原文源码)
  20. Python二进制数据处理

热门文章

  1. 高级ZK:异步UI更新和后台处理–第2部分
  2. Java Web托管选项流程图
  3. 用java代码写美国时间_如何衡量Java代码所用的时间?
  4. JavaScript/JS的学习
  5. 使用aop解决事务问题(xml版)
  6. mysql 中间表的好处_Mysql中使用中间表提高统计查询速度
  7. zynq+linux固化程序,如何在 Zynq UltraScale+ MPSoC 上实现 Linux UIO 设计
  8. 对象必须实现 iconvertible。_java面向对象最全入门笔记(通俗易懂,适合初学者)...
  9. string index out of range_Java 12 骚操作, String居然还能这样玩!
  10. 浅析五种C语言内存分配的方法及区别