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 相关文章推荐
WordPress 插件——CoolCode使用方法与下载
Jul 02 Javascript
javascript iframe内的函数调用实现方法
Jul 19 Javascript
理解Javascript_10_对象模型
Oct 16 Javascript
基于jQuery的判断iPad、iPhone、Android是横屏还是竖屏的代码
May 11 Javascript
js获取字符串最后一位方法汇总
Nov 13 Javascript
JavaScript动态修改网页元素内容的方法
Mar 21 Javascript
使用CamanJS在Web页面上处理图像的技巧
Aug 18 Javascript
jQuery实现带水平滑杆的焦点图动画插件
Mar 08 Javascript
js canvas实现简单的图像扩散效果
Jun 28 Javascript
vue.extend与vue.component的区别和联系
Sep 19 Javascript
Element的el-tree控件后台数据结构的生成以及方法的抽取
Mar 05 Javascript
微信小程序实现分页加载效果
Nov 19 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 网页游戏开发入门教程一(webgame+design)
2009/10/26 PHP
Linux下安装PHP MSSQL扩展教程
2014/10/24 PHP
thinkphp使用literal防止模板标签被解析的方法
2014/11/22 PHP
详解PHP的Yii框架中组件行为的属性注入和方法注入
2016/03/18 PHP
PHP Mysqli 常用代码集合
2016/11/12 PHP
Laravel框架下的Contracts契约详解
2020/03/17 PHP
Javascript 继承机制的实现
2009/08/12 Javascript
JavaScript delete 属性的使用
2009/10/08 Javascript
javascript制作loading动画效果 loading效果
2014/01/14 Javascript
零基础搭建Node.js、Express、Ejs、Mongodb服务器及应用开发入门
2014/12/20 Javascript
JS实现让访问者自助选择网页文字颜色的方法
2015/02/24 Javascript
jQuery树形下拉菜单特效代码分享
2015/08/15 Javascript
多种js图片预加载实现方式分享
2016/02/19 Javascript
Javascript的表单验证长度
2016/03/16 Javascript
js 转json格式的字符串为对象或数组(前后台)的方法
2016/11/02 Javascript
angular学习之ngRoute路由机制
2017/04/12 Javascript
JavaScript中一些特殊的字符运算
2017/08/17 Javascript
如何抽象一个Vue公共组件
2017/10/17 Javascript
jQuery实现的上传图片本地预览效果简单示例
2018/03/29 jQuery
vue-cli与webpack处理静态资源的方法及webpack打包的坑
2018/05/15 Javascript
Vue插件从封装到发布的完整步骤记录
2019/02/28 Javascript
Vue登录主页动态背景短视频制作
2019/09/21 Javascript
vue实现下载文件流完整前后端代码
2020/11/17 Vue.js
使用Node.js和Socket.IO扩展Django的实时处理功能
2015/04/20 Python
对Python中9种生成新对象的方法总结
2018/05/23 Python
Pandas读取MySQL数据到DataFrame的方法
2018/07/25 Python
python正向最大匹配分词和逆向最大匹配分词的实例
2018/11/14 Python
Django中ORM找出内容不为空的数据实例
2020/05/20 Python
PyCharm MySQL可视化Database配置过程图解
2020/06/09 Python
Python中使用aiohttp模拟服务器出现错误问题及解决方法
2020/10/31 Python
表达自我的市场:Society6
2018/08/01 全球购物
英国家居装饰品、户外家具和玻璃器皿购物网站:Rinkit.com
2019/11/04 全球购物
机关干部四风问题自我剖析及整改措施
2014/10/26 职场文书
三年级上册科学教学计划
2015/01/21 职场文书
反腐倡廉学习心得体会范文
2015/08/15 职场文书
Apache Linkis 中间件架构及快速安装步骤
2022/03/16 Servers