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

如何通过Material UI库针对不同设备使用指定媒体查询设置样式

在Material UI样式系统中针对不同设备配置高DPI媒体查询样式

要在Material UI的样式系统中为不同设备单独配置高DPI屏幕的样式,核心是利用样式对象的嵌套媒体查询特性,把高DPI查询规则嵌入到对应设备的断点样式中。以下是具体实现方案:

步骤1:定义高DPI媒体查询常量

先把重复的高DPI查询语句抽成常量,方便复用和维护:

const HIGH_DPI_MEDIA_QUERY = '@media (min-device-pixel-ratio: 2), (min-resolution: 192dpi), (min-resolution: 2dppx)';

步骤2:整合到样式定义中

根据你提供的现有代码,我们可以把不同设备的1x图和对应高DPI的2x图嵌套到样式对象里,同时结合设备宽度断点实现分设备适配:

基础版(直接用像素断点)

const HIGH_DPI_MEDIA_QUERY = '@media (min-device-pixel-ratio: 2), (min-resolution: 192dpi), (min-resolution: 2dppx)';

const styled = {
  animal: {
    // 默认移动端1x图
    backgroundImage: `url(${require('../../images/background/bg-mobile@1x.png')}), url(${require('../../images/animal/animal-mobile@1x.png')})`,
    
    // 移动端高DPI屏幕显示2x图
    [HIGH_DPI_MEDIA_QUERY]: {
      backgroundImage: `url(${require('../../images/background/bg-mobile@2x.png')}), url(${require('../../images/animal/animal-mobile@2x.png')})`,
    },
    
    // 平板断点(600px为Material UI默认md断点)
    '@media (min-width: 600px)': {
      backgroundImage: `url(${require('../../images/background/bg-tablet@1x.png')}), url(${require('../../images/animal/animal-tablet@1x.png')})`,
      
      // 平板高DPI屏幕显示2x图
      [HIGH_DPI_MEDIA_QUERY]: {
        backgroundImage: `url(${require('../../images/background/bg-tablet@2x.png')}), url(${require('../../images/animal/animal-tablet@2x.png')})`,
      },
    },
    
    // 桌面断点(1200px为Material UI默认lg断点)
    '@media (min-width: 1200px)': {
      backgroundImage: `url(${require('../../images/background/bg-desktop@1x.png')}), url(${require('../../images/animal/animal-desktop@1x.png')})`,
      
      // 桌面高DPI屏幕显示2x图
      [HIGH_DPI_MEDIA_QUERY]: {
        backgroundImage: `url(${require('../../images/background/bg-desktop@2x.png')}), url(${require('../../images/animal/animal-desktop@2x.png')})`,
      },
    },
  },
};

主题适配版(用Material UI主题断点)

如果你的项目配置了Material UI主题,建议用主题内置的断点,保证全局断点一致性:

import { makeStyles } from '@mui/styles';

const HIGH_DPI_MEDIA_QUERY = '@media (min-device-pixel-ratio: 2), (min-resolution: 192dpi), (min-resolution: 2dppx)';

const useStyles = makeStyles((theme) => ({
  animal: {
    backgroundImage: `url(${require('../../images/background/bg-mobile@1x.png')}), url(${require('../../images/animal/animal-mobile@1x.png')})`,
    
    [HIGH_DPI_MEDIA_QUERY]: {
      backgroundImage: `url(${require('../../images/background/bg-mobile@2x.png')}), url(${require('../../images/animal/animal-mobile@2x.png')})`,
    },
    
    // 平板断点(对应主题中的md断点)
    [theme.breakpoints.up('md')]: {
      backgroundImage: `url(${require('../../images/background/bg-tablet@1x.png')}), url(${require('../../images/animal/animal-tablet@1x.png')})`,
      
      [HIGH_DPI_MEDIA_QUERY]: {
        backgroundImage: `url(${require('../../images/background/bg-tablet@2x.png')}), url(${require('../../images/animal/animal-tablet@2x.png')})`,
      },
    },
    
    // 桌面断点(对应主题中的lg断点)
    [theme.breakpoints.up('lg')]: {
      backgroundImage: `url(${require('../../images/background/bg-desktop@1x.png')}), url(${require('../../images/animal/animal-desktop@1x.png')})`,
      
      [HIGH_DPI_MEDIA_QUERY]: {
        backgroundImage: `url(${require('../../images/background/bg-desktop@2x.png')}), url(${require('../../images/animal/animal-desktop@2x.png')})`,
      },
    },
  },
}));

原理说明

Material UI的样式系统支持在样式对象中嵌套任意媒体查询,包括设备宽度断点和高DPI查询。通过嵌套结构,我们可以实现:

  • 在对应设备宽度范围内,普通DPI屏幕显示1x图
  • 同一设备宽度下,高DPI屏幕自动切换为2x图

内容的提问来源于stack exchange,提问作者Дмитро Савченко

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.22 02:32:43