当前位置: 首页 > news >正文

el-input 输入框宽度自适应宽度

利用一个隐藏的 <span>(称为 mirror)渲染当前输入内容:

  1. span 使用与 <el-input> 相同的字体样式;

  2. 每次输入时,根据 span.offsetWidth 动态计算内容宽度;

  3. 将该宽度赋给 <el-input>style.width

  4. 给输入框增加少许 padding 余量,保证视觉舒适。

<template><el-form :model="form" label-width="auto" class="auto-form"><el-form-item label="Activity name"><div class="input-auto-wrapper"><!-- 隐藏的 span,用于计算文字宽度 --><span ref="mirror" class="mirror">{{ form.name || placeholder }}</span><!-- 自适应宽度的 el-input --><el-inputv-model="form.name":style="{ width: inputWidth + 'px' }":placeholder="placeholder"class="auto-el-input"@input="updateWidth"/></div></el-form-item><el-form-item><el-button type="primary" @click="onSubmit">Create</el-button><el-button @click="onCancel">Cancel</el-button></el-form-item></el-form>
</template><script lang="ts" setup>
import { ref, reactive, onMounted, nextTick } from 'vue'// 表单数据
const form = reactive({name: ''
})// 占位文字(用于在空值时计算最小宽度)
const placeholder = '请输入活动名称'// 输入框宽度(默认最小 100px)
const inputWidth = ref(100)
const mirror = ref<HTMLElement | null>(null)// 动态更新输入框宽度
const updateWidth = () => {if (mirror.value) {// 同步文字mirror.value.textContent = form.name || placeholder// 计算宽度 + 内边距inputWidth.value = mirror.value.offsetWidth + 24}
}onMounted(async () => {await nextTick()updateWidth()
})const onSubmit = () => {console.log('提交数据:', form)
}const onCancel = () => {form.name = ''updateWidth()
}
</script><style scoped>
.auto-form {max-width: 500px;margin: 40px auto;
}.input-auto-wrapper {display: inline-block;position: relative;
}.mirror {position: absolute;visibility: hidden;white-space: pre;font: inherit; /* 与 el-input 保持一致 */padding: 0 12px;
}.auto-el-input {transition: width 0.2s ease;
}
</style>

限制最大宽度

inputWidth.value = Math.min(mirror.value.offsetWidth + 24, 400)

此方案无需修改 Element Plus 源码,通过一个简单的隐藏 span 即可实现原生级别的动态自适应宽度输入框效果

http://www.dtcms.com/a/490159.html

相关文章:

  • [嵌入式系统-126]:CUDA运行在CPU上,还是运行在GPU之上?
  • 启动模板创建AWS EC2 Auto Scaling指南
  • 【LeetCode_160】相交链表
  • HUAWEI A800I A2 aarch64架构服务器鲲鹏920开启虚拟化功能
  • Java-151 深入浅出 MongoDB 索引详解 性能优化:慢查询分析 索引调优 快速定位并解决慢查询
  • 微信小程序快速入门【02】
  • YOLO-V1 与 YOLO-V2 技术详解:从经典到优化的目标检测演进
  • 天津市网站制作公司百度seo点击器
  • 建设部网站燃气管理部门网络软件开发
  • 三种思路彻底掌握 BST 判断(递归与迭代全解析)——力扣98.验证二叉搜索树
  • 基于k8s环境的mongodb多副本高可用方案
  • 汽车免拆诊断案例 | 2014 款宝马 M4 车冷起动后发动机抖动
  • 横泉水库建设管理局网站鄂州网站建设哪家专业
  • 虚拟人驱动密码:惯性动作捕捉设备+无穿戴动作捕捉技术
  • Linux01
  • StarRocks 数据分析加速:ETL 如何实现实时同步与高效查询
  • 2025年主流开源AI智能体框架平台概览
  • 自己做卖假货网站手机网站
  • 多字节串口收发IP设计(六)串口帧接收模块设计及仿真(含源码)
  • Android 对话框 - 对话框全屏显示(设置 Window 属性、使用自定义样式、继承 DialogFragment 实现、继承 Dialog 实现)
  • 项目实践1—全球证件智能识别系统(Qt客户端开发+FastAPI后端人工智能服务开发)
  • 源同步接口(六)
  • app 门户网站我在征婚网站认识一个做IT
  • 【FFmpeg】对比 d3d12va 、d3d11va、dxva2 这三种视频硬解方案
  • 苹果iOS开发零基础特训(视频教程)
  • 数字图像相关(DIC)技术在岩石剪切变形测量中的应用研究:全场应变与破坏机制分析
  • 建站工具 开源捷克网站后缀
  • @Resource和@Autowired注入区别
  • 网站设置cookie什么意思以个人名义做地方门户网站
  • 客户案例 | 派克新材x甄知科技,构建全场景智能IT运维体系