解决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 相关文章推荐
免费空间广告万能消除代码
Sep 04 Javascript
基于Jquery的仿Windows Aero弹出窗(漂亮的关闭按钮)
Sep 28 Javascript
jquery的map与get方法详解
Nov 04 Javascript
让alert不出现弹窗的两种方法
May 18 Javascript
js中各种类型的变量在if条件中是true还是false
Jul 16 Javascript
jquery事件的ready()方法使用详解
Nov 11 Javascript
Bootstrap入门书籍之(一)排版
Feb 17 Javascript
jquery判断input值不为空的方法
Jun 05 Javascript
js实现的页面加载完毕之前loading提示效果完整示例【附demo源码下载】
Aug 02 Javascript
AngularJS 中的数据源的循环输出
Oct 12 Javascript
Vue项目组件化工程开发实践方案
Jan 09 Javascript
Vue 动态组件components和v-once指令的实现
Aug 30 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/10/09 PHP
php数组函数序列之array_key_exists() - 查找数组键名是否存在
2011/10/29 PHP
php开启与关闭错误提示适用于没有修改php.ini的权限
2014/10/16 PHP
php+mysqli预处理技术实现添加、修改及删除多条数据的方法
2015/01/30 PHP
Zend Framework教程之资源(Resources)用法实例详解
2016/03/14 PHP
Zend Framework分页类用法详解
2016/03/22 PHP
JavaScript中的私有成员
2006/09/18 Javascript
了解jQuery技巧来提高你的代码
2010/01/08 Javascript
jquery isType() 类型判断代码
2011/02/14 Javascript
document.getElementBy(&quot;id&quot;)与$(&quot;#id&quot;)有什么区别
2013/09/22 Javascript
深入探讨JavaScript、JQuery屏蔽网页鼠标右键菜单及禁止选择复制
2014/06/10 Javascript
JavaScript的9种继承实现方式归纳
2015/05/18 Javascript
js+html5通过canvas指定开始和结束点绘制线条的方法
2015/06/05 Javascript
jQuery实现两款有动画功能的导航菜单代码
2015/09/16 Javascript
jQuery实现磁力图片跟随效果完整示例
2016/09/16 Javascript
JS基于设计模式中的单例模式(Singleton)实现封装对数据增删改查功能
2018/02/06 Javascript
React styled-components设置组件属性的方法
2018/08/07 Javascript
jQuery实现动态添加和删除input框代码实例
2019/03/29 jQuery
送你43道JS面试题(收藏)
2019/06/17 Javascript
three.js欧拉角和四元数的使用方法
2020/07/26 Javascript
[01:07:46]完美世界DOTA2联赛循环赛 Magma vs IO BO2第二场 11.01
2020/11/02 DOTA
Python ORM框架SQLAlchemy学习笔记之安装和简单查询实例
2014/06/10 Python
Django ORM框架的定时任务如何使用详解
2017/10/19 Python
django模板结构优化的方法
2019/02/28 Python
python程序控制NAO机器人行走
2019/04/29 Python
django用户登录验证的完整示例代码
2019/07/21 Python
为什么黑客都用python(123个黑客必备的Python工具)
2020/01/31 Python
python的列表List求均值和中位数实例
2020/03/03 Python
Python HTMLTestRunner测试报告view按钮失效解决方案
2020/05/25 Python
Python 在函数上添加包装器
2020/07/28 Python
Python执行时间的几种计算方法
2020/07/31 Python
HTML5地理定位_动力节点Java学院整理
2017/07/12 HTML / CSS
新闻专业大学生找工作的自我评价
2013/10/30 职场文书
课外小组活动总结
2014/08/27 职场文书
2014年国庆晚会主持词
2014/09/19 职场文书
党员观看《筑梦中国》心得体会
2016/01/18 职场文书