使用 CSS 在 <ins> 和 <del> 之间添加一个间隔

Adding a gap between <ins> and <del> using CSS

我正在使用 htmldiff gem 输出一串两个输入值之间的差异。

此输出使用 <ins><del> 标记的组合,以及 类 .diffins.diffmod.diffdel造型目的 - 到目前为止一切顺利,我可以毫无问题地设计所有这些。

嗯,几乎没问题,下面是一些示例输出:

Here is some text that <del class="diffmod">will be</del><ins class="diffmod">has</ins> changed.

除了 <del><ins> 之间没有间隙外,这在大多数情况下都很好,这可能是正确的,但我觉得不对。

我的问题是我正在尝试使用 CSS 来添加间隙,但结果并不如我所愿。这是我目前所拥有的:

.diffins {
  color: green;
}

.diffmod {
  color: blue;
}

del.diffmod + ins.diffmod::before {
  content: ' ';
}

.diffdel {
  color: red;
}

这增加了一个空隙,但 <ins> 标签的下划线样式延伸到 ::before 创建的 space 中。正如你在这里看到的:

http://codepen.io/LimeBlast/pen/LVqBeo

我试过添加 text-decoration: overline;,但这不起作用。

有什么想法吗?干杯。

您可以在不调整边距或填充的情况下执行此操作,方法是使用 ::before 伪元素,方法是给它一个 inline-blockdisplay 并将其内容设置为 '\A0' - 这是一个常规 space,但 ' ' 本身似乎没有任何效果:

body {
  font: 32px/40px sans-serif;
}

del.diffmod + ins.diffmod::before {
  content: '\A0';
  display: inline-block;
}
This is the <del class="diffmod">wrong</del><ins class="diffmod">perfect</ins> solution!

Codepen Demo.

为什么不直接做

ins {
   text-decoration: none;
}

这会消除整个块的下划线,但我看不出它的真正用途,因为它已经是不同的颜色

基于您现有的代码:

del.diffmod + ins.diffmod::before {
  content: '';
  display: inline-block;
  margin-left: .25em; /* approx 1 character */
}

没有要显示的实际内容(因此 underline/strike)并且边距在 em 中,因此对字体大小的变化做出反应,

.diffmod {
  color: blue;
}

del.diffmod + ins.diffmod::before {
  content: '';
  display: inline-block;
  margin-left: .25em;
}
Here is some text that <del class="diffmod">will be</del><ins class="diffmod">has</ins> changed.