You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用JavaScript检测指定高DPI CSS媒体查询并生成布尔标记?

如何根据高DPI媒体查询生成True/False标记

当然可以实现!你可以通过JavaScript结合你现有的CSS媒体查询条件,轻松获取一个表示当前屏幕是否符合高DPI要求的布尔值。下面是两种实用的方法:

方法1:直接使用window.matchMedia() API

这是最简洁的方式,浏览器原生支持直接检测媒体查询是否匹配:

// 定义你的高DPI媒体查询字符串
const highDpiQuery = `only screen and (-webkit-min-device-pixel-ratio: 1.3), only screen and (-o-min-device-pixel-ratio: 13/10), only screen and (min-resolution: 120dpi)`;

// 检测是否匹配
const isHighDpi = window.matchMedia(highDpiQuery).matches;

// 输出结果(true或false)
console.log(isHighDpi);

这个方法还支持监听屏幕变化(比如窗口缩放、切换显示器),如果需要实时更新状态,可以添加监听:

const mediaQueryList = window.matchMedia(highDpiQuery);

function handleDpiChange(e) {
  const isHighDpiNow = e.matches;
  console.log("高DPI状态变化:", isHighDpiNow);
  // 这里可以执行你的后续逻辑
}

// 初始检测
handleDpiChange(mediaQueryList);
// 添加监听
mediaQueryList.addEventListener('change', handleDpiChange);

方法2:通过CSS类/变量间接判断

如果你更倾向于先通过CSS标记状态,再用JavaScript读取,也可以这样做:

首先在CSS中添加媒体查询规则:

@media only screen and (-webkit-min-device-pixel-ratio: 1.3), only screen and (-o-min-device-pixel-ratio: 13/10), only screen and (min-resolution: 120dpi) {
  :root {
    --is-high-dpi: "true";
    /* 或者添加类名 */
    /* body.high-dpi { } */
  }
}

然后用JavaScript读取这个变量(或检测类名):

// 读取CSS变量的方式
const rootStyle = getComputedStyle(document.documentElement);
const isHighDpi = rootStyle.getPropertyValue('--is-high-dpi') === "true";

// 或者检测类名的方式
// const isHighDpi = document.body.classList.contains('high-dpi');

console.log(isHighDpi);

两种方法都能满足你的需求,window.matchMedia()更适合实时场景,而CSS类/变量的方式兼容性在旧浏览器中可能稍好一些,你可以根据自己的项目需求选择。

内容的提问来源于stack exchange,提问作者davidesp

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 06:56:35