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 相关文章推荐
基于Jquery的回车成tab焦点切换效果代码(Enter To Tab )
Nov 14 Javascript
js 浏览器事件介绍
Mar 30 Javascript
一个奇葩的最短的 IE 版本判断JS脚本
May 28 Javascript
Node.js中使用mongoskin操作mongoDB实例
Sep 28 Javascript
javascript多物体运动实现方法分析
Jan 08 Javascript
纯前端JavaScript实现Excel IO案例分享
Aug 26 Javascript
Vue.js每天必学之Class与样式绑定
Sep 05 Javascript
Javascript 创建类并动态添加属性及方法的简单实现
Oct 20 Javascript
JavaScript基于自定义函数判断变量类型的实现方法
Nov 23 Javascript
关于jQuery中fade(),show()起始位置的一点小发现
Apr 25 jQuery
利用JS如何获取form表单数据
Dec 19 Javascript
详解Nuxt内导航栏的两种实现方式
Apr 16 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中使用DOM类读取XML文件的实现代码
2011/12/14 PHP
最常用的8款PHP调试工具
2014/07/06 PHP
PHP实现基于文本的摩斯电码生成器
2016/01/11 PHP
基于jQuery的前端数据通用验证库
2011/08/08 Javascript
js jquery验证银行卡号信息正则学习
2013/01/21 Javascript
Jquery实现带动画效果的经典二级导航菜单
2013/03/22 Javascript
使用js检测浏览器是否支持html5中的video标签的方法
2014/03/12 Javascript
javascript中判断json的方法总结
2015/08/27 Javascript
AngularJS中实现显示或隐藏动画效果的方式总结
2015/12/31 Javascript
AngularJS基础 ng-cloak 指令简单示例
2016/08/01 Javascript
AngularJS 整理一些优化的小技巧
2016/08/18 Javascript
前端js弹出框组件使用方法
2020/08/24 Javascript
Javascript 详解封装from表单数据为json串进行ajax提交
2017/03/29 Javascript
React Native 通告消息竖向轮播组件的封装
2020/08/25 Javascript
vue移动端项目缓存问题实践记录
2018/10/29 Javascript
Vue+Webpack完美整合富文本编辑器TinyMce的方法
2018/11/30 Javascript
微信小程序自定义弹窗实现详解(可通用)
2019/07/04 Javascript
JS实现斐波那契数列的五种方式(小结)
2020/09/09 Javascript
vue中实现弹出层动画效果的示例代码
2020/09/25 Javascript
[39:46]完美世界DOTA2联赛PWL S2 LBZS vs Rebirth 第二场 11.25
2020/11/25 DOTA
Python天气预报采集器实现代码(网页爬虫)
2012/10/07 Python
Python程序设计入门(2)变量类型简介
2014/06/16 Python
跟老齐学Python之做一个小游戏
2014/09/28 Python
Python使用装饰器进行django开发实例代码
2018/02/06 Python
python实现将一个数组逆序输出的方法
2018/06/25 Python
对PyQt5中的菜单栏和工具栏实例详解
2019/06/20 Python
对Python3中列表乘以某一个数的示例详解
2019/07/20 Python
python垃圾回收机制(GC)原理解析
2019/12/30 Python
python 动态渲染 mysql 配置文件的示例
2020/11/20 Python
新英格兰最大的特色礼品连锁店:The Paper Store
2018/07/23 全球购物
护理专科毕业生自荐书范文
2014/02/19 职场文书
读书活动实施方案
2014/03/10 职场文书
优秀实习生主要事迹
2014/05/29 职场文书
2014年国庆节演讲稿
2014/09/02 职场文书
电台广播稿范文
2015/08/19 职场文书
Python基本数据类型之字符串str
2021/07/21 Python