在Vue文件中的style标签上有一个特殊的属性,scoped。当一个style标签拥有scoped属性时候,它的css样式只能用于当前的Vue组件,能够使组件的样式不相互污染。若是一个项目的全部style标签都加上了scoped属性,至关于实现了样式的模块化。
Vue中的scoped属性的效果主要是经过PostCss实现的。如下是转译前的代码:css
<style scoped lang="less"> .example{ color:red; } </style> <template> <div class="example">scoped测试案例</div> </template>
转译后:vue
.example[data-v-5558831a] { color: red; } <template> <div class="example" data-v-5558831a>scoped测试案例</div> </template>
既:PostCSS给一个组件中的全部dom添加了一个独一无二的动态属性,给css选择器额外添加一个对应的属性选择器,来选择组件中的dom,这种作法使得样式只做用于含有该属性的dom元素(组件内部的dom)。sass
总结:scoped的渲染规则:
scoped看起来很好用,当时在Vue项目中,当咱们引入第三方组件库时(如使用vue-awesome-swiper实现移动端轮播),须要在局部组件中修改第三方组件库的样式,而又不想去除scoped属性形成组件之间的样式覆盖。这时咱们能够经过特殊的方式穿透scoped。app
stylus的样式穿透 使用>>>
外层 >>> 第三方组件 样式 .wrapper >>> .swiper-pagination-bullet-active background: #fff
sass和less的样式穿透 使用/deep/
外层 /deep/ 第三方组件 { 样式 } .wrapper /deep/ .swiper-pagination-bullet-active{ background: #fff; }
上面咱们介绍了在使用scoped 属性时,经过scopd穿透的方式修改引入第三方组件库样式的方法,下面咱们介绍其它方式来修改引入第三方组件库的样式less
在vue组件中不使用scoped属性
在vue组建中使用两个style标签,一个加上scoped属性,一个不加scoped属性,把须要覆盖的css样式写在不加scoped属性的style标签里
创建一个reset.css(基础全局样式)文件,里面写覆盖的css样式,在入口文件main.js 中引入