Various explanations of this bug:
Given the following example:
Outer
Inner
Outer
The underlining should be the same throughout, as it is the
underlining of the outer span that is being applied to the inner span,
and not the inner span that is underlining itself. That is, the inner
span should have *no* effect on the rendering of the underlines.
One way of looking at this is through inline boxes.
The above generates two inline boxes, one for the outer span and one
for the inner span. The inner inline box may overlap the outer inline
box (in this case they are perfectly aligned):
+-------+========+-------+
| Hello | Lovely | World |
+-------+========+-------+
The underlining should be applied *to the outer inline box* only. That
is why, for example, the colour is the same throughout an underlining.
Another way of testing this: if you made the inner span invisible
(using the visibility property), the underlining should remain.
Currently, the problem is that underlining is being applied to
children. It should not. Underlining should be applied to the inline
box which has "text-decoration" set. It should be drawn a fixed offset
(relative to the font size) from the baseline of that element, without
regard to any of the children.
To explain it another way: We should be applying the *-lining to the
element which has 'text-decoration' set, by drawing a line at a fixed
offset from the baseline (e.g. -0.01em for underline, +0.5em for
strike-out, and +1.0em for overline), and not doing anything special
individually for the children.
So, for example, in the case of the following fragment:
Outer
Inner
Outer
...the element 'a' should render the overline:
___________________
Outer Outer
...and the element 'b' should merely render its text:
Inner
...which will result in:
___________________
Outer Inner Outer
Thus the overline above 'Inner' is not any bolder than the rest.
Similarly for if this fragment:
Outer
Inner
Outer
...the element 'a' should render the overline:
___________________
Outer Outer
...and the element 'b' should merely render its text:
Inner
...which will result in:
___________________
Outer Outer
Inner
Thus the overline is not broken where the child has moved.