【经验总结】van-popover组件样式穿透不生效?

2,585 阅读2分钟

一、样式穿透不生效?


最近在开发vue3+vant3的H5页面项目时,遇到一个小问题,在此简单记录一下

van-popover组件使用样式穿透不生效?

8B8F77A6-B988-41fb-A7BE-1AE0091C47A7.png

代码如下

<van-popover
    v-model:show="showPopover"
    :actions="actions"
    theme="dark"
    placement="bottom-end"
    class="popover-wrap"
    @select="onSelect"
    >
</van-popover>

因为项目使用了scss,样式穿透代码如下:

  :deep(.van-popover__content) {
    background: red;
  }

背景色没变,那换一种样式穿透写法

  ::v-deep .van-popover__content {
    background: red;
  }

背景色没变依然没变,所以应该不是样式穿透的问题

二、尝试解决


再次翻看了一下vant3的官网,发现可以修改它定义的CSS变量

<style lang="scss">
:root {
  --van-popover-dark-background-color: #2a3148;
  --van-padding-md: 0;
  --van-popover-action-width: 93px;
  --van-popover-dark-text-color: #959db7;
  --van-gray-7: #1a1f30;
}
</style>

开发环境起作用了,以为万事大吉

三、再次遇到问题


上到测试环境后,UI说,有个气泡框没按UI要求去做?

我想怎么会呢?眼见为实,还真是样式穿透前的样子

打包以后样式穿透失效了,看来这个方法不行

四、再次尝试解决


审视一下气泡的页面元素,发现气泡框和页面挂载id为app的div在同一个层级

Snipaste_2024-06-07_17-00-12.png

尝试修改全局样式,为了避免样式污染整个项目,

在van-popover包一层class="popover-wrap"

使用子元素选择器,在去修改样式

<style lang="scss">
.popover-wrap > .van-popover__content {
  background: #2a3148 !important;

  .van-popover__action {
    padding: 0;
    width: 93px;
    color: #959db7;
  }

  .van-popover__action-text:after {
    border-color: #1a1f30;
  }
}

.popover-wrap > .van-popover__arrow {
  color: #2a3148 !important;
}
</style>

D7621860-E33A-4e29-B429-FF06EC11E827.png

经验证开发环境和打包以后的测试环境都没问题