Vue3+ElementPlus 中 el-image 预览大图属性 previewSrcList 和 translateY(-5px) 的冲突
约 436 字大约 1 分钟
2025-08-01
【前言】
Vue3 使用 ElementPlus,Vue2 使用 Element-ui。
【问题描述】
在 Vue3+ElementPlus 中,使用 el-image 和预览大图功能,点击 el-image 后预览的图片局限在原有图片(小图)内,遮罩也没有充满屏幕。
使用 transform: translateY(-5px); 的原因是本来外面有一层 div,想用 hover 时增加阴影和位移表示选中了当前 div。
但是在 vue3 中出现预览的图片和小图尺寸一样、鼠标移动时图片频繁闪动。
错误效果

精简代码后发现是 ElementPlus el-image 的 previewSrcList 属性和 translateY 冲突( translateX 等也冲突)。
如果没有外层 div、只有 el-image,但是 el-image 上增加 transform: translateY(-5px); 鼠标移动时图片不会闪烁,但是预览仍是小图不是大图。
精简代码后错误效果如下:

vue2 中 element-ui 则无此错误。 vue2 中正确效果如下:

vue3 代码如下
<template>
<div>
<el-image
class="img"
style="width: 200px;height: 200px;"
:src="url"
:preview-src-list="srcList"
/>
</div>
</template>
<script setup>
import { ref } from "vue";
const url = ref(
"https://fuss10.elemecdn.com/a/3f/3302e58f9a181d2509f3dc0fa68b0jpeg.jpeg"
);
const srcList = ref([
"https://fuss10.elemecdn.com/1/34/19aa98b1fcb2781c4fba33d850549jpeg.jpeg",
"https://fuss10.elemecdn.com/0/6f/e35ff375812e6b0020b6b4e8f9583jpeg.jpeg",
]);
</script>
<style scoped>
.img {
transform: translateY(-5px);
}
</style>vue2 代码如下
<template>
<div>
<el-image
class="img"
style="width: 200px;height: 200px;"
:src="url"
:preview-src-list="srcList"
/>
</div>
</template>
<script>
export default {
data() {
return {
url: "https://fuss10.elemecdn.com/a/3f/3302e58f9a181d2509f3dc0fa68b0jpeg.jpeg",
srcList: [
"https://fuss10.elemecdn.com/1/34/19aa98b1fcb2781c4fba33d850549jpeg.jpeg",
"https://fuss10.elemecdn.com/0/6f/e35ff375812e6b0020b6b4e8f9583jpeg.jpeg",
],
};
},
};
</script>
<style scoped>
.img {
transform: translateY(-5px);
}
</style>图片频闪的 css 代码(别的部分都一样):
.img:hover {
border: 5px solid red;
transform: translateY(-5px);
}【解决办法】
放弃 translateY ,或者降级使用 vue2+element-ui,或者使用其她方法,如鼠标的移入移出方法,然后修改样式或者放大图片。
