浅谈关于.vue文件中style的scoped属性


Posted in Javascript onAugust 19, 2017

本文介绍了.vue文件中style的scoped属性以及踩到的坑,具体如下:

scoped可以实现style只作用于当前的.vue文件

<template>
  <div class="user"></div>
</template>
<script>

</script>

<style lang='less' scoped>
.user {
  color:#333;
}
</style>

上面的文件渲染出的dom结构会是这样的

<div data-v-53795c54 class="user"></div>

css样式是这样的

.user[data-v-53795c54] {
  color:#333;
}

这样就现实了样式只作用于当前.vue文件。

问题:添加scoped属性后样式不起作用

原因是,css被构建成.user[data-v-53795c54] 但是doc节点依然是普通的<div class="user"></div>,导致样式不能作用在dom上而失效。

原因在引用的组件上,解决的方法是将scoped属性关闭。

scoped关闭时的使用建议

如果需要将scoped关闭,那么style就是作用于整个单页应用

可是我们仍然想要样式之作用于当前的.vue文件,减少对其他文件样式的影响

1、给template下的根节点加一个class,并基于这个class添加样式

<template>
<div class="user">
<p class="name">zaunk</p>
</div>
</template>
<script>

</script>

<style lang='less>
.user {
color:#333;
.name {
color:#122222;
}
}
</style>

2、基于第一条建议,不要有定义两个相同class名称的根节点,因为都作用于整个单页会有一个失效。

3、不要使用 span {}这种做样式设置。因为

<template>
<div class="user">
<el-button class="name">zaunk</el-button>
</div>
</template>
<style lang='less>
.user {
color:#333;
span {
color:#122222;
}
}
</style>

上面的样式同样会作用于组件el-button,这是很危险的

在vue组件中style scoped中遇到的坑

浅谈关于.vue文件中style的scoped属性

在uve组件中我们我们经常需要给style添加scoped来使得当前样式只作用于当前组件的节点。添加scoped之后,实际上vue在背后做的工作是将当前组件的节点添加一个像data-v-1233这样唯一属性的标识,当然也会给当前style的所有样式添加[data-v-1233]这样的话,就可以使得当前样式只作用于当前组件的节点。但是我们需要注意的是如果我们添加了子组件,同样的,如果子组件也用scoped标识了,那么在父组件中是不能设置子组件中的节点的。若父组件有scoped,子组件没有设置,同样,也是不能在父组件中设置子组件的节点的样式的,因为父组件用了scoped,那么父组件中style设置的样式都是唯一的了,不会作用与其他的组件样式,我在用vue-quill-editor富文本编辑器的时候就遇到了这个坑,我只是想让内容区设置一个高度,这样的话,是必须在App.vue中设置的,我们App.vue相当于根容器,没有设置scoped,所以是可以设置的。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
鼠标移入移出事件改变图片的分辨率的两种方法
Dec 17 Javascript
javascript 终止函数执行操作
Feb 14 Javascript
zepto中使用swipe.js制作轮播图附swipeUp,swipeDown不起效果问题
Aug 27 Javascript
基于Jquery制作图片文字排版预览效果附源码下载
Nov 18 Javascript
JS实现隐藏同级元素后只显示JS文件内容的方法
Sep 04 Javascript
JS Select下拉框(支持输入模糊查询)
Feb 04 Javascript
详解Angular2 关于*ngFor 嵌套循环
May 22 Javascript
JS实现经典的中国地区三级联动下拉菜单功能实例【测试可用】
Jun 06 Javascript
js实现文字列表无缝滚动效果
Jun 23 Javascript
VueJs单页应用实现微信网页授权及微信分享功能示例
Jul 26 Javascript
Bootstrap模态对话框用法简单示例
Aug 31 Javascript
在Vue中使用this.$store或者是$route一直报错的解决
Nov 08 Javascript
如何理解Vue的作用域插槽的实现原理
Aug 19 #Javascript
Vue Transition实现类原生组件跳转过渡动画的示例
Aug 19 #Javascript
JavaScript文件的同步和异步加载的实现代码
Aug 19 #Javascript
深入理解ES6学习笔记之块级作用域绑定
Aug 19 #Javascript
深入理解ES6的迭代器与生成器
Aug 19 #Javascript
Mui使用jquery并且使用点击跳转新窗口的实例
Aug 19 #jQuery
Vue自定义事件(详解)
Aug 19 #Javascript
You might like
PHP如何实现跨域
2016/05/30 PHP
PHP mysqli事务操作常用方法分析
2017/07/22 PHP
ThinkPHP5+UEditor图片上传到阿里云对象存储OSS功能示例
2019/08/05 PHP
dwr spring的集成实现代码
2009/03/22 Javascript
js利用与或运算符优先级实现if else条件判断表达式
2010/04/15 Javascript
javascript对talbe进行动态添加、删除、验证实现代码
2012/03/29 Javascript
$.get获取一个文件的内容示例代码
2013/09/11 Javascript
javascript类型转换使用方法
2014/02/08 Javascript
nodejs中操作mysql数据库示例
2014/12/20 NodeJs
js实现字符串转日期格式的方法
2015/05/20 Javascript
jQuery mobile 移动web(6)
2015/12/20 Javascript
玩转JavaScript OOP - 类的实现详解
2016/06/08 Javascript
Angular2使用Angular-CLI快速搭建工程(二)
2017/05/21 Javascript
JS中去掉array中重复元素的方法
2017/05/26 Javascript
vue父组件向子组件(props)传递数据的方法
2018/01/02 Javascript
electron实现静默打印的示例代码
2019/08/12 Javascript
vue中上传视频或图片或图片和文字一起到后端的解决方法
2019/12/01 Javascript
微信小程序wx.navigateTo方法里的events参数使用详情及场景
2020/01/07 Javascript
JavaScript构造函数原理及实现流程解析
2020/11/19 Javascript
编写v-for循环的技巧汇总
2020/12/01 Javascript
[07:06]2018DOTA2国际邀请赛寻真——卫冕冠军Team Liquid
2018/08/10 DOTA
[01:07:57]DOTA2-DPC中国联赛 正赛 Ehome vs Magma BO3 第二场 1月19日
2021/03/11 DOTA
Python实现简单HTML表格解析的方法
2015/06/15 Python
Python字符串转换成浮点数函数分享
2015/07/24 Python
python爬取网页内容转换为PDF文件
2020/07/28 Python
Python OpenCV实现鼠标画框效果
2020/08/19 Python
使用Python刷淘宝喵币(低阶入门版)
2019/10/30 Python
django rest framework serializer返回时间自动格式化方法
2020/03/31 Python
python 爬取免费简历模板网站的示例
2020/09/27 Python
阿根廷网上配眼镜:SmartBuyGlasses阿根廷
2016/08/19 全球购物
澳大利亚领先的时尚内衣零售商:Bras N Things
2020/07/28 全球购物
临床医学系毕业生推荐信
2013/11/09 职场文书
最新奶茶店创业计划书
2014/01/25 职场文书
法人委托书范本
2014/09/15 职场文书
医院2014国庆节活动策划方案
2014/09/21 职场文书
Win11怎么解除儿童账号限制?Win11解除微软儿童账号限制方法
2022/07/07 数码科技