<!DOCTYPE html>
<html>
<head>
<style>
div:before {
display: table-cell;
content: "ABC";
color: red;
}
</style>
</head>
<body>
<div>123</div>
</body>
</html>
I'd expect this to render to something like , but I get
instead, only when running on Internet Explorer (any version).
Is this a bug or I'm doing something wrong?
This appears to be a bug in IE. If you inspect the element in IE 11 Developer Tools, you see all the declarations for the
:before
pseudo-element struck out (also e.g.font
settings if you add them), but thedisplay
andcontent
settings affect the rendering.To circumvent this bug, it suffices in this simple case to set
display: block
as @BeatAlex suggests. In a more complicated situation, you probably need more complicated workarounds.This appears to be a regression. It works on IE8 on Windows 7, but not IE9 or later, even in IE8 mode. Funny I didn't notice this earlier, as I remember encountering the same issue myself some time ago. I never considered something like this could possibly regress, though, much less thought of comparing the results in IE8 and IE9.
Other font-related styles are affected as well. It has been reported before, but there doesn't seem to have been any response other than "we're looking into it", and that was a year ago.
Workarounds include using
display: table-cell
with an actual element instead of a pseudo-element, or simply not usingdisplay: table-cell
at all — usedisplay-block
instead if you don't absolutely need a table-based layout.