html - IE 上的长度单位 ch 与 em

标签 html css

我有 font-family: monospace;white-space: pre; 的文本,我还想设置最大宽度以适合文本(这样背景颜色不会超出文本右侧的要求)。

文本的最大宽度为 80 个等宽字符,因此我设置了 max-width :82ch;。这在 Firefox 和 Chrome 上完全按照预期工作,但在 IE 上它根本不玩球并且在大约 60 个字符处换行。通过检查,我似乎需要将 max-width: 95ch; 设置为在 IE 上没有换行,但这会加宽 Firefox 和 Chrome 的显示。

在研究这个过程中,我遇到了 The Lengths of CSS ch 长度单位的哪些状态:-

Notable browser support issues: IE 9+, no Android default browser

我同意!

我尝试使用 em 作为我的长度单位,因为在等宽字体中,我的解释是 emch 是相似的(如果不一样的话)。

来自 Wikipedia: Em (typography) :-

The name em was originally a reference to the width of the capital M in the typeface and size being used

我的假设是大写字母 M 与等宽字体中的所有字符大小相同(这就是等宽字体的意义所在),因此 emch 将是一样。

我也遇到了CSS Units它有一个表格显示对 ch 的支持只在 IE9 中出现,而对 em 的支持在 IE3 中出现,所以我认为这可能意味着他们有更多机会让它工作!

我发现它们在所有浏览器中至少是一致的,但是 max-width: 82em; 比我的 80 个等宽字符宽 WAAAY。通过检查,我似乎需要 max-width: 51em; 才能正确匹配。

我检查了三个主要浏览器中 font-sizemax-width 的“计算”值,发现它们都是相同的。他们都计算了 font-size:13px;max-width:663px;。由于 max-width 设置为 51em 这使得 1em = 13px;

我不明白为什么等宽字体中的 80 个字符不占用 80 x 13 像素的宽度?

这背后是不是有什么我没看懂的原因,或者是三大浏览器似乎无法就任何事情达成一致,实际上一直在做错事?

问题:为所有浏览器设置字符宽度的正确方法是什么?

我担心我的问题可能没有好的答案。我刚找到 this question它准确描述了我在 2009 年想做的事情,答案(最近添加)是使用 ch。不幸的是,ch 在 IE 中无法正常工作,即使在 IE11 中也是如此。

最佳答案

任何不使用 ch 长度单位的解决方案都会破坏 Firefox 和 Chrome 的一些完美的 CSS,只是为了 IE 的好处。

以下解决方案似乎是一个很好的折衷方案,因为它适用于带有一些替代 CSS 的 IE10+。 Microsoft 不再支持 IE9,因此也不会过分支持它,尽管有条件的注释或其他 hack 是可能的。

.mybox {
    font-family:monospace;
    white-space:pre;
    max-width:82ch;
    width:82ch;
}
@media all and (-ms-high-contrast: none), (-ms-high-contrast: active) {
    /* IE10+ CSS styles go here */
    .mybox {
        max-width:95ch;
        width:95ch;
    }
}

关于html - IE 上的长度单位 ch 与 em,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49504899/

相关文章:

javascript - 文件 javascript 的 CPU 和内存使用情况

javascript - 如何在我的网站上使用 CSV 文件中的数据?

javascript - 无法在 appendchild 之后将表行与标题对齐

html - 几张带标题的图片

html - zend 框架 2 html5 音频标签不起作用

javascript - CSS 不适用于 jquery 表上新添加的行

javascript - Bootstrap 4 下拉菜单在导航栏下方推送弹出窗口

html - 水平滚动条不隐藏 & 背景图像不是 100%

css - 如何避免CSS类名的名称冲突

jquery - 我怎样才能更快地获得具有某些类的元素的 .index() ?