【发布时间】:2016-10-09 02:42:20
【问题描述】:
我在一个项目上工作了一段时间,我认为 em 在表示长度时是 de facto 单位。
我通常的做法是将 body 和 html 元素设置为所需的 px 大小,并将所有其他元素设置为 1em。之后,其余的都在 em 中。直到今天早上,这似乎是一个不错的计划,直到我发现 媒体查询 似乎没有考虑到基础 body 和 html 像素值。实际上,它们似乎采用了浏览器的默认字体大小,这似乎是一种非常奇怪的行为。我还找到了this article,这似乎证实了这一点。
我做了一个小的 JsFiddle 示例,它准确地显示了这种行为:
https://jsfiddle.net/5dq3kq2t/2/
html, body {
font-size: 20px;
}
* {
font-size: 1em;
}
#divOf50Em {
width: 50em;
border: solid 1px red;
}
#cell2 {
display: none;
}
@media screen and (min-width: 50em) { /* 1000px, in theory (50 * 20px) */
#cell1 {
display: none;
}
#cell2 {
display: table-cell;
}
}
实验很简单,表格默认显示值“1”,直到满足50em min-width媒体尺寸.应显示值“2”。我还放置了一个 div,其大小为 50em 以显示何时应该触发该行为,并确认 CSS 在媒体查询之外工作。
如果您调整此实验的输出大小,您会认为两个值之间的偏移会发生在 1000px 值处,即 50em * 20px ,但事实并非如此,它发生在 800px 即 50em * 16px (默认浏览器字体大小 - 如果这样当然是你的默认尺寸)。
我显然不确定为什么会发生这种情况,但我有两个问题:
- 有没有办法解决这个问题(例如覆盖默认浏览器字体大小 从 CSS 的角度来看)
- 如果没有,JavaScript 中有没有办法访问浏览器的默认值 字体大小?我找不到此信息。
否则,当使用媒体宽度和 ems 时,似乎不可能有一个与媒体查询对齐的脚本,因为我们不能相信浏览器的字体大小将始终为 16 像素。
如果是这种情况,我的最后一个问题是,有没有办法在不返回像素的情况下对齐媒体查询和 JavaScript?我更喜欢相对单位而不是静态像素,它们通常使样式更简单。
【问题讨论】:
-
不确定问题是什么?
1em等价于16px -
@guest271314 如果你覆盖它,请检查我的 JsFiddle。您可以从 CSS 角度覆盖 16px,也可以从浏览器设置角度覆盖。
-
有什么问题?
-
样式表级联。后一个设置会覆盖前一个设置。也就是说,您重置或覆盖以前在
html, body { font-size: 20px; }设置的20px到1em在* { font-size: 1em; } -
@guest271314 问题是给定的 html 和 body 为 20px,其他所有内容也应为 20px(对于 1em)。在所有样式表中,前提是 1em,从顶层开始 = 20px。问题是,媒体查询仍然认为 1em = 16px。此外,第二个问题是这个 16px 值似乎来自浏览器的样式表,这意味着它可以更改。我正在寻找一种方法来使这个值可预测。
标签: javascript html css responsive-design media-queries