美文网首页
vue模块私有组件中(scoped)设置全局样式

vue模块私有组件中(scoped)设置全局样式

作者: 励公子 | 来源:发表于2018-05-09 14:54 被阅读1232次

在项目开发过程中,我们经常会用到scoped来使样式文件只适用于当前模块,scoped设计的初衷就是让样式变得不可修改,可以很好的实现私有化

简单介绍一下scoped三条渲染规则
  • dom:html的dom节点会有唯一的data属性(例如下方的data-v-5558831a)
<div data-v-5558831a class="header">
    <div data-v-5558831a class="header-left"></div> 
    <div data-v-5558831a class="header-input">输入城市景点,游玩主题</div> 
    <div data-v-5558831a class="header-right">城市</div>
</div>
  • css:编译后的css选择器末尾会加一个当前组件的data属性来私有化样式
.header .header-left[data-v-5558831a] {
    width: 0.64rem;
    float: left;
}
  • 如果组件内部包含有其他组件,只会给其他组件的最外层标签加上当前组件的data属性
<div class="home">
    <home-header></home-header>
</div>
编译后:
<div data-v-0c57a6db class="home">
    <div data-v-5558831a data-v-0c57a6db class="header">
        <div data-v-5558831a class="header-left"></div> 
        <div data-v-5558831a class="header-input">输入城市景点,游玩主题</div> 
        <div data-v-5558831a class="header-right">城市</div>
    </div>
</div>
注:由此便可得知父组件scoped内样式无法修改子组件元素样式的原理了
样式穿透

适用范围:

  • 父组件添加scoped之后,解决在父组件中无法修改子组件样式问题
  • 对公共组件的样式实现微调
  • 对设置了scoped的子组件里的元素进行控制

方法:

  • 🌟在scoped样式中设置样式穿透,使之不受scoped的限制
<style lang="stylus" scoped>
  .wrapper >>> .swiper-pagination-bullet-active
      background: #fff !important
</style>
// 注:样式穿透是vue-loader的特性
// 当lang = less or sass 时 解析不了">>>"符号,则使用 /deep/
.a /deep/ .b {
  /*样式*/
}

相关文章

  • vue中的scoped底层怎么实现的,为何慎用

    scoped的作用: 在vue组件中,为了使样式私有化(模块化),不对全局造成污染,可以在 style 标签上添加...

  • vue模块私有组件中(scoped)设置全局样式

    在项目开发过程中,我们经常会用到scoped来使样式文件只适用于当前模块,scoped设计的初衷就是让样式变得不可...

  • style scoped

    在vue组件中,为了使样式私有化(模块化),不对全局造成污染,可以在style标签上添加scoped属性以表示它的...

  • deep selector深度作用选择器

    前言:Vue的组件中,可以在 标签上添加scoped属性,实现组件样式的私有化,不会对全局造成样式污染。 scop...

  • vue中scoped的原理

    vue组件中的scoped是很常用的属性,用于将组件的样式私有化,防止样式污染全局,那它又是如何实现的? 先来看一...

  • vue样式穿透

    前言 vue的style中设置scoped属性后,组件实现样式私有化。但是该组件又使用的其他组件库时(vant,e...

  • Vue中的scoped属性

    概述 在vue组件中,在style标签上添加scoped属性,以表示它的样式作用于当下的模块,很好的实现了样式私有...

  • vue 高级技巧

    1.css 局部样式 vue 中style样式添加scoped属性表示它的样式只作用于当前组件,样式私有化。 但是...

  • scoped私有作用域和deep selector深度作用选择器

    私有作用域 在标签上添加scoped属性,可以使样式只在当前组件生效,样式私有化,避免影响其他的组件,造成全局污染...

  • 深度选择器

    我们使用scoped实现组件的私有化,不对全局造成样式污染,表示当前style属性只属于当前模块.但我们难免会用到...

网友评论

      本文标题:vue模块私有组件中(scoped)设置全局样式

      本文链接:https://www.haomeiwen.com/subject/fhgnrftx.html