How to display special unicode characters using monospace font in HTML with preserved character width

六月ゝ 毕业季﹏ 提交于 2019-12-10 12:59:21

问题


I'm using pre element to display some text including special unicode characters (⚡ ⚑ ▶ ◀ ⁋). I noticed that browsers render these special characters wider than regular ones, occupying more space horizontally.

This can be easily seen here: https://gist.github.com/968b5c22cce14909cf27 Both lines have 20 characters but notice that first one is longer (screen pixels).

Is there a way (CSS) to force pre elements (or other element with monospace font applied) to have really fixed character width?

I checked on Chrome and Firefox and they both expand the width of special characters.


回答1:


The reason is that some of the characters are missing from the first font listed in the font-family declaration being applied. They will thus be displayed some other font(s) in the system, or some indicator of unrepresentable character is shown.

For example, the first character is present in a handful of fonts only, see http://www.fileformat.info/info/unicode/char/26a1/fontsupport.htm (which does not cover all fonts but most fonts that people probably have on their computers).

Even if the other fonts used are monospace font, they may have different advance widths for characters. For example, Everson Mono has a slightly smaller width than DejaVu Sans Mono. Being monospace means just that within the font, all characters have the same advance width.

So you would need to use a single font that contains all the characters you need. For this collection of characters, the two above-mentioned fonts are probably the only publicly distributed monospace fonts that contain them all. Well, there is unifont, but it is a bitmap font with very coarse design; it might look tolerable in 12pt size or somewhat larger.




回答2:


It's not the browser that's expanding the characters, it's the font definition itself. I doubt that there exists a truly monospace font that includes all these characters and defines them all at the same width, but that's what you should be looking for. See this question for more details about why this is probably not available.



来源:https://stackoverflow.com/questions/9351689/how-to-display-special-unicode-characters-using-monospace-font-in-html-with-pres

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!