浅谈关于.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 相关文章推荐
浏览器解析js生成的html出现样式问题的解决方法
Apr 16 Javascript
JQuery对id中含有特殊字符的转义处理示例
Sep 06 Javascript
javascript实现点击按钮让DIV层弹性移动的方法
Feb 24 Javascript
JavaScript检测弹出窗口是否已经关闭的方法
Mar 24 Javascript
jQuery遍历json的方法(推荐)
Jun 12 Javascript
Javascript 创建类并动态添加属性及方法的简单实现
Oct 20 Javascript
JavaScript中关于iframe滚动条的去除和保留
Nov 17 Javascript
基于JS实现移动端左滑删除功能
Jul 28 Javascript
jQuery实现的弹幕效果完整实例
Sep 06 jQuery
微信小程序getPhoneNumber获取用户手机号
Sep 29 Javascript
Vue拖拽组件开发实例详解
May 11 Javascript
在vue-cli3.0 中使用预处理器 (Sass/Less/Stylus) 配置全局变量操作
Aug 10 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中文本数据翻页(留言本翻页)
2006/10/09 PHP
BBS(php &amp; mysql)完整版(二)
2006/10/09 PHP
解析PHP中的正则表达式以及模式匹配
2013/06/19 PHP
php中array_unshift()修改数组key注意事项分析
2016/05/16 PHP
详解php实现页面静态化原理
2017/06/21 PHP
基于jquery的inputlimiter 实现字数限制功能
2010/05/30 Javascript
js写一个弹出层并锁屏效果实现代码
2012/12/07 Javascript
js弹出框轻量级插件jquery.boxy使用介绍
2013/01/15 Javascript
Javascript中产生固定结果的函数优化技巧
2013/01/16 Javascript
jQuery实现的一个自定义Placeholder属性插件
2014/08/11 Javascript
jQuery验证插件 Validate详解
2014/11/20 Javascript
js实现图片无缝滚动特效
2020/03/19 Javascript
AngularJS创建自定义指令的方法详解
2016/11/03 Javascript
vue.js入门(3)——详解组件通信
2016/12/02 Javascript
vue实现简单实时汇率计算功能
2017/01/15 Javascript
Vuejs 用$emit与$on来进行兄弟组件之间的数据传输通信
2017/02/23 Javascript
JavaScript解析任意形式的json树型结构展示
2017/07/23 Javascript
JavaScript 中定义函数用 var foo = function () {} 和 function foo()区别介绍
2018/03/01 Javascript
vue基础之data存储数据及v-for循环用法示例
2019/03/08 Javascript
详解基于React.js和Node.js的SSR实现方案
2019/03/21 Javascript
[46:37]LGD vs TNC 2019国际邀请赛小组赛 BO2 第二场 8.15
2019/08/16 DOTA
Python常见文件操作的函数示例代码
2011/11/15 Python
python+pyqt5实现KFC点餐收银系统
2019/01/24 Python
Python子类继承父类构造函数详解
2019/02/19 Python
Python生成指定数量的优惠码实操内容
2019/06/18 Python
Centos7 下安装最新的python3.8
2019/10/28 Python
Django中密码的加密、验密、解密操作
2019/12/19 Python
python连接mongodb数据库操作数据示例
2020/11/30 Python
如何利用Python matplotlib绘制雷达图
2020/12/21 Python
突袭HTML5之Javascript API扩展5—其他扩展(应用缓存/服务端消息/桌面通知)
2013/01/31 HTML / CSS
AmazeUI的下载配置与Helloworld的实现
2020/08/19 HTML / CSS
Agoda中文官网:安可达(低价预订全球酒店)
2021/01/18 全球购物
研究生求职推荐信范文
2013/11/30 职场文书
会计电算化学生个人的自我评价
2014/02/08 职场文书
2014年公路养护工作总结
2014/12/04 职场文书
2016元旦文艺汇演主持词
2015/07/06 职场文书