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 相关文章推荐
Javascript客户端将指定区域导出到Word、Excel的代码
Oct 22 Javascript
javascript 选择文件夹对话框(web)
Jul 07 Javascript
javascript十个最常用的自定义函数(中文版)
Sep 07 Javascript
20条学习javascript的编程规范的建议
Nov 28 Javascript
innerHTML在IE中报错解决方案
Dec 15 Javascript
jQuery实现的Div窗口震动效果实例
Aug 07 Javascript
js跨浏览器的事件侦听器和事件对象的使用方法
Dec 17 Javascript
使用JavaScript触发过渡效果的方法
Jan 19 Javascript
微信小程序动态添加分享数据
Jun 14 Javascript
babel的使用及安装配置教程
Feb 22 Javascript
解决在vue项目中webpack打包后字体不生效的问题
Sep 01 Javascript
简述ES6新增关键字let与var的区别
Aug 23 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 读取文件内容代码(txt,js等)
2009/12/06 PHP
php empty函数判断mysql表单是否为空
2010/04/12 PHP
PHP filter_var() 函数 Filter 函数
2012/04/25 PHP
ThinkPHP使用心得分享-ThinkPHP + Ajax 实现2级联动下拉菜单
2014/05/15 PHP
PHP实现获取第一个中文首字母并进行排序的方法
2017/05/09 PHP
jQuery使用ajaxSubmit()提交表单示例
2014/04/04 Javascript
JavaScript中扩展Array contains方法实例
2020/08/23 Javascript
js实现兼容性好的微软官网导航下拉菜单效果
2015/09/07 Javascript
使用postMesssage()实现iframe跨域页面间的信息传递
2016/03/29 Javascript
jQuery筛选数组之grep、each、inArray、map的用法及遍历json对象
2016/06/20 Javascript
基于Bootstrap分页的实例讲解(必看篇)
2017/07/04 Javascript
PM2自动部署代码步骤流程总结
2018/12/10 Javascript
Vue.js组件实现选项卡以及切换特效
2019/07/24 Javascript
小程序分享链接onShareAppMessage的具体用法
2020/05/22 Javascript
js实现双人五子棋小游戏
2020/05/28 Javascript
[01:10]DOTA2次级职业联赛 - U5战队宣传片
2014/12/01 DOTA
Python字符编码判断方法分析
2016/07/01 Python
Python 支付整合开发包的实现
2019/01/23 Python
Python实现计算对象的内存大小示例
2019/07/10 Python
Python中一个for循环循环多个变量的示例
2019/07/16 Python
Django 数据库同步操作技巧详解
2019/07/19 Python
python ffmpeg任意提取视频帧的方法
2020/02/21 Python
Python使用sqlite3模块内置数据库
2020/05/07 Python
完美解决ARIMA模型中plot_acf画不出图的问题
2020/06/04 Python
通过实例了解python__slots__使用方法
2020/09/14 Python
怎么解决pycharm license Acti的方法
2020/10/28 Python
乌克兰第一的珠宝网上商店:Gold.ua
2019/11/29 全球购物
影视艺术学院毕业生自荐信
2013/11/13 职场文书
实习单位接收函
2014/01/11 职场文书
草船借箭教学反思
2014/02/03 职场文书
小班秋游活动方案
2014/02/22 职场文书
勤奋学习演讲稿
2014/05/10 职场文书
教师四风问题整改措施
2014/09/25 职场文书
公司车辆维修管理制度
2015/08/05 职场文书
体育教师研修感悟
2015/11/18 职场文书
个人工作失误的保证书怎么写?
2019/06/21 职场文书