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>
相关推荐
南京兴帝文化传媒有限公司6 分钟前
地图SEO与AI搜索优化结合实践:宁国摄影工作室本地获客案例分析
大数据·前端·人工智能·geo 优化·geo优化避坑
用户9210802628612 分钟前
前端 Vue 专栏 07:模板编译、虚拟 DOM、Diff 与 key
前端
八荒启_交互动画15 分钟前
Web特效03——像素VS顶点:图形处理的的两种基本单位
javascript
光影少年16 分钟前
react navite process.nextTick 和 Promise.then 的执行顺序
前端·react native·react.js
雪芽蓝域zzs17 分钟前
第四十二节:全局字典封装(后端字典,下拉选择复用)
开发语言·前端·javascript
用户645965987108819 分钟前
Nginx + Vue Router 基础:SPA History 部署、反向代理与请求分流
前端
样子201820 分钟前
Js 之根据白名单过滤 HTML(防止 XSS 攻击)
android·前端·javascript·html·xss
lewis_lk22 分钟前
ReactJs状态迷思:从"常量"到"闭包陷阱"的底层逻辑
前端·react.js
尘世中一位迷途小书童23 分钟前
在 Cesium 上画全球网格:我们怎么把 GeoSOT 接到瓦片调度上
前端·javascript·前端框架
aixingpan29 分钟前
aixingpan.cn API开发文档:api_docs_trichart_natal_progression_ter_transit2接口指南
前端·php