【发布时间】:2017-02-17 11:45:49
【问题描述】:
很多人认为 1em = 16px。这不正确,1em = value of your browser font-size which is most of the time 16px。虽然更改浏览器默认字体大小并不常见,但更改设置仍然很容易。
鉴于这种情况,从HTML 元素的角度来看,覆盖 em 值仍然很容易,因为它使用顶部元素的字体大小。例如:
html {
font-size: 20px;
}
这种简单的样式会级联到文档的其余部分,而 1em 将有效地变为 20px。
问题是,当使用带有media queries 的CSS 时,em 的值似乎停留在浏览器样式级别,而不是顶级元素。例如:
@media screen and (min-width: 2em) {
...some style...
}
如果我们考虑前面的带有 20px HTML 覆盖的示例,可以预期该上下文中的 2em 指的是顶级元素,其值为 40 像素。但它不是,它将是2 * browser default font-size(例如 16px,所以 36px)。更糟糕的是,如果您将浏览器字体大小自定义为 24px,则 2em 将有效地具有 48px 的值。
有没有办法解决这个问题?主要问题是如果我们不能覆盖浏览器默认字体大小,就很难预测媒体查询的风格。这个值变得不可预测,这意味着你的风格也将是。
我可以想到一种使用 JavaScript 获取浏览器默认字体大小的复杂方法,但我不禁想知道为什么媒体查询不使用顶部元素的字体大小而不是浏览器的默认字体大小。我也希望有一种更好的方法来处理这个不需要复杂的 JavaScript。
总结一下,我正在寻找:
- 一种在使用媒体查询时覆盖默认浏览器字体大小值的方法。
- 获取默认浏览器字体大小的简单方法。
【问题讨论】:
-
请原谅这个问题,但是,您为什么要在 ems 中测量媒体查询?如果您在 html 元素处设置以像素为单位的字体大小,您知道在这种情况下您希望 2em 评估什么,不是吗?
-
@anied 好问题,但 EM 提供的功能将成为以像素为单位实现的噩梦。它们更具动态性,对于响应式设计特别有用。有很多很好的文章可以提供这方面的详细信息。
-
我绝对同意基于 em 的 CSS 方法是首选。但是,每当我创建或看到基于 em 的 CSS 示例时,它的实现方式就是将 HTML 元素的字体大小设置为 px,将所有其他 CSS 写入 em,然后将媒体查询视口宽度目标写入像素.这种尝试在 ems 中评估视口/屏幕大小的特殊方法对我来说似乎很不寻常——这并不意味着它不正确,我只是想知道你是否确定这是正确的方法......
-
em中的最小宽度查询没有多大意义,因为除非您通过@font-face设置字体,否则您对 width 使用的字体。 CSSfont-size属性设置连续基线之间的垂直距离,所以没有提到高度。事实上,它甚至不是真正的“字体中字母的高度”,因此您的媒体查询确实应该基于像素、毫米等绝对单位,而不是 em、ex 或百分比等相对值。顶级规则(html、body)应该是绝对的。 -
@anied 我知道在 EM 中进行媒体查询不太常见,但想象一下,如果您想在移动屏幕宽度中使用较小的字体大小,您会期望一些媒体查询规则保持不变例如相同。这就是媒体查询中的 EM 可以通过在不同布局中保持断点等效来避免意大利面条式 CSS 的地方。
标签: javascript html css fonts media-queries