layui文本域限制最大高度需用height:auto!important和max-height配合overflow-y:auto,否则内联height会覆盖max-height;富文本编辑器需换选择器;表单重置后需手动恢复样式。

layui文本域(textarea)怎么限制最大高度
直接用 CSS 的 max-height + overflow-y: auto 就能生效,但必须确保没被 layui 默认样式覆盖——它会给 .layui-textarea 加 height: 100px 这类内联 style,导致 max-height 失效。
- 别只写
max-height: 200px,得同时加height: auto !important,否则 layui 渲染后注入的内联 height 会压过你的 max-height - 必须配
overflow-y: auto,不然超出部分直接被裁掉,用户看不到滚动条 - 如果用了
lay-verifiy或表单校验,layui 会在校验失败时给 textarea 加border-color: #ff5722等样式,不影响高度,但建议在同一条 CSS 规则里统一控制 - 移动端要注意:iOS Safari 对
max-height+textarea的滚动支持不稳定,可 fallback 到固定高度 +resize: none
为什么加了 max-height 还是无限撑开
常见原因是 layui 在渲染时主动给 <textarea></textarea> 元素加了内联 style="height: 120px",而内联样式优先级高于外部 CSS 的 max-height。你看到的“撑开”,其实是内容顶开了这个固定 height,不是 max-height 生效了。
- 检查开发者工具里 textarea 元素的 computed height,如果显示的是一个具体像素值(比如 120px),说明内联 height 还在起作用
- 解决方案不是删内联 style,而是用
height: auto !important覆盖它,再叠加上max-height - 如果用了
layedit富文本编辑器,它完全接管了 DOM,.layui-textarea类名无效,得用.layui-layedit-iframe或编辑器容器的 class 来定位
配合 layui 表单提交时的高度重置问题
表单 reset() 后,textarea 会恢复初始 height 值(比如 100px),但用户之前输入的内容可能远超这个高度,导致内容被截断、滚动条消失。这不是 bug,是浏览器原生行为,需手动干预。
- 监听表单的
reset事件,在回调里执行$('textarea').css({ height: 'auto', 'max-height': '200px' }) - 如果用了
form.render(),记得在 render 完成后再设一次样式,避免 layui 重绘覆盖 - 别依赖
rows属性控制高度——layui 不读 rows,它只管内联 style 和 CSS
多行文本 + 自动增高 + 最大高度三者共存
想让 textarea 初始矮一点,输入时自动增高,但又不无限撑开?layui 没内置 auto-resize,得靠 JS 监听 input 事件 + scrollHeight 动态设高,同时守住 max-height 边界。
- 初始 CSS:
height: 40px; max-height: 200px; overflow-y: hidden; - JS 里监听 input:
el.style.height = Math.min(el.scrollHeight, 200) + 'px' - 注意:每次设 height 都会触发重排,别在高频输入中反复调用;可用
requestAnimationFrame节流 - 如果 textarea 在 layer 弹窗里,弹窗打开后要等 layer 完全 show 再绑定事件,否则 DOM 还没挂载好
.layui-textarea 样式表里写了 height: 100px,且没有加 !important,所以你只要在自己 CSS 文件里用相同选择器+!important 就能稳稳盖住——不需要 hack,也不需要 JS 强制改内联 style。











