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的toggle实现网页加载完成自动弹窗
Mar 18 Javascript
JavaScript页面模板库handlebars的简单用法
Mar 02 Javascript
angular ngClick阻止冒泡使用默认行为的方法
Nov 03 Javascript
jQuery中 $ 符号的冲突问题及解决方案
Nov 04 Javascript
bootstrap modal弹出框的垂直居中
Dec 14 Javascript
详解vue2.0的Element UI的表格table列时间戳格式化
Jun 13 Javascript
微信小程序图片自适应支持多图实例详解
Jun 21 Javascript
微信小程序实现点击按钮修改view标签背景颜色功能示例【附demo源码下载】
Dec 06 Javascript
原生JS实现获取及修改CSS样式的方法
Sep 04 Javascript
JavaScript创建对象方式总结【工厂模式、构造函数模式、原型模式等】
Dec 19 Javascript
vue动态子组件的两种实现方式
Sep 01 Javascript
实用的 vue tags 创建缓存导航的过程实现
Dec 03 Vue.js
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正则走开
2008/03/15 PHP
PHP define函数的使用说明
2008/08/27 PHP
Symfony的安装和配置方法
2016/03/17 PHP
PHPExcel简单读取excel文件示例
2016/05/26 PHP
ExtJS 工具栏 分页事件参数
2010/03/05 Javascript
基于jQuery UI CSS Framework开发Widget的经验
2010/08/21 Javascript
原生JS实现表单checkbook获取已选择的值
2013/07/21 Javascript
jquery实现兼容浏览器的图片上传本地预览功能
2013/10/14 Javascript
js使用html()或text()方法获取设置p标签的显示的值
2014/08/01 Javascript
用javascript关闭本窗口技巧小结
2014/09/05 Javascript
JS+CSS模拟可以无刷新显示内容的留言板实例
2015/03/03 Javascript
详解JavaScript中getFullYear()方法的使用
2015/06/10 Javascript
js随机生成字母数字组合的字符串 随机动画数字
2015/09/02 Javascript
有关jQuery中parent()和siblings()的小问题
2016/06/01 Javascript
JS简单实现tab切换效果的多窗口显示功能
2016/09/07 Javascript
使用 jQuery.ajax 上传带文件的表单遇到的问题
2016/10/31 Javascript
JavaScript中的编码和解码函数
2017/02/15 Javascript
vue对storejs获取的数据进行处理时遇到的几种问题小结
2018/03/20 Javascript
详解小程序不同页面之间通讯的解决方案
2018/11/23 Javascript
JavaScript中的&quot;=、==、===&quot;区别讲解
2019/01/22 Javascript
JavaScript中关于base64的一些事
2019/05/06 Javascript
vue监听用户输入和点击功能
2019/09/27 Javascript
JS实现移动端双指缩放和旋转方法
2019/12/13 Javascript
[51:53]完美世界DOTA2联赛循环赛 LBZS vs DM BO2第二场 11.01
2020/11/02 DOTA
python实现一次创建多级目录的方法
2015/05/15 Python
python爬虫系列Selenium定向爬取虎扑篮球图片详解
2017/11/15 Python
HTML5学习心得总结(推荐)
2016/07/08 HTML / CSS
澳大利亚拥有最佳跳伞降落点和最好服务的跳伞项目运营商:Skydive Australia
2018/03/05 全球购物
优秀的自荐信要注意哪些
2014/01/03 职场文书
党的群众路线教育实践活动总结大会主持词
2014/10/30 职场文书
2015年安康杯竞赛活动总结
2015/03/26 职场文书
在校学生证明格式
2015/06/24 职场文书
关于运动会的广播稿
2015/08/19 职场文书
React Hook用法示例详解(6个常见hook)
2021/04/28 Javascript
python 经纬度求两点距离、三点面积操作
2021/06/03 Python
vue实现登陆页面开发实践
2022/05/30 Vue.js