Vue3中使用:deep修改element-plus的样式无效怎么办?

前言:当我们用 vue3 :deep() 处理 elementui 中 el-dialog_body和el-dislog__header 的时候样式一直无法生效,遇到这种情况怎么办?

解决办法:

复制代码
1.直接在 dialog 上面增加class 我试过,也不起作用,最后用这种方法解决的,dialog 外面直接包一层 div
2.将样式单独写一个style标签进行覆盖---此方式由于样式写在外面,可能会影响整个项目的全局样式,--慎重考虑

需求:需要将el-drawer__header的底部的外边距去掉

方式一:

修改前:
修改后:

生效方式:1.在最外层加一层在el-dialog外面包一层

2.主要是vue3中deep会因为最外层没有根节点失效的问题,只需要加一个根节点,deep就有效了
需要注意的是 :deep(这里面只能包一个)

bash 复制代码
<template>
  <div class="dialog">
    <el-drawer v-model="drawerDialog" direction="rtl" @close="handleClose" size="50%">
      <template #header>
        <div class="header">
          <h4>订单详情----订单编号(23232434343)</h4>
        </div>
      </template>
      <template #default>
        <div class="content">
          <div class="item-info">
            <div class="wrap">
              <div class="top">
                <div class="left">
                  <div class="line"></div>
                  <div class="title">购方信息</div>
                </div>
                <div class="right">
                  <el-button type="primary" plain>编辑</el-button>
                </div>
              </div>
              <div class="info-list">

              </div>
            </div>
          </div>
        </div>
      </template>
      <template #footer>
        <div style="flex: auto">
          <el-button @click="handleClose">取消</el-button>
          <el-button type="primary" @click="confirm">确定</el-button>
        </div>
      </template>
    </el-drawer>
  </div>
</template>

<script setup>
import { watchEffect, ref } from 'vue';
const emit = defineEmits(["close"])
const props = defineProps({
  visible: {
    type: Boolean,
    default: false
  }
})
const drawerDialog = ref(false);


//确定的回调函数
const confirm = () => {

}

//取消的回调函数
const handleClose = () => {
  drawerDialog.value = false;
  emit('close');
}

watchEffect(() => {
  if (props.visible) {
    drawerDialog.value = props.visible;
  }
})


</script>


<style scoped lang="scss">
.dialog {
  :deep(.el-drawer__header) {
    margin: 0;
  }
}

.header {
  background-color: #fff;
  height: 40px;
}

.content {
  background-color: #EDEFEE;

  .item-info {
    .wrap {
      .top {
        display: flex;
        justify-content: space-between;

        .left {
          display: flex;
          align-items: center;

          .line {
            height: 15px;
            width: 4px;
            background-color: #07f;
          }

          .title {
            font-size: 16px;
            font-weight: bold;
          }
        }

        .right {}
      }

      .info-list {}
    }
  }
}
</style>

方式二:

bash 复制代码
<template> 
    <el-drawer v-model="drawerDialog" direction="rtl" @close="handleClose" size="50%">
      <template #header>
        <div class="header">
          <h4>订单详情----订单编号(23232434343)</h4>
        </div>
      </template>
      <template #default>
        <div class="content">
          <div class="item-info">
            <div class="wrap">
              <div class="top">
                <div class="left">
                  <div class="line"></div>
                  <div class="title">购方信息</div>
                </div>
                <div class="right">
                  <el-button type="primary" plain>编辑</el-button>
                </div>
              </div>
              <div class="info-list">

              </div>
            </div>
          </div>
        </div>
      </template>
      <template #footer>
        <div style="flex: auto">
          <el-button @click="handleClose">取消</el-button>
          <el-button type="primary" @click="confirm">确定</el-button>
        </div>
      </template>
    </el-drawer>
</template>

<script setup>
import { watchEffect, ref } from 'vue';
const emit = defineEmits(["close"])
const props = defineProps({
  visible: {
    type: Boolean,
    default: false
  }
})
const drawerDialog = ref(false);


//确定的回调函数
const confirm = () => {

}

//取消的回调函数
const handleClose = () => {
  drawerDialog.value = false;
  emit('close');
}

watchEffect(() => {
  if (props.visible) {
    drawerDialog.value = props.visible;
  }
})


</script>

<style>
.el-drawer__header {
    margin: 0;
}
</style>
<style scoped lang="scss">

.header {
  background-color: #fff;
  height: 40px;
}

.content {
  background-color: #EDEFEE;

  .item-info {
    .wrap {
      .top {
        display: flex;
        justify-content: space-between;

        .left {
          display: flex;
          align-items: center;

          .line {
            height: 15px;
            width: 4px;
            background-color: #07f;
          }

          .title {
            font-size: 16px;
            font-weight: bold;
          }
        }

        .right {}
      }

      .info-list {}
    }
  }
}
</style>

修改前:
修改后:

相关推荐
weixin_382395236 小时前
为小工厂量身打造:本地部署的物料管理系统带缺料计算
前端·制造
__zRainy__6 小时前
解决pnpm v10+不自动构建
前端·pnpm·工程化
猫猫不是喵喵.7 小时前
Vue3 Props 属性
前端·javascript·vue.js
醉城夜风~8 小时前
CSS元素显示模式(display)
前端·css
AI大模型-小华8 小时前
Codex 三方充值快速入门指南
java·前端·数据库·chatgpt·ai编程·codex·chatgpt pro
做前端的娜娜子11 小时前
同一链接实现 PC Web 与移动 H5 自适应
前端·掘金·金石计划
小帅不太帅11 小时前
架构没变、规模没变,DeepSeek V4 Flash 正式版凭什么暴涨 47 分?
前端·aigc·deepseek
jarvisuni11 小时前
DeepSeekFlash前端依旧拉垮,而且变慢了很多!
前端·javascript·算法
卷福同学12 小时前
AI编程出海第二步:验证关键词能否做站
前端·人工智能·后端