【发布时间】:2017-10-17 13:12:21
【问题描述】:
我注意到一台具有 1920x1080 屏幕的小型笔记本电脑,Windows 10 会自动调整缩放比例。我看到它高达150%。有没有办法我们可以检测到这一点?我的媒体查询没有启动,因为它们是在 px 中设置的。
【问题讨论】:
标签: javascript css
我注意到一台具有 1920x1080 屏幕的小型笔记本电脑,Windows 10 会自动调整缩放比例。我看到它高达150%。有没有办法我们可以检测到这一点?我的媒体查询没有启动,因为它们是在 px 中设置的。
【问题讨论】:
标签: javascript css
尝试访问window.devicePixelRatio 变量。
Window 属性 devicePixelRatio 返回当前显示设备的物理像素分辨率与 CSS 像素分辨率的比率。该值也可以解释为像素大小的比率:一个 CSS 像素的大小与一个物理像素的大小。简单来说,这告诉浏览器应该使用多少屏幕的实际像素来绘制单个 CSS 像素。
更多信息:https://developer.mozilla.org/en-US/docs/Web/API/Window/devicePixelRatio
您也可以为此使用 CSS resolution,在此处了解更多信息:https://developer.mozilla.org/en-US/docs/Web/CSS/@media/resolution
@media (resolution: 150dpi) {
p {
color: red;
}
}
【讨论】:
window.devicePixelRatio = 1.5),但 CSS 仅适用于 144dpi - @media (resolution: 144dpi)。不知道为什么。所以,我建议使用@media (min-resolution: 125dpi) 之类的东西来处理这个问题。
对于任何研究此问题的人,在 Martin Adamek 的回答基础上构建一些内容,您可以在 jQuery 中执行此操作并使用 CSS 转换缩放某些内容:
// if the user has display scaling active, scale with CSS transform
if (window.devicePixelRatio !== 1){
let scaleValue = (1/window.devicePixelRatio);
$('#containerToBeScaled').css('transform','scale('+scaleValue+')');
}
例如,如果您有一个弹出窗口并且您希望它看起来相同而不管显示缩放,这很有效
【讨论】:
这并不是 OP 专门要求的,但我认为很多登陆这个问题的用户会问什么..
Windows 10 中 150% 的文本缩放破坏了我的网页,我该怎么办?
rem 来调整问题文本的字体大小。 rem 专为这种情况而设计。html 元素的单个 media 查询一次缩放 ALL 文本。这避免了任何不可避免地导致结果模糊的 CSS 变换缩放。
/* Handle 125% and 150% Windows 10 Font Scaling on 96dpi monitors */
@media (min-resolution: 120dpi) {
html {
font-size: 80%;
}
}
根据自己的喜好调整 80%,更少 = 更小的文本
注意:请注意,150% 缩放并不意味着 150dpi。大多数显示器是 72dpi 或 96dpi。因此,150% 缩放意味着 108dpi 或 144dpi 作为您查询的最小分辨率。
rem 字体大小并确保您使用rem 作为字体,例如:
p {
font-size: 1rem;
}
如果您使用的是px,则不必更改所有内容,只需对引起问题的文本进行更改即可。
【讨论】: