In a web application, I have to display a special unicode character, know as BLACK DIAMOND (U+25C6)
(see here for more details). Here is a sample : ◆
The font defined for the page is Arial, with size 13px.
Surprisingly, the character is rendered with a bigger size in IE6 vs other browsers (FF, Chrome, ...).
Is there any reason of this weird behavior and what is the solution to avoid this ?
This is because the specified character is missing from the font you specified. So the browser looks for a suitable font to use for that character so it can still display it. Different browsers pick different fonts, so you'll see it a little bit differently on each.
There isn't much in general you can do to avoid this because missing fonts are very common on the web and thus you cannot really rely on any font to be present on the user's machine. You can try mitigating it, though:
After being puzzled for a while, I realized that browsers render Unicode characters with different fonts depending on the order of the characters. Here's an example using the N-Ary Union (U+22C3
), 𝕊 (U+1D54A
), and ℝ (U+211D
):
<p>𝕊⋃</p>
<p>⋃𝕊</p>
<p>ℝ⋃</p>
<p>⋃ℝ</p>
On my Mac, Chrome renders the first paragraph with STIXGeneral
, the second paragraph with Apple Symbols
and STIXGeneral
, the third paragraph with Menlo
and Apple Symbols
, and the fourth paragraph only with Apple Symbols
. Firefox renders everything with STIXGeneral
except the ℝ in the third paragraph, which it renders with Geneva
.
(Chrome shows the rendered fonts at the bottom of the Computed
tab when inspecting an element with the developer tools. Firefox has a Fonts
tab when inspecting an element. I couldn't find anything similar for Safari, which is confirmed by this answer.)
As far as I can tell, this is a simple optimization: If a glyph exists in a font already loaded for a particular "text node", use this font. Otherwise, search for another font which can render this glyph. Interestingly, I observed the same behavior (large ⋃ after 𝕊 and small ⋃ before 𝕊) also in Visual Studio Code and Apple Pages.
This optimization has a subtle security implication: If you print out a document and black out some text, the rendering of the later characters can reveal information about the blacked-out text.
(I put "text node" in quotation marks because <span>𝕊</span>⋃
leads to the same behavior while <span style="font-weight: bold;">𝕊</span>⋃
does not.)
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With