layui textarea内容过长不显示滚动条的根本原因是外层容器overflow:hidden和textarea自身缺少resize:vertical或overflow-y:auto;需显式设置resize及溢出样式,并检查layer弹窗中.layui-layer-content的overflow属性。

layui textarea 内容过长不显示滚动条?检查 resize 和 style 是否被覆盖
layui 自身不封装 textarea 组件,你用的其实是原生 textarea,但常被 layui 表单样式或 JS 动态插入的 style 干扰。最常见现象是:输入大量文字后,光标卡在底部、无法滚动、拉不到最下方。
根本原因不是浏览器不支持,而是以下两点同时发生:
– layui.form.render() 或其他模块给 textarea 外层容器加了 overflow: hidden
– 你手动设了 height 但没配 resize: vertical 或 overflow-y: auto
- 确保
textarea标签本身有style="resize: vertical; min-height: 120px;"(resize必须显式声明,否则拖拽无效) - 如果它在
.layui-form-item里,检查是否被父级max-height或overflow: hidden截断——可临时加.layui-form-item { overflow: visible !important; } - 不要依赖
lay-auto类自动适配:该类只对input生效,对textarea无作用
用 layui.form.on('submit') 提交前截取超长内容?别在事件里直接操作 DOM 高度
有人想“提交前把超出部分隐藏”,结果在 submit 回调里写 $('textarea').height(200),反而导致滚动位置丢失、光标跳变。这不是逻辑问题,是 DOM 渲染时序冲突。
真正要控制的是「用户可见行为」,不是 DOM 属性:
- 若需限制输入长度,用
maxlength属性(HTML 原生支持),而非 JS 截断 - 若需提交时截断,用
d.content.substring(0, 500)这类纯字符串操作,别碰textarea的scrollTop或style.height - 避免在
submit里调form.render()—— 它会重绘整个表单,触发 textarea 重置高度
嵌入弹窗(layer.open)里的 textarea 滚动失效?关键看 .layui-layer-content
当 textarea 放在 layer.open({ type: 1 }) 的 content 里,滚动条突然消失,90% 是因为 .layui-layer-content 默认 overflow: hidden 把它裁掉了。
必须加两条 CSS(!important 不可省):
.layui-layer-page .layui-layer-content,
.layui-layer-dialog .layui-layer-content {
overflow-y: auto !important;
}
注意:
– 只加 overflow: auto 可能引发横向滚动,必须限定为 overflow-y
– 如果弹窗是 type: 2(iframe),则要改 iframe 内页面的 body 高度,外层 CSS 无效
移动端 textarea 拉不到底?别信 autosize 插件
很多开发者引入 autosize.js 后发现 iOS 下依然卡住——不是插件 bug,是微信内置浏览器和 Safari 对 textarea.scrollHeight 的计算存在延迟,且 layui 的 form.render() 会干扰重排。
更稳的做法是放弃自适应高度,改用固定高度 + 显式滚动:
- 设
textarea为style="height: 160px; overflow-y: auto; -webkit-overflow-scrolling: touch;" - 加
-webkit-overflow-scrolling: touch启用 iOS 惯性滚动 - 移除所有监听
input事件去动态改height的代码,移动端重排代价太高
最易被忽略的一点:textarea 在 layer 弹窗里、又用了 form.render(),这两者叠加时,layer 的 success 回调里必须等 100ms 再操作 DOM,否则 scrollHeight 读出来还是旧值。


















