Vue 组件之间样式冲突

vue 组件化,各组件内都可以在 style 部分写样式,这些样式却不是相互独立的,最终组合在一起,难免就会产生样式的污染。

首先来看一下两个 vue 组件代码:

1.ParentTestStyle.vue

父组件控件:
testParentStyle
样式穿透
子组件控件:

import childStyle from "./ChildTestStyle";

export default {

components: { childStyle },

name: "ParentStyle",

data() {

return {};

}

};

.testStyle {

background-color: blue;

width: 300px;

height: 100px;

font-size: 20px;

color: white;

line-height: 100px;

margin: 10px;

}

.ParentDIV {

background-color: darkgreen;

width: 300px;

height: 100px;

line-height: 100px;

margin: 10px;

font-size: 20px;

color: white;

}

2.ChildTestStyle.vue

testChildStyle
样式穿透

export default {

name: "ChildStyle",

data() {

return {};

}

};

.testStyle {

background-color: red;

width: 300px;

height: 100px;

font-size: 20px;

color: white;

line-height: 100px;

margin: 10px;

}

.ChildDIV {

background-color: blueviolet;

width: 300px;

height: 100px;

line-height: 100px;

margin: 10px;

font-size: 20px;

color: white;

}

页面样式渲染效果如下:

001.png

结果分析:

该示例中

“testParentStyle”控件的样式并不是显示本组件内的样式.testStyle 中定义的背景蓝色,而是显示引用的子组件中的样式.testStyle 中定义的背景红色;

003.png

父组件中“污染控件”在本组件内并没有定义样式,而是引用了子组件中定义的样式.ChildDIV,结果也能按照子组件的样式定义进行显示;同样的,子组件中“污染控件”显示的是父组件中定义的样式。

004.png

这就能说明,两组件之间的样式不是完全隔离的,是存在相互冲突及污染的可能的。

为了保持组件样式的隔离独立性,VUE 中的 style 有一个 scoped 属性:

下面我们把这个属性给两个组件的样式定义中添加上看一下效果。

父组件样式修改如下:

.testStyle {

background-color: blue;

width: 300px;

height: 100px;

font-size: 20px;

color: white;

line-height: 100px;

margin: 10px;

}

.ParentDIV {

background-color: darkgreen;

width: 300px;

height: 100px;

line-height: 100px;

margin: 10px;

font-size: 20px;

color: white;

}

子组件样式修改类似。

页面效果:

005.png

通过观察对比,各组件的样式保持了隔离独立。

006.png

如图:样式中都会有一个特殊的 data id 标记将组件的样式私有化,scoped 域隔离。

据说,增加 scoped 子组件依然会继承父组件中的样式,进而造成 css 冲突污染,但是我测试发现不存在该问题。scoped 能够将各组件的样式锁定在组件内。

总结:

为了避免 vue 组件样式冲突污染,在设计组件样式的时候,尽量有一个全局观,定义样式类名等尽量命名规范化,防止造成命名一致进而相互影响。如果,需要完全隔离自定义专属样式,就使用 style 的 scoped 属性。

测试运行环境:

"dependencies": {

"vue": "^2.5.2",

"vue-resource": "^1.5.1",

"vue-router": "^3.0.1"

},

"engines": {

"node": ">= 6.0.0",

"npm": ">= 3.0.0"

},

"browserslist": [

"> 1%",

"last 2 versions",

"not ie <= 8"

]

vue 组件不受全局样式影响_Vue 组件之间样式冲突相关推荐

  1. uniapp 子组件 props拿不到数据_Vue组件间的几种通信方式

    前言 最近在刷面试题时,看见这个问题便做了个总结,欢迎各位补充!!! 为了更好的阅读性,请使用掘金访问 1.props & $emit--适用于父子组件通信 父组件通过prop向子组件传递数据 ...

  2. vue 组件不受全局样式影响_组件库引入全局样式lib/style/index.css,会污染全局基础样式...

    I have searched the issues of this repository and believe that this is not a duplicate. Version 1.3. ...

  3. vue点击input框出现弹窗_vue组件实现弹出框点击显示隐藏效果

    本文实例为大家分享了vue实现弹出框点击显示隐藏的具体代码,供大家参考,具体内容如下 效果如下图 由于我的更改密码弹出框是一个组件引用的,所以在一开始是隐藏的,这就需要在当前的页面上对弹出框组件设置v ...

  4. vue如何实现在页面上画画_vue组件:canvas实现图片涂鸦功能

    方案背景 需求 需要对图片进行标注,导出图片. 需要标注N多图片最后同时保存. 需要根据多边形区域数据(区域.颜色.名称)标注. 对应方案 用canvas实现涂鸦.圆形.矩形的绘制,最终生成图片bas ...

  5. uniapp 子组件 props拿不到数据_Vue组件间的通信

    人之间的感情是复杂的以及需要维护的,那么就免不得各种打电话 你有多久没有打电话了呢? 你又有多久没有收到电话了呢? 你还记得你的手机来电铃声吗???? 爸爸给儿子打电话 ☎️ 父组件通过使用v-bin ...

  6. props传递对象_vue组件中使用props传递数据的实例详解

    在 Vue 中,父子组件的关系可以总结为 props向下传递,事件向上传递.父组件通过 props 给子组件下发数据,子组件通过事件给父组件发送消息.看看它们是怎么工作的. 一.基本用法 组件不仅仅是 ...

  7. mpvue 转uniapp 导航栏样式错乱问题修复 tabbar 样式修复

    效果图:修改前,修改后 找了半天没找到原因,只能自己改样式了,下面是样式代码(在app.vue 里面加上就行) <style>/*每个页面公共css */uni-tabbar {box-s ...

  8. vue 组件全局封装_vue组件封装共用的方法

    这里提供两种vue封装共用组件的方法 方法一: main.js中import ListItem from './components/list.vue'//封装共用组件方法一 Vue.componen ...

  9. vue 修改div宽度_Vue 组件通信方式及其应用场景总结(1.5W字)

    前言 相信实际项目中用过vue的同学,一定对vue中父子组件之间的通信并不陌生,vue中采用良好的数据通讯方式,避免组件通信带来的困扰.今天笔者和大家一起分享vue父子组件之间的通信方式,优缺点,及其 ...

最新文章

  1. python写一个表白程序带时间_Python 打造最强表白程序
  2. c语言中如何自定义sort,c – 如何重载自定义std :: sort比较函数?
  3. tensorflow fetch 取回某个值
  4. word2vec原理(五):skip-gram和CBOW模型代码实现
  5. 【数字信号处理】 第二章、时域中的离散时间信号
  6. [网站seo优化] 史上最全增加外链的方法!
  7. printdocument python_python学习笔记之wxpython打印预览
  8. 归并排序 c++_数据结构:排序(4)||有序表的归并(归并排序)、基数排序
  9. PS给人物添加阴影和高光
  10. 2022微软中国在苏州北京上海等城市共有700多职位热招,欢迎自荐推荐转发
  11. IndexError: index 0 is out of bounds for axis 0 with size 0
  12. 互联网江湖“黑话”一览——狼厂、猫厂、鹅厂、狗厂……
  13. SDR# (SDRSharp)代码讲解 (二)
  14. SQL server更改表的架构名称——修改表名前缀为[dbo]
  15. 【深度学习】时间注意力模块与空间注意力模块
  16. 基础语法值c++提高编程
  17. html 一键复制功能以及下载功能
  18. python独热编码作用_关于sklearn独热编码
  19. QOS 之 WRED
  20. Introduction To AMBA 简单理解

热门文章

  1. mysql和oracle中进行工资查询后修改
  2. 【SEED Labs 2.0】Virtual Private Network (V*N) Lab
  3. 和大家分享一批android应用和游戏的源码
  4. 当导入js文件时报了Cannot set property 'marginRight' of undefined
  5. Scrapy 框架抓取美拍视频
  6. sqlalchemy查询,with_entities,label的使用
  7. vue3数组操作学习
  8. PermissionError: [Errno 13] Permission denied 如何解决
  9. 一步一步走向人生巅峰,成就富一代,铸就富二代,培育富三代-------
  10. Quartus II 9.1的安装与破解