版本对比时怎么高亮显示差异行?
我在做配置文件的版本对比功能,想用颜色区分新增、删除和修改的行,但样式总是对不齐。
试过给不同状态的行加 class,但行号和内容错位了,看起来很乱。是不是得用 table 或者特殊布局?
.diff-added {
background-color: #e6ffed;
padding-left: 10px;
}
.diff-removed {
background-color: #ffeef0;
padding-left: 10px;
}
.diff-line {
display: block;
font-family: monospace;
}
核心思路是:把行号和内容放在两个独立的容器里,各自占各自的宽度,互不干扰。
HTML 结构大概这样:
你之前的问题就在于把 padding 加在了整个行上,导致行号那列也被撑开了。用我上面这个结构,行号固定宽度,内容自己管自己,完全不会乱。
如果你是后端直接生成 diff 字符串,可以考虑用现成的库来处理,比如 PHP 的
phpspec/php-diff或者sebastian/diff,它们直接输出带标记的数组,你拿到前端渲染就行了,省得自己在那儿拼字符串。1. 表格布局确实更稳,每行用两个单元格分别放行号和内容。这样样式不会乱跑:
2. CSS可以这样写,保证对齐:
3. 如果不用table,也可以用flex布局,但处理行号对齐更麻烦。我上次折腾半天最后还是换回table了...
关键点就是行号和内容要分开容器,别混在一起。GitHub的diff实现也是类似思路,你可以F12看下他们的DOM结构。