Запросы мультимедиа в компонентах Material-ui

Я использую компоненты Material-ui в проекте ReactJs, по какой-то причине мне нужно настроить некоторые компоненты, чтобы они реагировали в соответствии с шириной экрана.

Я добавил media query и передал его как атрибут стиля в компонентах, но не работал, какую-либо идею?

Я использую такой код

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

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

Код работает только в Интернете, а на мобильных устройствах нет никакого эффекта. даже код CSS не применяется, я проверил в dev. приставка. Я использую версию материала-ui 0.18.7.

Любая помощь будет оценена по достоинству.

PS: В соответствии с требованием мне нужно внести некоторые изменения в соответствии с размером экрана с помощью CSS.

Ответ 1

Используя атрибут точки прерывания темы, вы можете использовать те же точки прерывания, которые использовались для компонентов Grid и Hidden непосредственно в вашем компоненте.

API

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

аргументы

key (String | Number): ключ точки останова (xs, sm и т.д.) или число ширины экрана в пикселях.

Возвращает медиа-запрос: строка медиа-запроса, готовая для использования с JSS.

Примеры

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

Ответ 2

Итак, вот что вы можете сделать (быстрый взлом). Материал UI будет жаловаться на то, что вы делаете ненужный расчет.

const styles = {
  drawerWidth: {
    width: '50%',
    ['@media (min-width:780px)']: { // eslint-disable-line no-useless-computed-key
      width: '80%'
    }
  }
}

Ответ 3

Я решил эту проблему, выполнив что-то вроде этого:

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

а затем добавляет его как атрибут в элементе интерфейса материала:

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

Таким образом, ключ заключается в том, чтобы узнать окно экрана, используя window.screen.availWidth. И вы будете делать это в функции render(). Надеюсь, это поможет!

Ответ 4

В свойстве style в React вы можете определять только свойства, которые вы можете определить в обычном DOM-элементе (например, вы не можете включать запросы к мультимедиа)

То, как вы можете включить медиа-запросы для этого компонента, будет передавать имя класса в компонент Drawer

<Drawer containerClassName="someClass" /> 

А затем в файле CSS вы делаете что-то вроде этого

@media(min-width: 780px){
  .someClass {
    width: 50%!important;
  }
}

Ответ 5

У вас есть опечатка в медиа-запросе. Вы должны использовать следующий синтаксис, и он будет работать как положено:

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

вместо

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