本文介绍一种无需 javascript 动态计算偏移量、仅用 css grid 即可让行号与 textarea 内容完美对齐并同步滚动的专业方案,解决传统 flex + 定位方式中行号错位、滚动不同步等核心问题。
本文介绍一种无需 javascript 动态计算偏移量、仅用 css grid 即可让行号与 textarea 内容完美对齐并同步滚动的专业方案,解决传统 flex + 定位方式中行号错位、滚动不同步等核心问题。
在构建类代码编辑器的 UI 时,一个常见但易被低估的挑战是:如何让左侧行号(line numbers)始终与 textarea 中的每一行文本严格垂直对齐,且在滚动、增删行、自动换行等操作下保持同步? 原始方案试图通过 top 偏移和手动计算行高来“模拟”对齐,但因 textarea 的滚动容器行为与绝对定位元素的脱离,导致行号反向漂移——这本质上是布局模型误用所致。
✅ 正确解法:使用 display: grid 替代 inline-flex,借助网格天然的行列对齐能力,让 .numbers 和
✅ 核心优势
- 零 JS 对齐逻辑:不再需要 numbers.style.top = offset + "px" 等脆弱计算;
- 原生滚动同步:.editor 作为统一滚动容器,.numbers 与 textarea 共享 scroll offset,行号自动跟随内容滚动;
- 响应式健壮:行高变化、字体缩放、动态内容更新均不影响对齐;
- 语义清晰:Grid 明确表达了“行号列 + 编辑区列”的二维结构关系。
✅ 实现要点
-
HTML 结构保持简洁:包裹两个直接子元素(.numbers 和
前端入门到VUE实战笔记:立即使用
在学习笔记中,你将探索 前端 的入门与实战技巧!











