解决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 相关文章推荐
jQuery 1.7.2中getAll方法的疑惑分析
May 23 Javascript
jquery中$.post()方法的简单实例
Feb 04 Javascript
一个不错的仿携程自定义数据下拉选择select
Sep 01 Javascript
JavaScript代码性能优化总结(推荐)
May 16 Javascript
第六篇Bootstrap表格样式介绍
Jun 21 Javascript
JavaScript中的遍历详解(多种遍历)
Apr 07 Javascript
JavaScript实现QQ聊天消息展示和评论提交功能
May 22 Javascript
node.js express中app.param的用法详解
Jul 16 Javascript
详解在vue-cli项目中使用mockjs(请求数据删除数据)
Oct 23 Javascript
js中el表达式的使用和非空判断方法
Mar 28 Javascript
记录一次开发微信网页分享的步骤
May 07 Javascript
基于postman获取动态数据过程详解
Sep 08 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 数组二分法查找函数代码
2010/02/16 PHP
ThinkPHP之用户注册登录留言完整实例
2014/07/22 PHP
php文件压缩之PHPZip类用法实例
2015/06/18 PHP
PHP类的自动加载机制实现方法分析
2019/01/10 PHP
统一接口:为FireFox添加IE的方法和属性的js代码
2007/03/25 Javascript
HTML Dom与Css控制方法
2010/10/25 Javascript
利用cookie记住背景颜色示例代码
2013/11/04 Javascript
node.js中的console.warn方法使用说明
2014/12/09 Javascript
JavaScript判断FileUpload控件上传文件类型
2015/09/28 Javascript
浅谈几种常用的JS类定义方法
2016/06/08 Javascript
微信小程序 swiper组件轮播图详解及实例
2016/11/16 Javascript
基于JavaScript实现下拉列表左右移动代码
2017/02/07 Javascript
在vue项目中集成graphql(vue-ApolloClient)
2018/09/08 Javascript
Angular Excel 导入与导出的实现代码
2019/04/17 Javascript
解决layer图标icon不加载的问题
2019/09/04 Javascript
vue 实现通过vuex 存储值 在不同界面使用
2019/11/11 Javascript
vue使用nprogress加载路由进度条的方法
2020/06/04 Javascript
简单谈谈Python中的元祖(Tuple)和字典(Dict)
2017/04/21 Python
Python使用smtp和pop简单收发邮件完整实例
2018/01/09 Python
对Python捕获控制台输出流的方法详解
2019/01/07 Python
python利用wx实现界面按钮和按钮监听和字体改变的方法
2019/07/17 Python
Django中间件拦截未登录url实例详解
2019/09/03 Python
python requests抓取one推送文字和图片代码实例
2019/11/04 Python
Python中__repr__和__str__区别详解
2019/11/07 Python
如何编写python的daemon程序
2021/01/07 Python
详解python的变量缓存机制
2021/01/24 Python
python实现按日期归档文件
2021/01/30 Python
Python datetime模块的使用示例
2021/02/02 Python
python 实现图片裁剪小工具
2021/02/02 Python
经典团队口号
2014/06/06 职场文书
通知格式
2015/04/27 职场文书
2015年社区科普工作总结
2015/05/13 职场文书
小学作文之描写天气
2019/08/15 职场文书
“爱眼护眼,提前预防近视”倡议书3篇
2019/10/30 职场文书
使用SQL实现车流量的计算的示例代码
2022/02/28 SQL Server
openEuler 搭建java开发环境的详细过程
2022/06/10 Servers