As @anddoutoi correctly pointed, that behavior is explained in W3C Recommendations:
If the box does not have a baseline, align the bottom margin edge with the parent's baseline.
That fiddle demonstrates, that it is not that empty element's size increases, but that it is risen for the baseline height
.
Such jumps can be avoided either
- by replacing the empty content with non-breaking space, e.g.:
i.noicon:before { content: '\00a0'; }
- or by defining the
vertical-align
property.