Vue中对比scoped css和css module的区别


Posted in Javascript onMay 17, 2018

scoped css

官方文档

scoped css可以直接在能跑起来的vue项目中使用。

使用方法:

<style scoped>
h1 {
 color: #f00;
}
</style>

使用scoped划分本地样式的结果编译结果如下:

h1[data-v-4c3b6c1c] {
 color: #f00;
}

即在元素中添加了一个唯一属性用来区分。

缺点

一、如果用户在别处定义了相同的类名,也许还是会影响到组件的样式。

二、根据css样式优先级的特性,scoped这种处理会造成每个样式的权重加重了:

即理论上我们要去修改这个样式,需要更高的权重去覆盖这个样式。

所以在引用包含scoped的第三方插件时如若需要修改样式则需要全局修改,而且要注意权重问题,0.0迫不得已再使用!important。

三、如果组件内部包含有其他组件,只会给其他组件的最外层标签加上当前组件的data属性:

所以一般父组件如果加了scoped,会比已经设置过自己样式的子组件内除最外层标签的内层标签的权重低,影响不到他们的样式。

不过也是可以通过如下方法影响到的:

Vue中对比scoped css和css module的区别

四、scoped会使标签选择器渲染变慢很多倍

官方给了一些注意事项如下:

Vue中对比scoped css和css module的区别

我们可以看到用标签选择器时scoped会严重降低性能,而使用class或id则不会。

css module

官方文档

css module需要增加css-loader配置才能生效,具体可看文档的实现。

注意

如果你使用的是style-loader,如果想让配置生效需要更换到文档所述的vue-style-loader。

二者区别可以从这里了找vue-style-loader

使用如下:

<template>
 <p :class="$style.gray">
 Im gray
 </p>
</template>
<style module>
.gray {
 color: gray;
}
</style>

使用module的结果编译如下:

<p class="gray_3FI3s6uz">Im gray</p>
.gray_3FI3s6uz {
 color: gray;
}

由此可见,css module直接替换了类名,排除了用户设置类名影响组件样式的可能性。

这样$style.red就可以当做一个变量,并且可以在js中使用,如下:

<script>
export default {
 created () {
 console.log(this.$style.gray)
 // -> "gray_3FI3s6uz"
 // 一个基于文件名和类名生成的标识符
 }
}
</script>

我们可以看到,module在使用时多出了绑定和$style,如果你想更优雅,可以看一下这个vue-css-modules。

使用css module在keyframes中的问题

使用CSS modules处理动画animation的关键帧keyframes,动画名称必须先写。

animation: ani 1s;能正常编译,而animation: 1s ani;则会编译的不符合预期,所以平时养成良好的css参数书写顺序也很重要。

总结

综上所述,css module前期进行不麻烦的配置,实现的效果比scoped css更优,这里推荐使用css module。

以上所述是小编给大家介绍的Vue中对比scoped css和css module,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!

Javascript 相关文章推荐
出现“不能执行已释放的Script代码”错误的原因及解决办法
Aug 29 Javascript
js 与或运算符 || &amp;&amp; 妙用
Dec 09 Javascript
javascript学习笔记(八) js内置对象
Jun 19 Javascript
javascript解决innerText浏览器兼容问题思路代码
May 17 Javascript
JavaScript获取网页表单action属性的方法
Apr 02 Javascript
原生JS改变透明度实现轮播效果
Mar 24 Javascript
浅谈Vuejs Prop基本用法
Aug 17 Javascript
解析Vue 2.5的Diff算法
Nov 28 Javascript
vue.js 实现点击按钮动态添加li的方法
Sep 07 Javascript
基于js判断浏览器是否支持webGL
Apr 18 Javascript
vue+koa2搭建mock数据环境的详细教程
May 18 Javascript
js实现随机点名
Jan 19 Javascript
vue引用js文件的多种方式(推荐)
May 17 #Javascript
vue router+vuex实现首页登录验证判断逻辑
May 17 #Javascript
浅谈webpack-dev-server的配置和使用
May 17 #Javascript
Node.js模块全局安装路径配置方法
May 17 #Javascript
create-react-app修改为多页面支持的方法
May 17 #Javascript
vue 不使用select实现下拉框功能(推荐)
May 17 #Javascript
微信小程序自定义多选事件的实现代码
May 17 #Javascript
You might like
PHP教程 变量定义
2009/10/23 PHP
模板引擎正则表达式调试小技巧
2011/07/20 PHP
PHP 面向对象程序设计(oop)学习笔记 (二) - 静态变量的属性和方法及延迟绑定
2014/06/12 PHP
visual studio code 调试php方法(图文详解)
2017/09/15 PHP
使用Modello编写JavaScript类
2006/12/22 Javascript
input的focus方法使用
2010/03/13 Javascript
基于jquery的仿百度搜索框效果代码
2011/04/11 Javascript
JS TextArea字符串长度限制代码集合
2012/10/31 Javascript
A标签中通过href和onclick传递的this对象实现思路
2013/04/19 Javascript
js 使FORM表单的所有元素不可编辑的示例代码
2013/10/17 Javascript
IE 下Enter提交表单存在重复提交问题的解决方法
2014/05/04 Javascript
如何使用jquery easyui创建标签组件
2015/11/18 Javascript
JavaScript常用判断写法大全(推荐)
2016/05/30 Javascript
JQuery实现DIV其他动画效果的简单实例
2016/09/18 Javascript
jQuery实现别踩白块儿网页版小游戏
2017/01/18 Javascript
js正则表达式验证密码强度【推荐】
2017/03/03 Javascript
jQuery实现简单的抽奖游戏
2017/05/05 jQuery
vue created钩子函数与mounted钩子函数的用法区别
2020/11/05 Javascript
python操作xml文件详细介绍
2014/06/09 Python
Python使用剪切板的方法
2017/06/06 Python
利用pyinstaller打包exe文件的基本教程
2019/05/02 Python
浅谈python已知元素,获取元素索引(numpy,pandas)
2019/11/26 Python
Python实现手势识别
2020/10/21 Python
Python 使用xlwt模块将多行多列数据循环写入excel文档的操作
2020/11/10 Python
使用gunicorn部署django项目的问题
2020/12/30 Python
详解Python openpyxl库的基本应用
2021/02/26 Python
Fanatics英国官网:美国体育电商
2018/11/06 全球购物
新三好学生主要事迹
2014/01/23 职场文书
医药营销个人求职信范文
2014/02/07 职场文书
社区平安建设汇报材料
2014/08/14 职场文书
实名检举信范文
2015/03/02 职场文书
挂职锻炼工作总结2015
2015/05/28 职场文书
交通安全温馨提示语
2015/07/14 职场文书
运动会班级前导词
2015/07/20 职场文书
2016习总书记系列重要讲话心得体会
2016/01/15 职场文书
vite+vue3.0+ts+element-plus快速搭建项目的实现
2021/06/24 Vue.js