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 相关文章推荐
一段实时更新的时间代码
Jul 07 Javascript
javascript实现二分查找法实现代码
Nov 12 Javascript
ExtJs3.0中Store添加 baseParams 的Bug
Mar 10 Javascript
JavaScript中使用ActiveXObject操作本地文件夹的方法
Mar 28 Javascript
AngularJS + Node.js + MongoDB开发的基于高德地图位置的通讯录
Jan 02 Javascript
深入理解(function(){... })();
Aug 16 Javascript
利用jquery实现下拉框的禁用与启用
Dec 07 Javascript
JavaScript基于扩展String实现替换字符串中index处字符的方法
Jun 13 Javascript
使用jquery的jsonp如何发起跨域请求及其原理详解
Aug 17 jQuery
JavaScript 通过Ajax 动态加载CheckBox复选框
Aug 31 Javascript
react实现一个优雅的图片占位模块组件详解
Oct 30 Javascript
jQuery选择器之基本选择器用法实例分析
Feb 19 jQuery
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函数spl_autoload_register()用法和__autoload()介绍
2012/02/04 PHP
从零开始学YII2框架(四)扩展插件yii2-kartikgii
2014/08/20 PHP
详解PHP对象的串行化与反串行化
2016/01/24 PHP
laravel实现批量更新多条记录的方法示例
2017/10/22 PHP
FireFox中textNode分片的问题
2007/04/10 Javascript
jquery实现瀑布流效果分享
2014/03/26 Javascript
使用jQuery.wechat构建微信WEB应用
2014/10/09 Javascript
javascript批量修改文件编码格式的方法
2015/01/27 Javascript
JS+CSS实现淡入式焦点图片幻灯切换效果的方法
2015/02/26 Javascript
AngularJS模块管理问题的非常规处理方法
2015/04/29 Javascript
javascript基本算法汇总
2016/03/09 Javascript
jQuery Easyui datagrid/treegrid 清空数据
2016/07/09 Javascript
前端面试题及答案整理(二)
2016/08/26 Javascript
JavaScript常用代码书写规范的超全面总结
2016/09/11 Javascript
js 判断登录界面的账号密码是否为空
2017/02/08 Javascript
js实现短信发送倒计时功能(正则验证)
2017/02/10 Javascript
js读取json文件片段中的数据实例
2017/03/09 Javascript
vue.js数据绑定的方法(单向、双向和一次性绑定)
2017/07/13 Javascript
12条写出高质量JS代码的方法
2018/01/07 Javascript
js限制input只能输入有效的数字(第一个不能是小数点)
2018/09/28 Javascript
手淘flexible.js框架使用和源代码讲解小结
2018/10/15 Javascript
js 实现碰撞检测的示例
2020/10/28 Javascript
[01:20]DOTA2更新全新英雄 天涯墨客现已加入游戏
2018/08/25 DOTA
python+pyqt实现12306图片验证效果
2017/10/25 Python
Python if语句知识点用法总结
2018/06/10 Python
python tkinter canvas使用实例
2019/11/04 Python
使用Python的datetime库处理时间(RPA流程)
2019/11/24 Python
Django 再谈一谈json序列化
2020/03/16 Python
Python-split()函数实例用法讲解
2020/12/18 Python
意大利独特而优质的家居用品:Fazzini
2018/12/05 全球购物
The North Face北面法国官网:美国著名户外品牌
2019/11/01 全球购物
乡镇三项教育实施方案
2014/03/30 职场文书
泸县召开党的群众路线教育实践活动总结大会新闻稿
2014/10/21 职场文书
2019暑期安全倡议书!
2019/06/27 职场文书
MySql 8.0及对应驱动包匹配的注意点说明
2021/06/23 MySQL
python数字图像处理之图像自动阈值分割示例
2022/06/28 Python