记一次VUE中使用Element-UI样式失效问题

记一次VUE中使用Element-UI样式失效问题

做练习时发现自己从element-ui上复制下来的样式没有生效,代码如下。

  <el-form-item label="图片">
    <el-upload
      ref="picUpload"
      class="avatar-uploader"
      accept=".png,.jpg"
      action=""
      :show-file-list="false"
      :on-remove="removePic"
      :on-change="choosePic"
      :limit="1"
      :auto-upload="false"
    >
      <img v-if="picFileInfo" :src="picFileInfo.url" class="avatar" />
      <img v-else-if="form.image" :src="form.image" class="avatar" />
      <i v-else class="el-icon-plus avatar-uploader-icon"></i>
      <div slot="tip" class="el-upload__tip" style="color:red">
        只能上传png/jpg文件
      </div>
    </el-upload>
  </el-form-item>


<style scoped lang="scss">
.avatar-uploader .el-upload {
  border: 1px dashed #d9d9d9;
  border-radius: 6px;
  cursor: pointer;
  position: relative;
  overflow: hidden;
}
.avatar-uploader .el-upload:hover {
  border-color: #409eff;
}
.avatar-uploader-icon {
  font-size: 28px;
  color: #8c939d;
  width: 100px;
  height: 100px;
  line-height: 100px;
  text-align: center;
}
.avatar {
  width: 100px;
  height: 100px;
  display: block;
}
</style>

效果对比如下:

在这里插入图片描述

​ 经过网上查询资料发现是因为在<style>标签中加入了scoped属性,scoped 属性仅对单文件组件(.vue 文件)有效,对于全局的样式(如引入的第三方库的样式),不会受到 scoped 属性的影响。这是因为 Element UI 组件的样式是通过类似于 /deep/ 或者 ::v-deep(Vue 2.x)的选择器来实现的样式穿透,而不是依赖于 CSS 的作用域限定。

​ 在 Vue 2.x 版本中,如果给 <style> 标签添加 scoped 属性,会导致 Element UI 组件中的样式选择器无法穿透到组件内部,从而无法正常应用样式。因此,使用 scoped 属性可能会导致 Element UI 组件的样式失效。

​ 根据上述解决方案进行代码修改

<style lang="scss">
.avatar-uploader .el-upload {
  border: 1px dashed #d9d9d9;
  border-radius: 6px;
  cursor: pointer;
  position: relative;
  overflow: hidden;
}
.avatar-uploader .el-upload:hover {
  border-color: #409eff;
}
.avatar-uploader-icon {
  font-size: 28px;
  color: #8c939d;
  width: 100px;
  height: 100px;
  line-height: 100px;
  text-align: center;
}
.avatar {
  width: 100px;
  height: 100px;
  display: block;
}

结果展示:
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
回答: 根据引用[1]的描述,element-ui tooltip在表格换页时失效的原因是v-if被加在了i标签上,导致dom未渲染,从而使得移入移出事件失效。解决这个问题的方法是将v-if加在el-tooltip标签上,而不是i标签上。具体的代码示例如下: ``` <el-tooltip class="item" effect="dark" placement="bottom" v-if="!( (scope.row.stockPrice === 0 && scope.row.exchangeRate === 0) || scope.row.ltiResultId < 1 || scope.row.ltiKindId === 34 )"> <div slot="content" style="lineHeight:20px;textAlign:center"> <span v-at>折算股价</span> : HKD {{ scope.row.stockPrice }} <span v-at>港币汇率</span> HKD : HKD 1: RMB {{ scope.row.exchangeRate }} </div> <i class="el-icon-question"></i> </el-tooltip> ``` 引用[2]提到的另一个失效问题是在element-ui想要修改特定组件的样式,但不想在全局样式修改。在这种情况下,可以给el-date-picker组件的popper-class属性添加一个class名称,例如test,然后通过.test来修改样式。具体的代码示例如下: ``` <el-date-picker popper-class="test"></el-date-picker> <style scoped> .test { /* 在这里修改样式 */ } </style> ``` 最后,引用[3]提到的element-ui失效问题可能是由于babel配置的问题。可以尝试将label.config.js文件的代码修改为以下内容: ``` module.exports = { presets: [ '@vue/cli-plugin-babel/preset', ["es2015", { "modules": false }] ], plugins: [ [ "component", { "libraryName": "element-ui", "styleLibraryName": "theme-chalk" } ] ] } ``` 这样可能解决element-ui失效问题
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值