解决vue scoped html样式无效的问题


Posted in Javascript onOctober 24, 2020

1、问题场景

page1,page2都使用flexible移动端自适应的时候,有一个页面page2需要手动设置rem基准值,

//手动设置基准
html{ 
 font-size: 120px !important;
}

但是在page2引用的self.less里面设置了基准,竟然没有生效

2、问题分析scoped属性

在引用self.less的时候,使用了属性scoped

解决vue scoped html样式无效的问题

vue中引入了scoped这个概念,设计思想就是让当前组件的样式不会修改到其他页面的样式,使用了data-v-hash的方式来使css有了他对应的模块的标识,通俗来说就是使用了scoped属性,template里面的html都会多一个data-v-hash的属性,css 选择器会根据data-v-hash来进行选择,当前的css文件只会对当前的页面生效。参考下图

解决vue scoped html样式无效的问题

那么问题来了,scoped只对当前组件里面的内容生效,会对组件里面的dom加data-v-hash属性,而不会对html,body等组件之外的dom添加,但是css里面的属性选择器都是data-v-hash属性的,参考下图,椭圆形里面是组件之外的,没有data-v-hash属性,所以加了scoped属性的css会对组件外无效。长方形里面的dom是组件里面的,data-v-hash跟css里面的data-v-hash是一致的会生效。

解决vue scoped html样式无效的问题

虽然css里面的body选择器也添加了data-v-hash,但是页面dom没有data-v-hash属性,所以css里面设置的body样式无效。

解决vue scoped html样式无效的问题

3、解决办法

针对必须设置属性scoped的组件,可以在page2.vue里面再单独写一个style,在页面里面单独写组件之外(html,body等)的样式,因为scoped不会对组件之外的dom增加data-v-hash属性

解决vue scoped html样式无效的问题

但是新问题来了,page2设置以后,影响了page1页面的布局,page1页面html的的font-size样式依然是120px,

当然会影响啊,page2也引用了page1的样式啊,但是page2设置了scoped,所以只有page2的html样式会影响page1,

解决办法就是再vue什么周期create里面,用js给html设置font-size

4、总结

遇到了这问题,终于搞明白了scoped染渲染规则,在添加了scoped属性的组件

给组件(template)里面的dom节点,加了一共不重复属性的data-v-hash,来标志唯一性

给组件里面引用的的样式文件,在每个选择器后面添加了一个等同于dom节点一样的data-v-hash字段,实现类似于作用域的问题,不影响全局

如果组件里面还有组件,只会给最外层的组件里面dom,添加data-v-hash,不会影响组件内部引用的组件

补充知识:vue中scoped慎用

scoped表示当前style属性只属于当前模块

实现原理:

vue通过在DOM结构以及css样式上加上唯一的标记 data-v-469af010,保证唯一,

问题:

1.父组件无scoped属性,子组件带有scoped,父组件是无法操作子组件的样式的(原因在原理中可知),虽然我们可以在全局中通过该类标签的标签选择器设置样式,但会影响到其他组件

2.父组件有scoped属性,子组件无,父组件也无法设置子组件样式,因为父组件的所有标签都会带有data-v-469af010唯一标志,但子组件不会带有这个唯一标志属性,与1同理,虽然我们可以在全局中通过该类标签的标签选择器设置样式,但会影响到其他组件

3.父子组建都有,同理也无法设置样式,更改起来增加代码量

因此如果组件内部还有组件,只会给最外层的组件里的标签加上唯一属性字段,不影响组件内部引用的组件( 注意 )

方案:

1.混合使用全局属性和局部属性

<style>
/* global styles */
</style>
<style scoped>
/* local styles */
</style>

2.深选择器

<template>
 <div id="app">
  <gHeader></gHeader>
 </div>
</template>
<style lang="css" scoped>
 .gHeader /deep/ .name{ //第一种写法
  color:red;
 }
 .gHeader >>> .name{  //二种写法
  color:red;
 }
</style>

以上这篇解决vue scoped html样式无效的问题就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
父子窗体间传递JSON格式的数据的代码
Dec 25 Javascript
JS中for循序中延迟加载动态效果的具体实现
Aug 18 Javascript
JS中typeof与instanceof之间的区别总结
Nov 14 Javascript
JQuery+Ajax无刷新分页的实例代码
Feb 08 Javascript
在Linux上用forever实现Node.js项目自启动
Jul 09 Javascript
原生javascript实现DIV拖拽并计算重复面积
Jan 02 Javascript
EasyUI闪屏EasyUI页面加载提示(原理+代码+效果图)
Feb 21 Javascript
JavaScript中两个字符串的匹配
Jun 08 Javascript
js发送短信倒计时的简单实现方法
Sep 08 Javascript
jQuery实现数字自动增加或者减少的动画效果示例
Dec 11 jQuery
详解TypeScript+Vue 插件 vue-class-component的使用总结
Feb 18 Javascript
使用vue引入maptalks地图及聚合效果的实现
Aug 10 Javascript
vue项目查看vue版本及cli版本的实现方式
Oct 24 #Javascript
Ant Design的Table组件去除
Oct 24 #Javascript
Ant design vue table 单击行选中 勾选checkbox教程
Oct 24 #Javascript
Antd的Table组件嵌套Table以及选择框联动操作
Oct 24 #Javascript
解决Antd 里面的select 选择框联动触发的问题
Oct 24 #Javascript
ant-design-vue中的select选择器,对输入值的进行筛选操作
Oct 24 #Javascript
jquery插件懒加载的示例
Oct 24 #jQuery
You might like
PHP的中问验证码
2006/11/25 PHP
PHP 变量类型的强制转换
2009/10/23 PHP
PHP 数组排序方法总结 推荐收藏
2010/06/30 PHP
PHP引用(&amp;)各种使用方法实例详解
2014/03/20 PHP
完美解决phpexcel导出到xls文件出现乱码的问题
2016/10/29 PHP
Ucren Virtual Desktop V2.0
2006/11/07 Javascript
node.js应用后台守护进程管理器Forever安装和使用实例
2014/06/01 Javascript
JavaScript程序中的流程控制语句用法总结
2016/05/23 Javascript
jQuery在ie6下无法设置select选中的解决方法详解
2016/09/20 Javascript
CodeMirror js代码加亮使用总结
2017/03/25 Javascript
Kindeditor单独调用单图上传增加预览功能的实例
2017/07/31 Javascript
jQuery的Ajax接收java返回数据方法
2018/08/11 jQuery
浅析vue-router原理
2018/10/19 Javascript
小程序中canvas的drawImage方法参数使用详解
2019/07/04 Javascript
JS apply用法总结和使用场景实例分析
2020/03/14 Javascript
js实现表格单列按字母排序
2020/08/12 Javascript
Python中字典创建、遍历、添加等实用操作技巧合集
2015/06/02 Python
Python中几种导入模块的方式总结
2017/04/27 Python
解决Python字典写入文件出行首行有空格的问题
2017/09/27 Python
Python中用psycopg2模块操作PostgreSQL方法
2017/11/28 Python
Python列表解析配合if else的方法
2018/06/23 Python
Django实现支付宝付款和微信支付的示例代码
2018/07/25 Python
Python异常的检测和处理方法
2018/10/26 Python
详解如何设置Python环境变量?
2019/05/13 Python
浅谈Django2.0 加xadmin踩的坑
2019/11/15 Python
python如何通过闭包实现计算器的功能
2020/02/22 Python
Python collections.defaultdict模块用法详解
2020/06/18 Python
全球度假村:Club Med
2017/11/27 全球购物
音乐器材管理制度
2014/01/31 职场文书
党的群众路线教育实践活动动员会主持词
2014/03/20 职场文书
广播体操口号
2014/06/18 职场文书
服务标语大全
2014/06/18 职场文书
小学中队委竞选稿
2015/11/20 职场文书
Python实战之实现康威生命游戏
2021/04/26 Python
java高级用法JNA强大的Memory和Pointer
2022/04/19 Java/Android
js前端图片加载异常兜底方案
2022/06/21 Javascript