HTML文本框左侧动态行号技巧

HTML 在 textarea 左侧添加行号的实现方法

在文本编辑器中显示行号是提升用户体验的常见需求。以下介绍几种在 <textarea> 左侧动态添加行号的实现方案,涵盖纯 HTML/CSS 和 JavaScript 动态生成的方法。

使用 CSS 和 JavaScript 动态生成行号

通过创建一个行号容器与 <textarea> 联动滚动,实现行号同步更新。

<div class="code-editor">
  <div class="line-numbers"></div>
  <textarea id="code"></textarea>
</div>
.code-editor {
  display: flex;
  font-family: monospace;
}
.line-numbers {
  padding: 10px;
  text-align: right;
  background: #f5f5f5;
  margin-right: 5px;
  overflow-y: hidden;
}
textarea {
  flex: 1;
  padding: 10px;
  border: 1px solid #ddd;
  min-height: 200px;
  line-height: 1.5;
}
const textarea = document.getElementById('code');
const lineNumbers = document.querySelector('.line-numbers');

textarea.addEventListener('input', updateLineNumbers);
textarea.addEventListener('scroll', syncScroll);

function updateLineNumbers() {
  const lines = textarea.value.split('\n').length;
  lineNumbers.innerHTML = Array(lines).fill('<span></span>').map((_, i) => `<span>${i + 1}</span>`).join('<br>');
}

function syncScroll() {
  lineNumbers.scrollTop = textarea.scrollTop;
}

updateLineNumbers(); // 初始化

利用 contenteditable 模拟编辑器

通过 <div contenteditable> 替代 <textarea> 实现更复杂的行号样式。

<div class="editor">
  <div class="gutter"></div>
  <div class="content" contenteditable></div>
</div>
document.querySelector('.content').addEventListener('input', function() {
  const lines = this.textContent.split('\n').length;
  document.querySelector('.gutter').innerHTML = 
    Array(lines).fill().map((_, i) => i + 1).join('<br>');
});

使用第三方库快速实现

对于复杂需求,可考虑现成库如:

  • CodeMirror: 支持行号、语法高亮等专业功能
  • PrismJS: 轻量级代码高亮工具
  • Ace Editor: 云端代码编辑器解决方案
// CodeMirror 示例
const editor = CodeMirror.fromTextArea(document.getElementById('code'), {
  lineNumbers: true,
  mode: 'htmlmixed'
});

关键注意事项

  • 性能优化: 对于大文件需使用虚拟滚动技术
  • 行高同步: 确保行号与文本的行高一致
  • 移动端适配: 触控事件需特殊处理
  • 无障碍访问: 为行号添加 ARIA 属性

以上方案可根据项目需求选择简单实现或专业编辑器集成,平衡功能与复杂度。

BbS.okapop082.sbs/PoSt/1122_224518.HtM
BbS.okapop083.sbs/PoSt/1122_708127.HtM
BbS.okapop084.sbs/PoSt/1122_494351.HtM
BbS.okapop085.sbs/PoSt/1122_175207.HtM
BbS.okapop086.sbs/PoSt/1122_365993.HtM
BbS.okapop087.sbs/PoSt/1122_826691.HtM
BbS.okapop088.sbs/PoSt/1122_750775.HtM
BbS.okapop090.sbs/PoSt/1122_071754.HtM
BbS.okapop091.sbs/PoSt/1122_166804.HtM
BbS.okapop092.sbs/PoSt/1122_776480.HtM
BbS.okapop082.sbs/PoSt/1122_554803.HtM
BbS.okapop083.sbs/PoSt/1122_041298.HtM
BbS.okapop084.sbs/PoSt/1122_956656.HtM
BbS.okapop085.sbs/PoSt/1122_750644.HtM
BbS.okapop086.sbs/PoSt/1122_790204.HtM
BbS.okapop087.sbs/PoSt/1122_185860.HtM
BbS.okapop088.sbs/PoSt/1122_767832.HtM
BbS.okapop090.sbs/PoSt/1122_687831.HtM
BbS.okapop091.sbs/PoSt/1122_893832.HtM
BbS.okapop092.sbs/PoSt/1122_153690.HtM
BbS.okapop082.sbs/PoSt/1122_627519.HtM
BbS.okapop083.sbs/PoSt/1122_661824.HtM
BbS.okapop084.sbs/PoSt/1122_448898.HtM
BbS.okapop085.sbs/PoSt/1122_220808.HtM
BbS.okapop086.sbs/PoSt/1122_630405.HtM
BbS.okapop087.sbs/PoSt/1122_172584.HtM
BbS.okapop088.sbs/PoSt/1122_999847.HtM
BbS.okapop090.sbs/PoSt/1122_487585.HtM
BbS.okapop091.sbs/PoSt/1122_796111.HtM
BbS.okapop092.sbs/PoSt/1122_205288.HtM
BbS.okapop082.sbs/PoSt/1122_059389.HtM
BbS.okapop083.sbs/PoSt/1122_470008.HtM
BbS.okapop084.sbs/PoSt/1122_440126.HtM
BbS.okapop085.sbs/PoSt/1122_407614.HtM
BbS.okapop086.sbs/PoSt/1122_118232.HtM
BbS.okapop087.sbs/PoSt/1122_196484.HtM
BbS.okapop088.sbs/PoSt/1122_348071.HtM
BbS.okapop090.sbs/PoSt/1122_160719.HtM
BbS.okapop091.sbs/PoSt/1122_329550.HtM
BbS.okapop092.sbs/PoSt/1122_972763.HtM
BbS.okapop082.sbs/PoSt/1122_429889.HtM
BbS.okapop083.sbs/PoSt/1122_689816.HtM
BbS.okapop084.sbs/PoSt/1122_863236.HtM
BbS.okapop085.sbs/PoSt/1122_358969.HtM
BbS.okapop086.sbs/PoSt/1122_833713.HtM
BbS.okapop087.sbs/PoSt/1122_751477.HtM
BbS.okapop088.sbs/PoSt/1122_733318.HtM
BbS.okapop090.sbs/PoSt/1122_277191.HtM
BbS.okapop091.sbs/PoSt/1122_543324.HtM
BbS.okapop092.sbs/PoSt/1122_516966.HtM
BbS.okapop082.sbs/PoSt/1122_598765.HtM
BbS.okapop083.sbs/PoSt/1122_009498.HtM
BbS.okapop084.sbs/PoSt/1122_517015.HtM
BbS.okapop085.sbs/PoSt/1122_192073.HtM
BbS.okapop086.sbs/PoSt/1122_192353.HtM
BbS.okapop087.sbs/PoSt/1122_750289.HtM
BbS.okapop088.sbs/PoSt/1122_127161.HtM
BbS.okapop090.sbs/PoSt/1122_959008.HtM
BbS.okapop091.sbs/PoSt/1122_879886.HtM
BbS.okapop092.sbs/PoSt/1122_631840.HtM
BbS.okapop082.sbs/PoSt/1122_536122.HtM
BbS.okapop083.sbs/PoSt/1122_181611.HtM
BbS.okapop084.sbs/PoSt/1122_903840.HtM
BbS.okapop085.sbs/PoSt/1122_714168.HtM
BbS.okapop086.sbs/PoSt/1122_497412.HtM
BbS.okapop087.sbs/PoSt/1122_683696.HtM
BbS.okapop088.sbs/PoSt/1122_209108.HtM
BbS.okapop090.sbs/PoSt/1122_446257.HtM
BbS.okapop091.sbs/PoSt/1122_252763.HtM
BbS.okapop092.sbs/PoSt/1122_932766.HtM
BbS.okapop082.sbs/PoSt/1122_265317.HtM
BbS.okapop083.sbs/PoSt/1122_442769.HtM
BbS.okapop084.sbs/PoSt/1122_054561.HtM
BbS.okapop085.sbs/PoSt/1122_747716.HtM
BbS.okapop086.sbs/PoSt/1122_467500.HtM
BbS.okapop087.sbs/PoSt/1122_840624.HtM
BbS.okapop088.sbs/PoSt/1122_597568.HtM
BbS.okapop090.sbs/PoSt/1122_658222.HtM
BbS.okapop091.sbs/PoSt/1122_500467.HtM
BbS.okapop092.sbs/PoSt/1122_421634.HtM

#牛客AI配图神器#

全部评论

相关推荐

09-30 15:27
已编辑
成都工业学院 企业文化
Morpheus_:候选人:还需要测验武力值?
投递腾讯等公司10个岗位
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务