假设我将默认字体大小设置为16像素(这应该是多余的,因为它在大多数浏览器中都是默认值):
为了简洁起见,我的网站包含一个大小为10em x 10em的框。
body,html { font-size: 16px; } .box { border: 1px绿色实线; 背景颜色:绿色; 宽度:10em; 高度:10em; }
我的网站已经响应式,使用min-width
媒体查询针对em值的特定断点。
我的网站唯一要做的就是改变框的宽度和颜色。
@media (min-width:36em) { .box { width: 36em; border:1px红色实线; 背景颜色:红色; } } @media (min-width:62em) { .box { width: 62em; border:1px蓝色实线; 背景颜色:蓝色; } } @media (min-width:85em) { .box { width: 85em; border:1px橙色实线; 背景颜色:橙色; } }现在假设我有一个分辨率为1440x900的设备,浏览器默认将该设备的像素密度设置为2dppx。结果是,所有内容看起来比实际要大得多。而我不喜欢这样。
但解决方案应该很简单,对吧?只需在开始时添加一个2dppx像素密度的媒体查询,由于它是两倍的像素,我只需将字体大小减半...应该可以解决问题,对吧?
而且,由于我在所有内容中都使用“em”,所以通过将字体大小减半,我自动将所有“em”大小的内容减半...对吧?
@media ( min-resolution: 2dppx) { body, html { font-size: 50%; } } 相关jsFiddle 嗯,我发现它并不像我想象的那样工作...我试图搜索答案,但没有找到任何相关的内容,我怀疑我误解了字体大小、em和像素密度的工作原理...
将字体大小减少50%会导致字体大小减小得比一半还要多。原始大小为16px,但font-size: 50%;的结果是比font-size:8px小得多... 在Firefox和Chrome中测试。有人知道为什么吗?
当我在2dppx的媒体查询中设置font-size:8px;时,min-width:36em,62em和85em的媒体查询不会按照我预期的触发,至少当我在Firefox中更改layout.css.devPixelsPerPx时是这样的。媒体查询中的min-width表现得像字体大小仍然是16px,尽管它已经随着dppx媒体查询的变化而改变。在Firefox和Chrome中测试。有人知道为什么吗?
更新
看起来媒体查询在1dppx上下文中加载,如果您使用“em”,则无论如何它似乎都会在加载时缓存,例如min-width等值被固定为第一个值,即使您在不同的媒体查询中更改基本字体大小,其他查询也不会刷新。
我现在能想到的唯一解决方案是将所有媒体查询乘以倍数。一个媒体查询用于1 dppx上下文中的px值,另一个媒体查询用于2 dppx上下文中的px值(即第一个值的50%)。
font-size:50%
是font-size:16px
的一半?它是父元素字体大小的一半。 - Mr Lister