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 相关文章推荐
js 动态添加标签(新增一行,其实很简单,就是几个函数的应用)
Mar 26 Javascript
基于Jquery的仿照flash放大图片效果代码
Mar 16 Javascript
JS复制内容到剪切板的实例代码(兼容IE与火狐)
Nov 19 Javascript
js 获取时间间隔实现代码
May 12 Javascript
JavaScript实现找出数组中最长的连续数字序列
Sep 03 Javascript
png在IE6 下无法透明的解决方法汇总
May 21 Javascript
详解Vue 2.0封装axios笔记
Jun 22 Javascript
jQuery 实现图片的依次加载图片功能
Jul 06 jQuery
vue的安装及element组件的安装方法
Mar 09 Javascript
微信小程序HTTP请求从0到1封装
Sep 09 Javascript
小程序开发之模态框组件封装
Apr 23 Javascript
node.js +mongdb实现登录功能
Jun 18 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
重置版游戏视频
2020/04/09 魔兽争霸
PHP array_push 数组函数
2009/12/26 PHP
php+webSoket实现聊天室示例代码(附源码)
2017/02/17 PHP
php工具型代码之印章抠图
2018/07/18 PHP
PHP进阶学习之类的自动加载机制原理分析
2019/06/18 PHP
Yii 框架使用数据库(databases)的方法示例
2020/05/19 PHP
JS日历 推荐
2006/12/03 Javascript
js 调整select 位置的函数
2008/02/21 Javascript
Ext 表单布局实例代码
2009/04/30 Javascript
javascript 显示当前系统时间代码
2009/12/28 Javascript
再论Javascript下字符串连接的性能
2011/03/05 Javascript
js 链式延迟执行DOME
2012/01/04 Javascript
Extjs4.0设置Ext.data.Store传参的请求方式(默认为GET)
2013/04/02 Javascript
使用JavaScript实现ajax的实例代码
2016/05/11 Javascript
jQuery分页插件jquery.pagination.js使用方法解析
2017/02/09 Javascript
JS高仿抛物线加入购物车特效实现代码
2017/02/20 Javascript
ajax实现加载页面、删除、查看详细信息 bootstrap美化页面!
2017/03/14 Javascript
详解JavaScript调用栈、尾递归和手动优化
2017/06/03 Javascript
利用node.js如何创建子进程详解
2017/12/09 Javascript
浅析JS中回调函数及用法
2018/07/25 Javascript
js比较两个单独的数组或对象是否相等的实例代码
2019/04/28 Javascript
countUp.js实现数字动态变化效果
2019/10/17 Javascript
原生JS实现无缝轮播图片
2020/06/24 Javascript
[00:56]PWL开团时刻DAY8——追追追追追!
2020/11/09 DOTA
python字符串对其居中显示的方法
2015/07/11 Python
python获取文件路径、文件名、后缀名的实例
2018/04/23 Python
对python实时得到鼠标位置的示例讲解
2018/10/14 Python
OpenCV+Python识别车牌和字符分割的实现
2019/01/31 Python
python实践项目之监控当前联网状态详情
2019/05/23 Python
Beach Bunny Swimwear官网:设计师泳装和性感比基尼
2019/03/13 全球购物
物业电工岗位职责
2013/11/20 职场文书
销售行政专员岗位职责
2014/06/10 职场文书
学校安全生产月活动总结
2014/07/05 职场文书
铅球加油稿100字
2014/09/26 职场文书
服务承诺书
2015/01/19 职场文书
利用Nginx代理如何解决前端跨域问题详析
2021/04/02 Servers