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 相关文章推荐
javascript(jquery)利用函数修改全局变量的代码
Nov 02 Javascript
JavaScript聚焦于第一个字段的代码
Oct 15 Javascript
JavaScript函数详解
Nov 17 Javascript
jQuery File Upload文件上传插件使用详解
Dec 06 Javascript
原生JS实现瀑布流插件
Feb 06 Javascript
如何在wxml中直接写js代码(wxs)
Nov 14 Javascript
前端深入理解Typescript泛型概念
Mar 09 Javascript
Vue项目vscode 安装eslint插件的方法(代码自动修复)
Apr 15 Javascript
vue.js+element 默认提示中英文操作
Nov 11 Javascript
详解Vue的七种传值方式
Feb 08 Vue.js
Vue中插槽slot的使用方法与应用场景详析
Jun 08 Vue.js
ant design charts 获取后端接口数据展示
May 25 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之sprintf函数用法详解
2014/11/12 PHP
PHP框架Laravel学习心得体会
2015/10/28 PHP
PHP迭代与递归实现无限级分类
2017/08/28 PHP
PHP接口类(interface)的定义、特点和应用示例
2020/05/18 PHP
采用CSS和JS,刚好我最近有个站点要用到下拉菜单!
2006/06/26 Javascript
textarea中的手动换行处理的jquery代码
2011/02/26 Javascript
Javascript图像处理—平滑处理实现原理
2012/12/28 Javascript
jQuery 鼠标经过(hover)事件的延时处理示例
2014/04/14 Javascript
ztree获取当前选中节点子节点id集合的方法
2015/02/12 Javascript
jQuery中next方法用法实例
2015/04/24 Javascript
JavaScript实现的简单拖拽效果
2015/06/01 Javascript
灵活的理解JavaScript中的this指向
2016/02/25 Javascript
JavaScript 基础表单验证示例(纯Js实现)
2017/07/20 Javascript
vue实现留言板todolist功能
2017/08/16 Javascript
vue.js移动端app之上拉加载以及下拉刷新实战
2017/09/11 Javascript
解决JavaScript layui 下拉框不显示的问题
2018/08/14 Javascript
js实现移动端tab切换时下划线滑动效果
2019/09/08 Javascript
python实现代码行数统计示例分享
2014/02/10 Python
python的re模块应用实例
2014/09/26 Python
详细解读tornado协程(coroutine)原理
2018/01/15 Python
详谈python在windows中的文件路径问题
2018/04/28 Python
python3+requests接口自动化session操作方法
2018/10/13 Python
使用Python批量修改文件名的代码实例
2019/01/24 Python
python 实现GUI(图形用户界面)编程详解
2019/07/17 Python
Python对接六大主流数据库(只需三步)
2019/07/31 Python
python多线程实现TCP服务端
2019/09/03 Python
python计算无向图节点度的实例代码
2019/11/22 Python
pytorch的梯度计算以及backward方法详解
2020/01/10 Python
pytorch 彩色图像转灰度图像实例
2020/01/13 Python
澳大利亚领先的运动鞋商店:Hype DC
2018/03/31 全球购物
芝加哥牛排公司:Chicago Steak Company
2018/10/31 全球购物
施华洛世奇巴西官网:SWAROVSKI巴西
2019/12/03 全球购物
企业总经理任命书
2014/06/05 职场文书
环境保护与污染治理求职信
2014/07/16 职场文书
区域销售经理岗位职责
2015/04/02 职场文书
2015年大学辅导员工作总结
2015/05/12 职场文书