# 始终为组件样式设置作用域
全局样式容易污染其他组件样式。在vue组件中一旦使用了全局的style,那么你必将陷入无限的梦魇,因为你根本不知道什么时候组件的样式就被全局样式污染了。因此,建议始终为组件样式设置作用域。
# CSS Scoped规范
CSS Scoped规范是Web组件产生不污染其他组件,也不被其他组件污染的CSS规范。
vue组件中的style设置scoped属性时,表明style里的css样式只适用于当前组件元素,不会对其他组件起作用:
<style scoped>
...
</style>
使用了scoped属性之后,父组件的style样式将不会渗透到子组件中。但有时候需要在父组件中修改子组件样式,或修改第三方组件库的样式,而又不想去除scoped属性造成组件之间的样式覆盖。这时可以使用深选择器 >>> 或 /dee/。
stylus预处理语言的样式穿透使用 >>> 选择器:
.wrapper >>> .el-button {
border-radius:0;
}
sass和less预处理语言的样式穿透使用 /deep/ 选择器:
.wrapper /deep/ .el-button {
border-radius:0;
}
# CSS Modules规范
CSS Modules是一个用于模块化和组合 CSS 的流行系统。vue-loader 提供了与 CSS 模块的一流集成,可以作为模拟 CSS 作用域的替代方案。
CSS Modules的使用方法如下:
<template>
<button :class="[$style.button, $style.buttonClose]">X</button>
</template>
<!-- 使用 CSS Modules -->
<style module>
.button {
border: none;
border-radius: 2px;
}
.buttonClose {
background-color: red;
}
</style>
更多关于vue使用CSS Modules请移步官方介绍