el-button传入icon用法可能会出现的问题

el-button传入icon用法可能会出现的问题

在项目中,使用 el-buttonicon 属性渲染按钮图标时,大分辨率下显示正常,但切换到小分辨率后,图标尺寸异常。

异常原因

初次渲染时,el-button 通过 icon="el-icon-search" 挂载 <svg> 元素,尺寸和样式跟随父级字体大小(通常为 14px),显示正常。

切换到小分辨率后,父级容器(如 flex、grid 布局)被压缩,el-button 重新渲染,<svg> 元素被重新挂载,内部 font-size 计算为较小值(8.75px),SVG 的 width="1em" 随之缩放,导致渲染出 8.75x8.75 的图标。

尝试修复:使用 v-show 替代 v-if

为避免重新渲染,将显隐逻辑从 v-if 改为 v-show

vue 复制代码
<el-button v-show="showButton" icon="el-icon-search" />

优点在于元素始终在 DOM 中,不会重新挂载 <svg>,切换大屏小屏时避免了父级样式重新计算。

但首次进入小屏后,若父级布局未能正确计算 SVG 尺寸(依然为 8.75x8.75),即使切回大屏,图标也不会恢复原大小。因为 v-show 只是切换 display: none,浏览器在 display:none → display:block 时不会触发 SVG 重新渲染,图标尺寸异常被"固化"。

解决方案:使用插槽写法固定尺寸

ElementPlus 提供了 #icon 插槽,可以完全替代 icon="xxx" 的写法。直接使用 <el-icon> 并强制指定尺寸:

vue 复制代码
<el-button
  v-show="showButton"
  style="position: absolute; right: 34px; bottom: 38px"
  round
  type="primary"
>
  <template #icon>
    <el-icon :size="14">
      <Search />
    </el-icon>
  </template>
</el-button>
相关推荐
Nan_Shu_61413 小时前
学习:JavaScript(5)
开发语言·javascript·学习
533_13 小时前
[vue3] h函数,阻止事件冒泡
javascript·vue.js·elementui
蒲公英源码13 小时前
php+vue知识付费系统前后端全套源码
vue.js·php
通往曙光的路上13 小时前
day22_用户授权 头像上传
javascript·vue.js·ecmascript
小阳生煎13 小时前
Vue实现全局设置一个刷新按钮 只刷新当面路由页面 不跳转操作功能
vue.js·vue
小光学长13 小时前
基于Vue的儿童手工创意店管理系统as8celp7(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。
前端·数据库·vue.js
meichaoWen13 小时前
【Vue】Vue框架的基础知识强化
前端·javascript·vue.js
jingling55513 小时前
Flutter | 基础环境配置和创建flutter项目
前端·flutter
mapbar_front13 小时前
如何判断一个领导值不值得追随
前端
西西学代码13 小时前
Flutter---DragTarget(颜色拖拽选择器)
前端·javascript·flutter