/deep/的使用与导致样式失效问题处理

1、背景

【1】当 style 标签有 scoped属性时,它的 CSS 只作用于当前组件中的元素,使用 scoped 后,父组件的样式将不会渗透到子组件中。不过一个子组件的根节点会同时受其父组件的 scoped CSS 和子组件的 scoped CSS 的影响。这样设计是为了让父组件可以从布局的角度出发,调整其子组件根元素的样式.。
【2】样式失效:最近项目用户在使用过程中发现有些样式失效了,经过排查发现是跟最近谷歌升级到89.几的版本有关

2、深度选择器

如果你希望 scoped 样式中的一个选择器能够作用得“更深”,例如影响子组件,你可以使用 >>> 操作符,但是有些像 Sass 之类的预处理器无法正确解析 >>>。这种情况下你可以使用 /deep/::v-deep操作符取而代之——两者都是 >>> 的别名,同样可以正常工作。

<style scoped>
	.a >>> .b { /* ... */ }
</style>
或
<style scoped>
	.a /deep/ .b { /* ... */ }
</style>
或
<style scoped>
	.a ::v-deep .b { /* ... */ }
</style>

上述代码会被编译成:

.a[data-v-f3f3eg9] .b { /* ... */ }

3、关于/deep/导致浏览器样式失效问题

谷歌浏览器升级到89版本后,/deep/嵌套使用,会导致样式失效

// 局部嵌套使用(scoped),会导致.c的样式失效
<style lang="scss" scoped>
	.a /deep/ .b {
	  ......
	  /deep/ .c {
	    ....
	  }
	}
</style>
// 全局使用(无scoped),会导致.b的样式失效
<style lang="scss">
	.a /deep/ .b {
	  ......
	}
</style>

示例如下:

style lang="scss" scoped>
@import '../../../../styles/order/edit.scss';
/deep/ .el-collapse {
  /deep/ .el-collapse-item {
    width: 100%;
    position: relative;

    /deep/ .el-collapse-item__content {
      padding-bottom: 0px;
      background-color: #f2f2f2;
    }

    /deep/ .el-collapse-item__header {
      font-size: 14px;
      color: #ffffff;
      background-color: #2f5597;
      height: 32px;

      /deep/ .header-icon {
        margin: 3px 0px 0px 3px;
      }
    }
  }
}
</style>

谷歌88版本效果如下:
在这里插入图片描述
谷歌89后版本效果如下:
在这里插入图片描述
将样式代码改为如下后,89版本即能正确显示:

<style lang="scss" scoped>
@import '../../../../styles/order/edit.scss';
/deep/.el-collapse {
  .el-collapse-item {
    width: 100%;
    position: relative;

    .el-collapse-item__content {
      padding-bottom: 0px;
      background-color: #f2f2f2;
    }

    .el-collapse-item__header {
      font-size: 14px;
      color: #ffffff;
      background-color: #2f5597;
      height: 32px;

      .header-icon {
        margin: 3px 0px 0px 3px;
      }
    }
  }
}
</style>
  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值