MUI 组件中的媒体查询

IT技术 reactjs material-ui
2021-04-13 05:08:50

我在ReactJs项目中使用 MUI 组件,出于某种原因,我需要在某些组件中进行自定义以使其根据屏幕宽度做出响应。

我已经media query在组件中添加并传递它作为样式属性但不起作用,知道吗?

我正在使用这样的代码:

const drawerWidth = {
  width: '50%',
  '@media(minWidth: 780px)' : {
    width: '80%'
  }
}

<Drawer
  .....
  containerStyle = {drawerStyle}
 >
 </Drawer>

代码仅适用于网络,在移动设备上无效。甚至CSS代码都不适用我已经在开发人员控制台中检查过。我正在使用 MUI 版本0.18.7

任何帮助,将不胜感激。

PS:根据要求,我需要根据屏幕尺寸使用CSS.

6个回答

通过使用主题的断点属性,您可以直接在您的组件中使用用于 Grid 和 Hidden 组件的相同断点。

应用程序接口

theme.breakpoints.up(key) => media query

参数

key (String | Number):断点键(xs、sm 等)或以像素为单位的屏幕宽度数。

返回 媒体查询:准备与 JSS 一起使用的媒体查询字符串。

例子

const styles = theme => ({
  root: {
    backgroundColor: 'blue',
    [theme.breakpoints.up('md')]: {
      backgroundColor: 'red',
    },
  },
});

欲了解更多信息,请查看

这应该是答案
2021-05-29 05:08:50
@JasbirRana ["@media (min-height:800px)"]: { marginTop: 10 }
2021-06-14 05:08:50

所以这就是你可以做的(快速破解)。但是,Material UI 会抱怨您进行了不必要的计算。

const styles = {
  drawerWidth: {
    width: '50%',
    ['@media (min-width:780px)']: { // eslint-disable-line no-useless-computed-key
      width: '80%'
    }
  }
}
['@media (min-width:780px)']在数组内进行媒体查询将给出no-useless-computed-key. 仅使用 '@media (min-width:780px)' 并且它有效。
2021-06-01 05:08:50
好答案。参考github.com/mui-org/material-ui/blob/master/packages/material-ui/...查看方法up()down()输出一个字符串,如答案中所示,在方括号内。
2021-06-19 05:08:50

您在媒体查询中有拼写错误。您应该使用以下语法,它会按预期工作:

const drawerWidth = {
  width: '50%',
  '@media (min-width: 780px)' : {
    width: '80%'
  }
}

代替

const drawerWidth = {
  width: '50%',
  '@media(minWidth: 780px)' : {
    width: '80%'
  }
}
亲爱的@croraf,请将您的答案放在一对大括号内。就像这样:['@media (min-width: 780px)'],如果没有括号,您的答案还不起作用。谢谢。
2021-06-02 05:08:50
谢谢你的建议。我认为没有它们它也能工作。当内部有变量时需要大括号,因此在这种情况下需要对其进行评估,它是一个字符串,因此不需要。
2021-06-08 05:08:50

@Lipunov 的类似回答,基于@nbkhope 的评论

const styles = {
  drawerWidth: {
    width: '50%',
    [theme.breakpoints.up(780)]: {
      width: '80%'
    }
  }
}

我通过做这样的事情解决了这个问题:

const dropzoneStyles = 
window.screen.availWidth < 780 ? 
{ 'width': '150px', 'height': '150px', 'border': 'none', 'borderRadius': '50%' }
: { 'width': '200px', 'height': '200px', 'border': 'none', 'borderRadius': '50%' };

然后将其作为属性附加到 Material UI 元素中:

<Dropzone style={dropzoneStyles} onDrop={this.handleDrop.bind(this)}>

所以关键是使用window.screen.availWidth. 您将在render()函数中执行此操作希望有帮助!